目录
SQL注入绕过手段
前提:如果程序中设置了关键字过滤,但是并没有对关键字的组成进行分析过滤,即只是整体过滤。例如,如设置了union这个过滤关键字,那么我们可以通过一些方式去实现相关的SQL注入绕过过滤,例如UniOn。
大小写绕过
MYSQL是大小写不敏感的,所以我们可以通过改变关键字的大小写来实现绕过,例如UniOn,AnD,OrdEr等。
双写绕过
如果程序设置了出现关键字之后将其替换为空,我们可以使用双写绕过。例如,
uniunionon
编码绕过
使用编码工具对内容(URL)进行加密,之后在web服务器段会进行解密。
内联注释绕过
在MySQL中内联注释的内容可以被当作SQL语句来执行。
POST基于时间和布尔的注入
注)关于POST和GET请求的区别,参考HTTP POST GET 本质区别详解
POST基于时间的注入
在存在注入点的POST提交参数的后面加上类似and if (length(database())>5,sleep(5),null)的内容,如果执行页面的响应时间大于5秒的话,就说明存在注入,SQL已执行,且数据库的长度大于5。
注)length(database()):数据库名的长度
下面使用burpsuite进行测试
如上图所示,请求体最后一行是post请求的参数,我们在它的后面加上了拼接的SQL语句,实现注入。添加的内容是:
' and (select if (length(database())>5,sleep(5),null)) --%20
从图上右下角可见响应时长超过5秒,说明数据库长度大于5。因此我们可以逐步测试,最终判断出数据库的准确长度,以及表名,字段名,表数据等详细信息。
注)此处的20%代表空格(可以用加号“+”代替),“--”后面需要加上一个空格以注释掉后面的内容。
POST基于布尔的盲注
在存在注入点post提交参数的后面拼接if判断正确或错误的语句,通过得到不同的返回结果,推测数据库的信息。拼接效果如下图所示
多次测试,根据返回结果,我们可以判断出准确的数据库长度等信息。
Sqlmap安全测试
注)Sqlmap常用命令参考:超详细SQLMap使用攻略及技巧分享
python sqlmap.py -r target.txt --technique T -p uname
python sqlmap.py -r target.txt --technique B -p uname
说明:target.txt的内容是http请求体(从burpsuite复制)。--technique T是基于时间的盲注,--technique B是基于布尔的盲注。-p uname指定参数名是uname。
HTTP Header中的SQL注入
如果程序并没有过滤掉http头中的参数,那么我们可以利用这些参数进行SQL注入。
例如Referer注入和User-Agent注入等。
实现方法
说明:使用MySQL的updatexml函数来爆出想要查询的信息
参考:在调用updatexml显错注入的时候为什么要用concat函数
Sqlmap安全测试
Header中的SQL注入一样可以使用Sqlmap执行,在target.txt的使用*号指定注入位置,然后使用下方命令即可实现。
python sqlmap.py -r target.txt
注)同样可以在post提交的参数处拼接updatexml函数来进行SQL注入。使用Sqlmap的话,用-p参数来指定post提交的参数(缩小探测范围以节省时间),命令如下:
python sqlmap.py -r target.txt -p passwd
Cookie注入
如果程序中使用了Cookie传递参数,但是并没有对参数进行过滤操作,就可能会导致SQL注入漏洞。
实现方法
说明:跟之前几个注入方式类似,在Cookie处拼接想要查询的内容。如下图右侧所示,通过使用MySQL的updatexml函数,正确爆出了数据库的版本号。
注)跟之前几个注入方式的burp操作不太一样,因为我们是在图上Cookie的uname处注入,这是一个登录页面,我们需要获取到服务器返回的uname(我自己的推测),所以需要执行下方过程,以获取到跟图上一致的内容(Cookie中包含uname参数):
设置代理(burp端和服务器端)→开启截断→点击【Action】的【send to Repeater】→点击【go】(此时登录成功)→点击【Follow redirection】(跟踪跳转到index页面--本例中)→【Forward】(两次--本例中)
此时可以看到,上图的左边部分的Cookie中带有了uname参数和值。此时就可以在uname处进行注入了。
Sqlmap安全测试
先在target.txt中用*号指定SQL注入的位置,如下图所示:
然后使用如下命令:
python sqlmap.py -r target.txt --level 3 --batch
探测结果如下图所示:
接下来就可以根据其他的Sqlmap语法来实现获取数据库的内容了。
Cookie Base64注入
太烦躁了,先到这吧