1. 程式人生 > >[XCTF嘉年華體驗賽](web)web2 assert函數

[XCTF嘉年華體驗賽](web)web2 assert函數

資料 origin 利用 width about 打包 package data add

0x00 題目分析


瀏覽一遍頁面,在about頁面,獲得如下信息

技術分享

訪問 .git/ ,頁面存在。

技術分享

使用githack扒下來。得到源碼,進行代碼審計。

分析得到:

1.flag在flag頁面,要看源碼才能看到。

2. 參數過濾了 ../ 也就是限定了只能在本目錄

3. exists函數 對文件的存在進行判定。

0X01 解題思路


理清思路,要看源碼,有哪幾種方法。

1.系統命令執行,cat 等函數

2.函數執行,show_source 等

3.將文件打包 ,下載下來。

這裏最有可能的就是函數執行了,雖然下面有一個 “require_once” 但是由於上面兩個語句的限制,不存在遠程包含。

將代碼扔進軟件自動審計。

技術分享

很顯然,關鍵就在assert函數,網上查找相關資料。

函數介紹參考以下頁面:

https://www.douban.com/note/217557007/

對這個函數的理解就是,這個函數會執行括號裏面的語句,括號裏面的句子的布爾真值不是true時候,就會提示warning。

下面是對這個函數的測試。

技術分享

技術分享

當為true的時候就沒有提示。

技術分享

所以,這一題。

註意閉合前後單引號,括號等。可得參數應為

page=1‘ ) == (show_source(‘templates/flag.php‘)) ;//

技術分享

網上找到一種這樣的:

page=‘ and die(highlight_file(‘templates/flag.php‘)) or ‘

這種寫法的是利用第二個assert,最後的句子為:

技術分享

執行了三個語句,裏面那個 “or” 也可替換為“and”

技術分享

0x02 小結


神奇的php函數:assert ,這個函數可以用來寫馬過狗,但一句話過狗太簡單了。

有什麽問題不先問問神奇的海螺呢?

繼續學習~~

[XCTF嘉年華體驗賽](web)web2 assert函數