MENU

SQLI注入的技巧

瞎哔哔一下

前面说了SQL注入的一些基本的东西 现在说说技巧方面的
基本上实战中 或者是有点难度的CTF题目都是有各种过滤的
我们也就需要使用一些技巧去绕过这些过滤

先判断过滤的逻辑

这个是很重要的 我觉得大致上可以分成三类
1.匹配到黑名单上的字符或字符串就终止运行
2.替换黑名单上的字符或字符串成奇奇怪怪的字符
3.替换黑名单上的字符或字符串为空
判断出相应的过滤逻辑就可以去反推源码
源码能推测出来注入就会变得简单一些

已经不知道怎么取标题了

其实如何应对过滤也和注入方式有关
在同样的情况下 就好比过滤逗号吧
布尔盲注时 可以用 substr(XXX from X for X) 来绕过过滤
而延时盲注时 就可以用 case XXX when XXX then XXX 来绕过过滤
像关键字被过滤
先判断过滤成什么了 过滤为空 可以用 ununionion 来绕过
过滤函数大写小敏感就可以用 UniOn 来绕过
其他一些情况可是使用 /*!5000union*/ 之类的来绕过
当然有些时候并不是过滤 union 也可能是其他的
或许有些函数不用费尽心思的绕过 换一个相同功能就行了
如果是空格被过滤可以使用 /**/ %0a 或者是利用 括号 构造特殊的sql语句
逗号的话 基本上上面例子的思路 找函数的另外的使用方式
单引号 还是要看源代码如何
在数字型注入中 过滤单引号唯一影响的就是获取字段名 这里可以用 16进制 绕过
在字符型注入中 单引号一般是被转义的
转义的话 一看函数 有些转义是多此一举 连续两次转义就会使转义失效 这个可能需要依赖源码做出判断
还有像 宽字节注入 由于字符集转换的问题 构造特殊的数据 使转义函数转义出一个单引号

说一些奇奇怪怪的技巧吧

group by with rollup offset 可以构造NULL作为SQL语句的返回结果
=从右到左运算 可以人为构造0=0 uname=1'=' pwd=1'=' 整体语句如下

$sql = "select * from users where username='1'='' and password='1'=''";

可以构造特定的md5值 用select (md5值) 来过登陆
子查询 文章:http://115.159.210.46/archives/3.html
还有 desc

$sql = "desc `sqli` `随便啥都可以`"; //这个是可以正确执行的

目前就这么多 主要是想不起来了 GG

Tags: CTF, WEB, SQLI
Archives QR Code
QR Code for this page
Tipping QR Code