渗透测试-XFF漏洞攻击原理及防御方案

01常见HTTP头注入参数

在介绍XFF注入之前,我们先来了解下常见的存在HTTP头注入的参数,如下图:
在这里插入图片描述
User-Agent:使得服务器能够识别客户使用的操作系统,浏览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)

Cookie:网站为了辨别用户身份进行session跟踪,并储存在用户本地终端上的数据(通常经过加密)

X-Forwarded-For:简称XFF头,代表了HTTP的请求端真实的IP。它被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地址的一个标准(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或某文件[通过修改XXF头可以实现伪造IP])。

Rerferer:浏览器向 WEB 服务器表明自己的页面来源。

Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。

X-Forwarded-For(XFF)

XFF是header请求头中的一个参数
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
代表了HTTP的请求端真实的IP。

X-Forwarded-For: client1, proxy1, proxy2, proxy3
//浏览器IP,第一个代理服务器,第二个三个四个等等

02XFF注入的概念

XFF,是X-Forwarded-for的缩写,属于SQL注入的一种,该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,达到欺骗服务器执行恶意的SQL命令的效果,从而可以得到网站的数据库内容。

03XFF的危害

①数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

②网页篡改:通过操作数据库对特定网页进行篡改。

③网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。

④数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。

⑤服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

利用方式

1.绕过服务器过滤

XFF漏洞也称为IP欺骗。
有些服务器通过XFF头判断是否是本地服务器,当判断为本地服务器时,才能访问相关内容。

  1. X-Forwarded-For: 127.0.0.1
  2. X-Forwarded-For: 192.168.1.1

修改XFF头的信息,即可绕过服务器的过滤。

2.XFF导致sql注入

XFF注入和SQL的header头部注入原理一样,服务器端会对XFF信息进行记录,
但没有进行过滤处理,就容易导致sql注入的产生

  1. X-Forwarded-for: 127.0.0.1’ and 1=1#

然后进一步利用sql注入,进行渗透测试。

04XFF漏洞复现

1. 确定漏洞的存在

使用burpsuite工具进行抓包,并用Repeater模块对请求进行修改,分别修改X-Forwarded-For的值如下所示:

X-Forwarded-for: 127.0.0.1
在这里插入图片描述
X-Forwarded-for: 127.0.0.1’’在这里插入图片描述X-Forwarded-for: 127.0.0.1’ and 1=1#在这里插入图片描述若访问的结果如上图所示,则说明存在SQL注入漏洞。

2. 判断查询字段数量

判断出字段数量是4。
在这里插入图片描述

3. 查询SQL语句插入位置

在这里插入图片描述

4. 查询当前数据库库名

查询出的当前数据库库名为aaa。
在这里插入图片描述

05 XFF注入PHP代码

在这里插入图片描述

06 防御方式

①过滤http头中的X-Forwarded-for header中的内容,不允许其插入敏感字符,过滤字符参考sql注入修复方案。

②过滤以下敏感字符

“net user”
“xp_cmdshell”
“add”
“exec master.dbo.xp_cmdshell”
“net localgroup administrators”
“select”
“count”
“Asc”
“char”
“mid”
“ ‘ ”
“ :”
“ " ”
“insert”
“delete from”
“drop table”
“update”
“truncate”
“from”
“ % ”

07 补充

服务器判断真实地址的参数有时不一定是XFF,可能是以下几个参数

  1. x-forwarded-fot
  2. x-remote-IP
  3. x-originating-IP
  4. x-remote-ip
  5. x-remote-addr
  6. x-client-IP
  7. x-client-ip
  8. x-Real-ip

使用模糊测试fuzz一下,或许能找到绕过服务器过滤的请求头

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
X-Forwarded-For漏洞是一种HTTP头部注入攻击攻击者可以通过修改HTTP请求中的X-Forwarded-For头部来伪造用户的IP地址,从而绕过IP地址限制等安全措施。修复该漏洞需要在代码中对X-Forwarded-For头部进行过滤和验证。 以下是一些PHP代码示例,可以用于修复X-Forwarded-For漏洞: 1. 使用正则表达式过滤X-Forwarded-For头部: ```php $xff = $_SERVER['HTTP_X_FORWARDED_FOR']; if(preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $xff)) { // X-Forwarded-For头部格式正确,可以使用该IP地址 } else { // X-Forwarded-For头部格式不正确,可能是攻击者伪造的IP地址,需要进行处理或拒绝该请求 } ``` 2. 只接受已知的代理服务器IP地址: ```php $xff = $_SERVER['HTTP_X_FORWARDED_FOR']; $proxy_ips = array('192.168.1.1', '192.168.1.2'); // 已知的代理服务器IP地址 if(in_array($xff, $proxy_ips)) { // X-Forwarded-For头部来自已知的代理服务器,可以使用该IP地址 } else { // X-Forwarded-For头部来自未知的代理服务器或攻击者,需要进行处理或拒绝该请求 } ``` 3. 使用PHP框架中的内置函数过滤X-Forwarded-For头部: 如果你使用的是PHP框架,例如Laravel、Symfony、Yii等,可以使用框架中的内置函数来过滤X-Forwarded-For头部。以下是Laravel框架中的示例代码: ```php $ip = request()->ip(); ``` 该代码中,`request()->ip()`函数会自动检测并过滤X-Forwarded-For头部,返回正确的客户端IP地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炫彩@之星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值