概述:通用的方法,不仅限于 SQL 注入,就是万金油,无非就是大小写、双写、编码、注释、垃圾字符、分块传输、HPP、WAF 特性等
核心: 所有能改的地方,都捣鼓捣鼓改改,增加就加,能删就删,多拿点其他内容来混淆视听。
大小写
unIoN Select
双写
一些后端可能会直接给关键词过滤为空,那么就可以利用双写来绕过
ununionion ==> 去掉union ==> union
编码
-
URL 编码
-
Unicode 编码
-
十六进制编码
-
其他后端会解析的编码
注释
如 mysql 中的内联注释,可以用来代替空格
注释也可以和换行搭配使用,注释掉后面的内容,再通过换行逃逸到注释之外
test.php?id=1 /*!order*//**/%23A%0A/**/%23A%0A/*!by*//**/2
垃圾字符
一些 WAF 设置了过滤的数据包长度,如果数据包太大太长,为了考虑性能就会直接略过这个数据包
GET /foo?sqli=111...80万个1...111'+and+2*3=6+--+ HTTP/1.1
User-Agent: Mozilla/5.0
Host: Host
Accept: */*
分块传输
burp 插件:https://github.com/c0ny1/chunked-coding-converter.git
在头部加入 Transfer-Encoding: chunked
之后,就代表这个报文采用了分块编码。这时,post 请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用 0 独占一行表示结束。
HTTP 协议绕过
HTTP 0.9
HTTP 0.