渗透测试

概述:通用的方法,不仅限于 SQL 注入,就是万金油,无非就是大小写、双写、编码、注释、垃圾字符、分块传输、HPP、WAF 特性等

核心: 所有能改的地方,都捣鼓捣鼓改改,增加就加,能删就删,多拿点其他内容来混淆视听。

大小写

unIoN Select

双写

一些后端可能会直接给关键词过滤为空,那么就可以利用双写来绕过

ununionion ==> 去掉union ==> union

编码

  1. URL 编码

  2. Unicode 编码

  3. 十六进制编码

  4. 其他后端会解析的编码

注释

如 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 插件:.git

在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,post 请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用 0 独占一行表示结束。

HTTP 协议绕过

HTTP 0.9

HTTP 0.