實戰|一次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’]賦值。經過不懈努力找到了一個正確文件。

這個文件大概意思就是當我運行改文件時會將$_SESSION[‘right_enter’]=1,然后跳轉到登陸界面。