1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【SQL注入17】绕过手法与防御

【SQL注入17】绕过手法与防御

时间:2021-02-06 23:16:06

相关推荐

【SQL注入17】绕过手法与防御

目录

1 绕过1.1 符号绕过方法1.2 关键字绕过方法 2 SQL注入防御措施3 总结参考文献

1 绕过

最终目的是让后台执行的语句是我们想要的。

1.1 符号绕过方法

基础情形:字符串常用这些符号闭合起来,如'str'、"str"、('str')、("str")等多种组合方式,我们想插入语句让SQL去执行,就需要让该语句处于闭合符号之外,这时就涉及到了绕过问题。为了举例简单,以下例子以单引号闭合的字符型注入为例。在之前的练习中,我们常用以下方法来直接注释掉语句后的单引号: 在URL中,使用减减加来将语句后的内容注释掉。如?id=1' --+在其他注入位置中,使用井号#或其16进制码%23来注释。 有时候语句后单引号之后,还有后台执行所需要的语句或参数,如《User-Agent 注入基础及实践》提到的例子,直接注释将导致数据库执行时缺少参数。既然不能注释,那就只能构造语句与单引号闭合了: 构造一个判断语句来闭合,如?id=1' and 注入语句 and '1'='1。甚至直接用一个引号,如?id=1' and 注入语句 or '有时候,后台会对输入的参数进行过滤,比如将引号、井号等过滤掉,这就会比较麻烦甚至无法注入: 如若后台数据库编码采用的是GBK,我们尝试宽字符注入,构造%df与转义符构成满足GBK的文字,让被转义的引号等成功逃逸。还有其他方法吗??

1.2 关键字绕过方法

当数据后台对参数进行筛查时,可能会将一些敏感词汇命令进行过滤,如and、order等。对于and和or,可以尝试使用运算符代替,如?id=1 && 1=1。利用数据库对字母大小写不敏感的特点,采用大小写混编的方式绕过。如?id=1 And 1=1。数据库可能过滤一次后将剩余字符拼接再次执行,采用双写的方式进行绕过,如?id=1 aandnd 1=1。对关键词进行二次URL编码,比如and一次编码后为%61%6e%64,二次编码后为%25%36%31%25%36%65%25%36%34,则注入参数为?id=1 %25%36%31%25%36%65%25%36%34 1=1

采用内联注释的方法,如?id=1 /*!and*/ 1=1

2 SQL注入防御措施

使用预编译语句

使用PDO预编译语句。需要注意的是,不要将变量直接拼接到PDO语句中,而是使用占位符进行数据库 的增加、删除、修改、查询 。过滤危险字符

多数CMS都采用过滤危险字符的方式,例如,采用正则表达式匹配union、sleep、load file等关键字,如果匹配到 ,则退出程序。严格限制网站访问数据库的权限。避免网站显示SQL执行出错信息。

3 总结

理解绕过的精髓;掌握一些常见的字符和关键字的绕过思路与方法;后续应加深编码绕过的研究,理解一个请求从客户端到服务器经历过哪些编码与解码。后续应加深内联注释绕过的研究,理解什么被注释了还能执行。了解常用的防御思路与方法。

参考文献

《绕过WAF继续SQL注入常用方法》《预编译语句(Prepared Statements)介绍,以MySQL为例 》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。