无参rce
無參rce
前幾天比賽中遇到的一道題,get了無參rce的一種新的方法
121.196.32.184:12001
基礎繞過
訪問./3b8cf4731c36d20776c76e20f9c774c7.php
參考鏈接https://www.jianshu.com/p/7355a5ab4822
解碼提示
訪問得到一個php文件
html>$file=$_POST['file'];if($file!="/xxx")die("你需要知道寫入的文件名!!!!!我猜你知道到這個文件叫什么,記得加上絕對路徑");if(';'=== preg_replace('/[^\W]+\((?R)?\)/', '', $data)) {echo"great!!!!你需要看看源碼";file_put_contents($file,"");}</html>>代碼非常清晰,首先
preg_replace('/[^\W]+\((?R)?\)/','',$_GET['code'])代碼會將KaTeX parse error: Undefined control sequence: \W at position 21: …'code']中滿足正則/[^\?W?]+((?R)?)/的部分,替…_GET[‘code’]);否則什么都不做。那么思路很明確,我們弄清楚正則即可進行RCE
[^\W]+\((?R)?\)首先是[\W],對于\W,其意思等價于[A-Za-z0-9_]。那么我們知道,我們的input必須以此開頭
然后是括號匹配( … )括號中間為(?R)?意思為重復整個模式。簡單理解,我們可以輸入以下類型a(b(c()))
但我們不能加參數,否則將無法匹配a(c,d)
所以正則看完,題目的意思非常明確了:我們只能input函數,但函數中不能使用參數,否則判斷句右邊經過替換,將不止剩余分號;
漏洞點分析
那么有沒有辦法通過無參數函數,達到RCE的目的呢?答案顯然是不可能的,沒有參數,怎么傳遞我們需要執行的指令呢?
所以我們的目標也變得很明確:通過我們傳遞的參數來進行RCE,有如下函數
get_defined_vars(),達到RCE的目的。
get_defined_vars()此函數返回一個包含所有已定義變量列表的多維數組,這些變量包括環境變量、服務器變量和用戶定義的變量。
測試一下
然后將[“a”]=>string(10)"phpinfo();"提取出來,這里需要用到next();current();end();等相關函數具體看鏈接https://www.runoob.com/php/func-array-next.html
這里執行一下
執行命令
-wfqwopFX-1606457944243)]
執行命令
[外鏈圖片轉存中…(img-IsXa02vy-1606457944245)]
總結
- 上一篇: google s2 java开发文档
- 下一篇: 将宇宙最强vscode打造为刷题神器