SQL-Labs
环境搭建
docker
题解
less-1 -> less-4
有回显有报错,尝试联合注入。
?id=1' order by 3;--+ # 爆字段数
?id=-1' union select 1,2,database();--+ # 爆库名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security';--+ # 爆表名
?id=-1' union select 1,2,group_concat(column_name) FROM information_schema.columns where table_schema='security' and table_name='users';--+ # 爆字段
?id=-1' union select 1,2,group_concat(username, " ", password) from users --+ #爆字段内容less-2 去掉单引号即可,不需要闭合。
less-3 的 id 使用了('拼接,使用')闭合即可。
less-4 的 id 使用了("拼接,使用")闭合即可。
less-5 -> less-6
有回显,但是回显格式固定;有报错,猜测是报错注入,这里用了XPath语法报错注入。
注意报错注入限制了返回字符串的长度,可以通过逆序读取字符串、向右读取字符串、字符串截取三种方式绕过限制。
less-6使用双引号闭合。
less-7
有回显,没有具体回显信息,但是可以区分是否查询成功;有报错,但是没有输出报错信息,想到可能要用盲注。
提示给出"Use outfile",猜测用户拥有文件读写权限。
于是读取/etc/passwd文件
接着读取user表。
才学疏浅,看到有姿势知道可以Apache配置文件,获得网站路径。
Apache配置文件路径;
但其实不读也没关系?毕竟通常Apache目录都在/var/www/html/下。
还有正常其实是可以写入文件的,直接exec进去改权限。

写入文件之后蚁剑一把梭。
Less-8
布尔盲注
Less-9 -> Less-10
时间盲注
Less-10
把单引号改成双引号即可。
Less-11 -> Less-14
这关终于有个登录功能了,万能钥匙直接登录。
报错注入数据外带
跟Less-5一样的payload。
Less-12用")闭合。
Less-13用')闭合。
Less-14用"闭合。
Less-15 -> Less-16
报错爆不出来了,只能尝试盲注了。
看了一下源码,原来是不打印报错信息了。
看一下源码
直接单引号闭合盲注完事
Less-16
改成")完事。
这里脚本写的有点问题,延时的特别久直到timeout,也不懂是啥问题,最后只能用try捕捉了。
Less-17
密码更新功能,是update注入。
源码中打印error信息,报错注入一把梭。
Less-18
User-Agent注入,继续报错注入
Less-19
Referer注入,和上一题差不多。
Less-20
Cookie注入
登录后修改Cookie
Less-21
同Cookie注入,但是被Base64编码
登录后修改Cookie
Less-22
跟上一题一样,只是闭合方式改成双引号
Less-23
又回到了ID注入
多了正则表达式,过滤了两个常见的注释字符,只要使用闭合而不是注释字符即可绕过。
Less-24
看到有修改密码功能,直接盲猜二次注入。
看一下注册功能。
传入的username被转义,再看一下修改密码功能:
发现这里的$username被直接拼接使用,而没有经过转义,可以石锤二次注入。
注册账号,设置$username
再次修改密码,原SQL语句进行拼接,结果为:
可以直接修改原有账号admin的密码。
Less-25 -> Less-25a
把关键字OR和AND过滤,双写绕过。
25a是数字型注入,不需要闭合。
Less-26 -> Less-26a
这题做的云里雾里,没有很懂后面的原理。
测试了一下,发现空格和注释被过滤了。
这题解法比较多元,可以用异或连接。
让我们在白盒测试一下,原SQL语句如下:
拼接后:
测试一下,经过测试发现数字无论是多少,都会执行中间的updatexml语句,因为要进行异或操作,所以必定会执行XPath语句,然后报错
同理,相同的方法有||,也可以进行绕过。
而空格可以使用%0a绕过,在MySQL中,%0a、%0b等特殊字符都能进行绕过。
Less-27 -> Less->27a
大小写绕过即可,只要括号用的够多,是可以绕过空格过滤的。
27a将'改为"即可。
Less-28
试了半天,没法报错注入了,一看源码,又把print给注释了。
于是接着盲注。
Less-29
看了源代码,注意到有报错提示,id变量用单引号闭合
注就完事了。
Less-30
这关注释了报错注入提示,但是有回显,可以考虑布尔盲注,也可以使用联合注入,提交的ID被双引号闭合。
Less-31
闭合方式不一样,多了一个",可以使用报错注入,与29类似。
Less-32 -> Less-37
GBK编码注入,利用%df进行宽字节注入。
这几题原理类似,不再赘述。
Less-38 -> Less-41
堆叠注入。
这几题原理类似,修改闭合方式即可。
Less-42 -> Less-45
password没有过滤,可以堆叠注入。
Less-46 -> Less-47
注入方式很多,随便注就行。
Less-48 -> Less-49
这两题没有报错回显,盲注就行。区别在单引号上。
Less-50 -> Less-53
和前面的堆叠注入exp一样。
Last updated