開啟**,發現很簡單,只有flag在**的字樣。
檢視原始碼,常用後台目錄,robots.txt,都未發現有任何東西。
直接拉進掃瞄器一掃,發現
思考可能是git原始碼洩露,可能可以恢復原始碼。github上有很多優秀的git恢復工具。在這裡推薦兩款:git extract 和githack。都支援differ更改後的檔案,這點很重要,有些ctf比賽題會更改檔案,如果你的git恢復工具不帶的話,只能獲取未修改前的資料,無法獲取完整原始碼
使用git extract,獲取了原始碼:
<?php include "flag.php"; echo "flag在**呢?
"; if(isset($_get['exp'])) else } else } else } // highlight_file(__file__); ?>
發現這句**
if(';' === preg_replace('/[a-z,_]+\((?r)?\)/', null, $_get['exp']))
很經典的正則匹配無引數rce,大概解釋一下就是:
(?r)?表示引用當前表示式一次或多次。即可以變成\w+(\w+((?r)?)),\w+(\w+(\w+((?r)?))),等等在(?r)?中無限套娃的情況。所以只能讓引數=乙個函式,或函式包含函式的情況
方法網上也總結了很多,我在這就不再講原理,稍微梳理一下:
rce:
讀取檔案:
但本題又過濾了很多字串,導致無法使用,所以只講第一種方法
http頭傳參(session)
GXYCTF2019 禁止套娃
剛開始不知道幹嘛,就註冊做題思路,掃目錄,抓包,都沒上面思路,後面嘗試了下,git 洩露用githack掃一下 githack.py得到index.php include flag.php echo flag在 呢?if isset get exp else else else highlight ...
GXYCTF2019 禁止套娃 WP
用githack.py跑一下得到原始碼index.php include flag.php echo flag在 呢?if isset get exp else else else highlight file file 其中有三個過濾,第乙個過濾了常見的php偽協議。第二個這種正則,就是我們說的無...
GXYCTF2019 禁止套娃 無引數RCE
復現一下buuctf上的 gxyctf2019 禁止套娃 buuctf增設了waf 所以fuzz都不能用了.git洩露,不知道為啥我的githack掃不到呢?頭大 echo flag在 呢?if isset get exp else else else highlight file file 先熟悉...