天积安全靶场攻略 | CRLF 注入靶场通关攻略

大家好,我是 Vista_AX 👋

最近好多朋友私信问CRLF 注入靶场怎么过,今天干脆统一捋一遍,带大家丝滑通关第一个实战靶场。

这是一类经典却容易被忽视的 Web 漏洞------只要你能往响应头里塞一个回车换行,整个 HTTP 响应就可能变成你的"游乐场"。

抓包工具准备好了吗?直接开整!🔧

天积靶场免费下载地址:

第一步:信息收集 --- 读懂题目在说什么 🕵️‍♂️

进入靶场后,查看靶场说明:

"需要利用CRLF注入漏洞构造特定的钓鱼链接使用户访问后会跳转到指定的页面"

提取关键信息"利用CRLF注入漏洞",CRLF漏洞又名HTTP响应拆分漏洞,因Web应用未严格验证用户输入,导致攻击者可在HTTP头中注入回车换行符,从而篡改HTTP响应头。由此判断本靶场可能和篡改HTTP 响应头有关。

保持着这个思考,再来看看页面用户登录处的提示:

"请构建一个请求链接,点击后会自动跳转到百度"

抓住关键信息"跳转到百度",结合CRLF注入,猜测通关需要改变HTTP响应头的方式实现百度页面的跳转。


接着,既然有测试账号可以登录,那就登录看看呗,尝试用测试账号heasec/123456登录,发现页面存在新提示。

"想一想,有哪些响应头可以实现页面跳转?在什么样的情况下才能生效?"

好,进一步明确漏洞确实和 HTTP 响应头 有关,那接下去进一步抓包看看,看看靶场的请求包构成,看看怎么有机会能够篡改响应包...

第二步:功能分析 --- "用户名"暗藏玄机 🔍

仔细观察进入靶场的页面行为:

  • 登录表单的用户名输入框,会 自动填充 heasec 用户名

产生疑问🤔,用户名是如何传入的?

发现浏览器上头URL 中赫然写着:

index.php?username=heasec

用 Yakit 抓包,看看服务端到底干了什么👇:

复制代码
请求:GET /index.php?username=heasec
响应头中出现了:X-User-Name: heasec

发现关键线索 :服务端把 username 参数的值,直接写进了 HTTP 响应头(X-User-Name)中。((实际场景通常是输出到Set-Cookie中用于设置cookie记住用户名,这里使用X-User-Name头来模拟)

那从这里我们可以猜测,通过修改 username 参数的值,是不是就可以控制响应头了?进一步尝试看看


第三步:理解 CRLF --- 控制响应头

如何控制响应头呢,先来理解CRLF,HTTP 协议中,响应头之间用 \r\n(CRLF,即回车+换行)分隔,头部和响应体之间用 \r\n\r\n(双 CRLF)分隔。

已知服务端把 username 参数的值,直接写进了 HTTP 响应头(X-User-Name)中,当username=heasec时,正常的响应结构如下:

http 复制代码
HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
X-User-Name: heasec\r\n
\r\n
<html>页面内容...</html>

假设 username 参数值里包含 \r\n,服务端又没有过滤,那猜想就可以 注入额外的响应头,被构造的响应结构如下:

http 复制代码
HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
X-User-Name: heasec\r\n
X-Test: hello
\r\n
<html>页面内容...</html>

进一步验证下 猜想是否成立 ,构造测试请求(注意在浏览器地址栏中,\r\n 需要编码为 %0d%0a(URL 编码))

复制代码
index.php?username=test%0d%0aX-Test:%20hello

查看响应头,成功出现了 X-Test: hello,说明CRLF注入存在,可以凭借此种方式控制响应头。

至此我们发现可以通过CRLF注入的方式成功控制响应头了。


第四步:构造请求 --- 让你跳你就得跳 🏃‍♂️

在可以控制响应头的情况下,进一步思考有什么响应头可以实现页面跳转?下意识反映是Location头,尝试看看

发现不行,再进一步查看,发现

Refresh响应头是可以的,那我们如何再响应包中另起一行构建Refresh响应头去实现跳转呢?

如果 username 的值里包含特殊的换行字符呢?

再构造通关 Payload ,通关要求是跳转到百度,所以注入 Refresh 头:

复制代码
index.php?username=test%0d%0aRefresh:%200;url=https://www.baidu.com

解码后的效果等价于:

http 复制代码
X-User-Name: test
Refresh: 0;url=https://www.baidu.com

访问这个 URL,页面成功跳转到了百度,说明CRLF注入成功。


第五步:获取通关密码

再次进入靶场,重新登录heasec账号,用户信息区域出现通关密码了。

将这串 20 位的通关密码填入 秘密验证 卡片,验证通过即可完成本关。

思路总结

步骤 做了什么 发现了什么
信息收集 阅读页面提示 漏洞与 HTTP 响应头、URL 参数有关
功能分析 观察"记住用户名"行为 username 参数被写入X-User-Name响应头
抓包确认 F12 查看 Network 确认参数值未过滤直接进入响应头
原理利用 注入 %0d%0a 构造新响应头 成功注入 Refresh 头实现跳转
完成验证 回到页面获取密码 提交通关密码完成挑战

核心思路 :凡是用户输入被写入 HTTP 响应头的地方,都值得测试 CRLF 注入。%0d%0a 就是打开这扇门的钥匙。

相关推荐
龙亘川2 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19912 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
LorryJovens2 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
山东科恩光电2 天前
提升安全性的关键技术:安全触边在工业自动化中的应用解析
安全
LONGZETECH2 天前
一线职教实测:风光 580 汽车故障诊断仿真系统,破解实车实训四大核心痛点
人工智能·学习·安全·架构·汽车
Mikko72 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
赛博守夜人2 天前
反舞弊系列之十四:商业地产与零售招商中的“转租差价与免租期寻租”
安全
xiaoqiMikko2 天前
你升的是 jackson-databind,中招的是 jackson-core:一个超长 JSON key 就能吃掉 200MB 堆
java·安全