SQL注入篇–其他注入方式
1)宽字节注入
先来说什么是宽字节。当某字符的大小为一个字节时,称其字符为窄字节.当某字符的大小为两个字节时,称其字符为宽字节.所有英文默认占一个字节,汉字占两个字节。常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等。
宽字节注入其实就是后端用了类似php中addslashes()的函数或方法。这个函数或方法会在输入的特殊字符前加入反斜杠\表示转义。但是因为宽字符的原因,转义的窄字符加输入的窄字符组合就是宽字符。所以后端如果使用宽字节编码,那么就可能可以使用宽字节注入。如下:
我们可以看到查询的sql语句被加了反斜杠,所以单引号不能做到闭合了。我们可以输入这个:%9D‘
可以看到反斜杠被和谐掉了,这样我们的单引号就可以完成闭合,然后我们可以构造payload:
?id=%9D’ union select 1,database(),3 --+
2)加密注入
如果我们无论输入什么都无法获取回显,我们可以尝试输入加密的数据来尝试,比如使用base64进行一个加密:
所以我们后续注入也要使用base64进行加密:
3)搜索型注入
搜索功能在许多web项目中非常常见,当我们可以操作搜索用的sql语句时,我们就可以使用搜索型注入:
查看回显,得知搜素型注入可以利用,我们构造payload:
?name=asdasd%’ union select database(),user(),3 --+
4)cookie注入
cookie注入其实就是后端将cookie信息存放到了数据库,其注入原理和一般的sql注入一样,就是注入点是http请求中的cookie。
我们使用sqlilab的第20关来演示:
首先正常登录:
发现这关将cookie信息和useragent信息全部放到了页面上,所以推测它的后端存放了这些信息到数据库,下面bp抓包尝试闭合:
可以看到响应包里边的数据,有报错,看信息直到这是单引号闭合,下面构造payload执行,这里使用报错注入: