代碼審計思路 php代碼審計思路( 二 )


代碼審計思路 php代碼審計思路

文章插圖
代碼審計思路 php代碼審計思路

文章插圖
2.接下來他將會使用反射來實例化,但到目前為止,他的路由調度也算是完成了 。
代碼審計思路 php代碼審計思路

文章插圖
代碼審計思路 php代碼審計思路

文章插圖
(二)總結 簡單來說,總結如下:
1. 當你傳入了一個URL后,thinkphp會把你的URL提取出來;
2. thinkphp對傳入的URL進行解析;
3. 解析后,thinkphp對URL進行拆分;
4. 拆分后,重組為一個命名空間;
5. tp5取得命名空間后,通過反射的方式實例化 。
(三)漏洞來源
我們剛剛一直在提,tp5是怎樣解析這個我們傳入的URL?tp5是怎樣處理URL?
\’\\\’、\’/\’這兩個符號的處理方式是不一樣的:如果我們傳入的是\’\\\’,那他會把\’\\\’前面的部分和后面的部分當做是一個整體;如果我們傳入的是\’/\’,那他就會拆開\’/\’前后的字符串,然后分別賦值 。
舉例:
你傳入了一個:1\\2,那tp5會認為這個1和2是分開的;
你傳入了一個:1/2,那tp5會認為這個1和2不是分開的;
這個就是tp5系列路由漏洞的成因了 。
那我們就有幾個問題:
1. 怎么訪問到可能包含惡意代碼的文件中去?
2. 如果你想訪問這個惡意代碼,你得怎么構造?
3. 你構造出來的話,怎么去用?
這里我們再寫一下正常的構造方式:
http://localhost/index.php/admin/index/hello
我們構造一個訪問thinkphp/think下的Container.php
http://localhost/index.php/模塊名/File/get?name=path
【代碼審計思路 php代碼審計思路】 惡意命名空間構造
http://localhost/index.php/index/think\\Container/exists
但是這個斜杠我們在使用的時候就已經直接給轉換了,所以我們用不了,我們就得使用這個兼容模式來構造了 。
http://localhost/index.php?s=index/think\\Container/exists
在這里,他就獲取了一個可以說是惡意的命名空間了 。
代碼審計思路 php代碼審計思路

文章插圖
代碼審計思路 php代碼審計思路

文章插圖
(四)Nday 使用方法
s=index/think\\request/input?data=https://www.0579wy.com/article/whoami&filter=system
代碼審計思路 php代碼審計思路

文章插圖
代碼審計思路 php代碼審計思路

文章插圖
這里跟進后,你可以看到一個非public的方法,這也驗證了我們之前說的一個事情,就是你挖洞或者打CTF的時候,如果你在一個框架中,沒有找到直接訪問惡意代碼的地方,你可以去一些曾經調用過這些方法的辦法中一級一級地往上溯源,直到找到入口 。然后再開始構造poc,一步一步地測試 。在這個方法中,我們可以看到1437行中有一個call_user_func(),并且這個方法中的傳參并沒有被寫死,所以我們可以嘗試去構造一些東西 。
(五)擴大攻擊面
我們通過這次分享,知道了tp、命名空間是怎么用,了解到如何通過使用命名空間去訪問一個含有惡意代碼的類 。通過這種方式,我們可以嘗試擴大自己的攻擊面,不一定要從call_user_func這種方法直接入手,但是我們可以去嘗試讀文件或者任意刪除這種東西 。雖然我們相比于這種低?;蛘咧形B┒矗鼉A向于RCE拿到權限,但有時候一些中低危也有可能會包含一些比較隱蔽的、提升危害的方法 。
(六)了解小星,了解星云博創
星云博創科技有限公司(簡稱“星云博創”)成立于2016年,是國內新興的網絡安全產品、可信安全管理平臺、專業安全服務與解決方案的綜合提供商 。星云博創設北京為北方總部,廣州為南方總部,并于成都、合肥、南昌、貴州、武漢、太原、哈爾濱等多個城市設立分支機構 。同時,星云博創為不斷完善客戶服務體系和應急響應體系,在全國10余個省、市、自治區、直轄市建立三級服務支持中心,7×24小時接受客戶需求,及時提供標準一致的安全服務 。
作為一家以技術先導的企業,星云博創始終堅持在網絡安全、數據安全、態勢感知、等級保護、合規性安全管理等領域進行技術創新,利用安全分析、大數據分析、人工智能等技術,對網絡空間安全要素、安全風險進行深度挖掘與關聯分析,構建了多層次的縱深防御體系,持續推出態勢感知平臺、靜態脫敏系統、終端安全監測系統等一系列優秀的安全產品和行業解決方案,廣泛應用于政府、運營商、醫療、教育、電力、能源等多個領域,讓風險無所遁形 。

推薦閱讀