一次SQL注入到代碼審計之路
摘要:使用PHPCMS系統通用後臺地址admin.php,m=admin&c=index&a=login,都不行,測了好就發admin模型下的index控制器是存在,當我們訪問的時候就會自動跳到首頁,這也該是開發者後來做了修改,專門做防黑的。那我們使用1′測試一下,發現不彈未查詢到相關信息的提示框,也沒有任何數據輸出,大致判斷這個點存在sql注入,並且不對輸出報錯信息。
*本文中涉及到的相關漏洞已報送廠商並得到修復,本文僅限技術研究與討論,嚴禁用於非法用途,否則產生的一切後果自行承擔。 本文中出現的所有敏感信息已做打碼處理
一、找網站SQL注入點
在測試時後發現有一個信息查詢框,就是下面這個圖片顯示的。一般信息查詢框會和數據庫存在交互。
我輸入數字1,會正常提示木查詢到相關信息。
那我們使用1′測試一下,發現不彈未查詢到相關信息的提示框,也沒有任何數據輸出,大致判斷這個點存在sql注入,並且不對輸出報錯信息。
大概猜測出SQL語句爲 :
select * from A where id ='$_POST['id']';
沒有對用戶輸入的數據做任何過濾。
構造一個閉合語句再次確認一些是否確認存在sql注入。
payload:1′ #
通過上面簡單測試,已經確定了,肯定存在sql注入。
二、sqlmap跑一下
將數據包保存到一個文件,直接用sqlmap跑。非常震驚,居然有51個庫。
經過查詢,查到後臺的賬號密碼,那我就開始找後臺的艱辛路程了。
三、找後臺
沒有找到後臺,但是發現robots文件。
從robots上看到是PHPCMS系統
使用PHPCMS系統通用後臺地址admin.php,m=admin&c=index&a=login,都不行,測了好就發admin模型下的index控制器是存在,當我們訪問的時候就會自動跳到首頁,這也該是開發者後來做了修改,專門做防黑的。
四、找通用漏洞
這個步驟就不多說了,我測了已暴光的漏洞,都是不行,說明開發者還是有安全意識的,把漏洞都給修復了。
五、返回sqlmap
還有一種思路就是使用sqlmap –os-shell直接獲取shell,但是這個基本上不行的,因爲網站的文件基本上都是755權限,沒有寫的權限就會失敗。那我還是抱着一絲絲希望去測試了。
使用sqlmap –os-shell需要知道網站的絕對路徑,網站絕對路徑可以通過中間件配置文件查看。
首先需要知道網站用了什麼中間件,我沒有用nmap跑,只用404看到是nginx ,nginx的配置文件 /usr/local/nginx/conf/ngixn.conf
用sqlmap –file-read 去讀nginx配置文件。通過配置文件只看到一條默認的配置信息
需要注意的是如果在nginx.conf文件沒有看到有價值的信息,有一種可能是存在,/usr/local/nginx/conf/vhost/網站域名.conf 這個位置,果不其然就是它。
找到了真實的路徑,就可以使用 sqlmap –os-shell了,但是正式我當時預料的沒有寫入權限導致拿shell失敗。
六、使用sqlmap讀取網站源碼
通過上面的思路我們已經知道網站的真實路徑,知道了是PHPCMS系統,那我們可以讀取網站的文件了。
1、讀取路由文件 caches\configs\route.php 查看路由文件沒有問題。
2、查看系統文件 caches\configs\system.php (這個文件能看是否開啓了域名訪問後臺)
3、在上面我們說到admin模型下index控制器是能訪問,知識在訪問的時候會跳轉到主頁,那我們下載index控制器文件看下。 phpcms\modules\admin\index.php ,查看index控制器下的login方法是沒有做任何修改的。
七、側面滲透測試
上面說了一共有51個網站,我隨機看了幾個,數據庫的結構是一樣的,說明是同一個建站系統。
那我們用nmap掃一下服務發現有8080服務,這個網站8080端口的網站時dedecms系統搭建的,我正好有後臺密碼,這樣能通過dedecms上傳文件。
八、代碼審計
通過上面們大概判斷是admin模塊index控制器有問題。
查看admin模塊多了一個MY_index.php控制器,
查看MY_index.php 發現裏面有一個構造函數,這個函數大概意思就是會打開這個方法會判斷你的right_enter的session值是否爲空,若果爲空,那麼就回到首頁,這這是我們剛開始一直打不開後臺的原因。
經過看phpcms開發手冊(我對這看系統二次開發不太熟悉,我只知道是一個MVC結構的php程序),如果需要對控制器進行二次開發需要在同級目錄創建一個MY_*.php文件,大概意思就是創建這個文件後程序在運行index模塊時會運行MY_index.php裏面的代碼。
到這了明白了,因爲沒有$_SESSION['right_enter']值,所以導致登陸不了,所以打開後臺首先需要給$_SESSION['right_enter']賦值。經過不懈努力找到了一個正確文件。