Advanced Injections


来对SQL靶场第二章做个总结:对于过滤机制的绕过姿势和二次注入攻击和绕过WAF和宽字节注入攻击

一.过滤机制的绕过姿势

preg_replace()函数:preg_replace(要替换的东西,替换成啥东西,哪个里面的东西需要替换)
1.对于注释符号的过滤

两种解决方法:使用%00截断或者让每个单引号都彼此配对
2.对于不区分大小写的and和or的过滤

对于这个匹配大小写的过滤机制,我们可以使用双写绕过
3.对于空格的过滤

对于空格的过滤我们一般可以使用%家族进行绕过:%家族包括但不限于%20 %09 %0a %0b %0c %0d %a0
或者换成报错注入或者盲注这种对空格需求不的大攻击方法
注:使用&&将逻辑和updatexml分开

1
?id=1'%26%26updatexml(1,concat('~~',database()),1)%26%26'

正则表达式的匹配






二次注入攻击

二次注入(存储型注入),这种手法所利用的原理是:在网站处理用户提交的数据的时候,只是将某些敏感字符进行了转义。因而使得用户第一次提交的时候不会被当做代码执行。但是这些数据存入数据库的时候却没有转义,而网站程序默认数据库中的数据都是安全的,当网站程序第二次调用刚才存储的脏数据的时候,则不会转义使用而是直接使用,因此就会达到注入的效果。
流程:
1.黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。
2.服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
3.黑客向服务端发送第二个与第一次不相同的请求数据信息。
4.服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。


绕过WAF

理解tomcat服务器过滤第一个参数;然后交给apache服务器进行处理第二个参数;所以咱们就可以构造两个参数
第一个参数为我们的合法数据;第二个参数为我们的注入攻击数据。


宽字节注入攻击

将php的sql语句以character_set_client进行编码(也就是转十六进制);在将16进制数以character_set_connection进行编码(也就是转为url编码),然后在以内部字符集进行url解码;最后以character_set_results编码进行输出。


addslashes():该函数用于添加字符串里的反斜杠


preg_quotes()函数:这个函数的功能为向其中每个正则表达式语法中的字符前增加一个反斜杠
mysql_real_escape_string()函数:进行转义

注入的姿势:使用%df吃掉 \


Advanced Injections Finish!