原理
在程序開發時,開發人員沒有對可以進行數據庫交互的地方進行嚴格過濾。導致用戶在提交數據時,可以將構造的惡意sql語句提交到數據庫進行執行。
個人總結:sql注入就是惡意sql語句在數據庫被執行
攻擊方式(分類、步驟、工具)
分類:
基於位置點
get
post
http頭部字段(user-agent、cookie、referer、IP)
基於方法
布爾
union
數值
時間
報錯
寬字節
堆疊
二次注入
攻擊步驟:
1.注入點判斷(是否存在注入)
2.判斷數據庫
3.決定注入方法(用什麼注入,看實際情況)
4.爆庫、表、段
工具
sqlmap
技巧
在數據庫已經判斷出來後,準備爆庫之前,可以直接先看是否可以直接寫一句話馬到數據庫
常見繞過方式
1.繞過空格(註釋符/* */,%a0)
2.括號繞過空格:
如果空格被過濾,括號沒有被過濾,可以用括號繞過。
在MySQL中,括號是用來包圍子查詢的。因此,任何可以計算出結果的語句,都可以用括號包圍起來。而括號的兩端,可以沒有多餘的空格。
select(user())from dual where(1=1)and(2=2)
3.引號繞過(使用十六進制)
4.逗號繞過(使用from或者offset)
5.比較符號(<>)繞過(過濾了<>:sqlmap盲注經常使用<>,使用between的腳本)
6.繞過註釋符號(#,--(後面跟一個空格))過濾
7.繞過union,select,where等
8.通用繞過(編碼)
9.等價函數繞過
getshell(方法)
1.如果是root權限,知道絕對路徑的情況下,嘗試直接寫一句話馬
2.爆出後臺管理員即密碼,登錄後臺,找上傳點
提權原理、工具
MOF提權原理
MOF文件既然每五秒就會執行,而且是系統權限,我們通過mysql將文件寫入一 個MOF文件替換掉原有的MOF文件,然後系統每隔五秒就會執行一次我們上傳的 MOF。MOF當中有一段是vbs腳本,我們可以通過控制這段vbs腳本的內容讓系統 執行命令,進行提權。
利用條件
Windows<=2003
mysql在c:windows/system32/mof目錄有寫權限
已知數據庫賬號密碼
UDF
user defined funcion,即用戶自定義函數。用戶可以通過自己增加函數對 mysql功能進行擴充,文件後綴爲.dll。
UDF提權原理
通過添加用戶自定義函數導出dll,然後在mysql中使用用戶自定義函數以高權限 賬號執行命令,添加賬號進行提權。
利用條件
windows2003、windowsXP、windows7
擁有mysql的insert和delete權限
防護方式
1、使用安全的API
2、對輸入的特殊字符進行Escape轉義處理
3、使用白名單來規範化輸入驗證方法
4、對客戶端輸入進行控制,不允許輸入SQL注入相關的 特殊字符
5、服務器端在提交數據庫進行SQL查詢之前,對特殊字符進行過濾、刪除。
6、參數化查詢(最有效)