访问告诉我们要用WLLM 浏览器模式访问
import requestsurl = 'http://node7.anna.nssctf.cn:23148/hello.php' # 替换为题目提供的URL
headers = {'User-Agent': 'WLLM'
}
response = requests.get(url, headers=headers)
print(response.text)
import requestsurl = 'http://node7.anna.nssctf.cn:23148/hello.php' # 将URL改为本地地址 headers = {'User-Agent': 'WLLM', # 模拟WLLM浏览器'X-Forwarded-For': '127.0.0.1' # 添加伪造的IP头 } response = requests.get(url, headers=headers) print(response.text)
传统做法
抓包得到源码,发送到重放器
这里修改agent
使用
X-Forwarded-For
这个请求可以来伪造
X-Forwarded-For
的原理和功能
X-Forwarded-For
是一种 HTTP 请求头,主要用于标识通过代理或负载均衡访问 Web 服务器的客户端的原始 IP 地址。它是由代理服务器或负载均衡器添加的,用于记录客户端的真实 IP 地址。原理
- 当客户端通过代理服务器或负载均衡器访问目标服务器时,目标服务器只能看到代理服务器的 IP 地址。
- 为了解决这一问题,代理服务器会在 HTTP 请求头中添加一个
X-Forwarded-For
字段,记录客户端的真实 IP 地址。- 多级代理场景下,
X-Forwarded-For
会以逗号分隔记录多个 IP,格式如下:makefile
复制代码
X-Forwarded-For: 客户端IP, 代理1IP, 代理2IP
功能
- 帮助服务器识别用户的真实 IP 地址。
- 用于日志记录、访问控制或地理位置分析。
- 可用于安全检查,如防止 DDoS 攻击。
可以伪造的内容
除了伪造客户端的 IP 地址,
X-Forwarded-For
还能用来伪造以下信息:
多级代理链
可以伪造一个假的代理链,例如:makefile
复制代码
X-Forwarded-For: 192.168.1.1, 10.0.0.1, 127.0.0.1
服务器可能会解析第一项作为客户端的真实 IP。
注入恶意字符
在某些情况下,可以尝试伪造含有恶意字符的值,可能会触发漏洞:javascript
复制代码
X-Forwarded-For: <script>alert(1)</script>
伪造为内网地址
一些系统可能错误地认为127.0.0.1
或内网地址(如192.168.x.x
)是可信的,从而授予特权。SQL 注入或其他攻击载荷
如果服务器没有对头部进行严格验证,可以尝试注入攻击载荷:bash
复制代码
X-Forwarded-For: 127.0.0.1' OR '1'='1
X-Forwarded-For
的伪造原理
- 请求头可控性:HTTP 请求头是由客户端发送的,服务器通常不会验证其真实性。
- 信任代理服务器:很多服务会信任代理添加的
X-Forwarded-For
,但不会验证其来源,因此可以直接伪造。- 服务器解析逻辑漏洞:一些服务器只解析
X-Forwarded-For
的第一个值,忽略后续 IP,这为伪造提供了便利。
顺带学学 原理