1、宽字节注入
sqllabs-less-32为例
使用单引号进行测试
提示我们输入的单引号被转义符 \ 进行了转义,即转义符自动的出现在输入的特殊字符前面,这是防止sql注入的一种方法,导致无法产生报错。
这种情况我们就可以尝试宽字节注入,后面加上 %df'
由于输入的特殊字符会自动被添加转义符 \ ,其中 \ 的十六进制是%5c,mysql的GBK编码会认为%df%5c是一个宽字节,也就是'運',从而使单引号闭合(逃逸),进行注入攻击。
payload:
?id=1%df'
出现了报错和乱码
接下来我们就可以在上述payload的基础上进行注入
判断字段数
?id=1%df' order by 3 --+
?id=1%df' order by 4 --+
说明只有三列
进行相关查询即可
(注意要使用-1使前面查询不成立,如果你还是用一个存在的id那么回显就是对应id用户的内容)
?id=-1%df' union select 1,database(),user() --+
2、httpXFF头注入
HTTP XFF头注入(X-Forwarded-For Injection),攻击者在HTTP请求中伪造XFF头,将恶意代码注入到HTTP请求头中,从而执行SQL注入攻击。
XFF属于header的一种
HTTP Header注入的前提条件:
能够对请求头消息进行修改
修改的请求头信息能够带入数据库执行
数据库没有对输入的请求头做过
常见的HTTP Header注入类型:
Cookie注入:服务器对cookie字段进行获取,以验证客户端的身份。
Referer注入:服务器记录referer字段用于统计网站的点击量。
User-Agent注入:服务器记录访问者的浏览器操作系统版本。
XFF注入:记录客户端的真实IP,然后写入数据库
这里以sqllabs-less-18为例
由于我之前修改了admin的密码,为12345
我们使用admin这个账户进行登录
登陆成功后回显了User Agent 的相关信息
我们使用burpsuite进行抓包拦截
对其?User Agent 进行修改
使用单引号尝试闭合,出现SQL语句报错,因此确实存在注入
并且观察报错内容,这里我们除了闭合单引号,还有一个括号也需要闭合
User-Agent: 1')#
没有出现sql语句报错说明闭合成功?
但是报错列数不匹配
经过尝试得到有三列,这里的难点还是要闭合括号,并使用#注释掉后面的内容
User-Agent: 1',2,3)#
因为这里并没有看到关于我们输入的1,2,3的回显位置,因此采用报错注入。
这里演示使用extractvalue函数爆数据库名
User-Agent: 1',extractvalue(1,concat(0x7e,(select database()))),3)#
关于爆其他内容可以参考我之前的博客关于SQL报错注入的相关内容。
至此,关于SQL注入的内容全部结束,后续我们将进入其他Web漏洞的学习。
期待大家的关注与支持!