最近在看Seay大大的代碼審計一書,邊看邊做一些代碼審計的復現。
在講代碼審計思路時,大大用espcms舉例挖掘了個sql注入漏洞,現在準備復現一下。
此案例主要是根據關鍵字回溯,然後得到漏洞。
使用seay大的代碼審計系統,自動審計,可挖掘到一些敏感度代碼。例如:
挑選一個代碼,選中,雙擊進行查看:
此處是將參數帶入數據庫進行查詢,接下來對parentid進行全局搜索,發掘其參數傳遞過程:
在全局搜索裏邊發現,該參數會經過accept方法處理,跟蹤定位該函數:
通讀代碼可知,傳入的參數是R,所以此處傳遞參數的方法既可以是get也可以是post。然後使用daddslashes進行過濾,其實質就是addslashes。
在回顧前文代碼,sql查詢語句並沒用單引號進行分隔,因此,此處存在sql注入漏洞。
返回調用sql語句的那個方法,可知是一個繼承了connector的類,名爲important。因此可以直接全局搜索此類,查看他的調用。
發現在這個路徑下存在一個實例化調用:
繼續跟蹤這個對象:
這裏雖然存在include,但是由於之前有addslashes,所以無法完成任意文件包含。繼續看就是一個實例化類,調用函數的操作,因此可以構建exp:
http://127.0.0.1/espcms/adminsoft/index.PHP?archive=citylist&action=citylist&parentid=-1 union 1,2,user(),4,5