從實踐中學習sqlmap數據庫注入測試
內容描述
隨著IT的發展,Web技術從傳統的網站領域延伸到了手機App領域。
而大部分網站都是採用數據庫來存儲數據,這使得SQL注入技術成為Web安全防護的重點。
為了保證網站的安全,開發人員和安全人員需要對網站上成百上千個網頁逐一進行檢查,
以驗證其對各種SQL注入攻擊的防護效果,但這會帶來龐大的工作量。
sqlmap是一款開源的SQL注入自動化測試工具,它不僅可以大幅度減少檢測時間,
而且還可以驗證漏洞存在的危害性,在Web安防領域有著廣泛的應用。
本書結合大量示例,詳細介紹了sqlmap注入測試的相關知識。
本書共14章,分為3篇。
第1篇“測試準備”,主要介紹sqlmap環境配置、指定目標、連接目標、探測注入點及數據庫類型等相關內容;
第2篇“信息獲取”,主要介紹如何基於sqlmap獲取4種主流數據庫信息
(MySQL、MSSQL、Access和Oracle),以及如何手工獲取數據庫信息;
第3篇“高級技術”,主要介紹sqlmap所使用的注入技術、
訪問後台數據庫管理系統、優化注入、保存和輸出數據、規避防火牆等相關內容。
本書適合滲透測試人員、網絡維護人員、網站開發人員和信息安全愛好者閱讀。
通過本書的學習,可以幫助讀者了解和掌握SQL注入的測試方式和注入技術,以及危害性評估等相關知識。
目錄大綱
前言
第1篇 測試準備
第1章 sqlmap環境配置 2
1.1 sqlmap基礎知識 2
1.1.1 sqlmap簡介 2
1.1.2 sqlmap注入流程 2
1.2 安裝sqlmap 3
1.2.1 下載sqlmap安裝包 3
1.2.2 在Windows中安裝sqlmap 4
1.2.3 在Linux中安裝sqlmap 6
1.3 啟動sqlmap 7
1.3.1 標準模式 8
1.3.2 交互模式 8
1.3.3 嚮導模式 10
1.3.4 快速模式 10
1.4 sqlmap使用技巧 10
1.4.1 查看幫助信息 11
1.4.2 查看版本信息 13
1.4.3 使用短記憶法 13
1.4.4 更新sqlmap 14
1.4.5 使用INI配置文件 15
1.4.6 設置冗餘級別 16
1.4.7 檢查依賴 17
第2章 指定目標 20
2.1 單個目標 20
2.1.1 URL地址格式 20
2.1.2 指定目標URL 21
2.2 批量測試 23
2.2.1 指定多個目標 23
2.2.2 發出警報 25
2.2.3 檢測到注入漏洞時報警 26
2.3 日誌文件 27
2.3.1 捕獲日誌文件 27
2.3.2 指定日誌文件 35
2.3.3 過濾日誌文件中的目標 36
2.4 HTTP請求文件 37
2.4.1 使用BurpSuite抓包 37
2.4.2 指定HTTP請求文件 39
2.5 從谷歌搜索引擎中獲取目標 40
2.5.1 谷歌基礎語法 40
2.5.2 指定搜索目標 42
2.5.3 指定測試頁面 44
2.6 爬取網站 45
2.6.1 指定爬取深度 45
2.6.2 排除爬取頁面 46
2.6.3 設置臨時文件目錄 46
第3章 連接目標 48
3.1 設置認證信息 48
3.1.1 指定認證類型 48
3.1.2 指定認證憑證 49
3.1.3 指定私鑰文件 49
3.2 代理網絡 50
3.2.1 使用已有的代理服務器 50
3.2.2 使用新的代理服務器 51
3.2.3 指定代理服務器 52
3.2.4 指定代理憑證 58
3.2.5 指定代理列表 59
3.2.6 忽略系統級代理 60
3.3 Tor匿名網絡 60
3.3.1 搭建Tor匿名網絡 60
3.3.2 使用Tor匿名網絡 61
3.3.3 檢查Tor匿名網絡 62
3.3.4 設置Tor代理端口 62
3.3.5 設置Tor代理類型 63
3.4 處理連接錯誤 63
3.4.1 忽略HTTP錯誤狀態碼 63
3.4.2 忽略重定向 65
3.4.3 忽略連接超時 65
3.5 檢測WAF/IPS 66
3.6 調整連接選項 68
第4章 探測注入漏洞及數據庫類型 69
4.1 探測GET參數 69
4.1.1 GET參數簡介 69
4.1.2 使用sqlmap探測 71
4.1.3 手動探測 73
4.2 探測POST參數 76
4.2.1 POST參數簡介 76
4.2.2 指定POST參數 77
4.2.3 自動搜索POST參數 78
4.2.4 從HTTP請求文件中讀取POST參數 81
4.2.5 手動判斷 82
4.3 探測Cookie參數 85
4.3.1 Cookie參數簡介 85
4.3.2 指定Cookie參數 85
4.3.3 指定包括Cookie的文件 88
4.3.4 忽略Set-Cookie值 89
4.3.5 加載動態Cookie文件 90
4.3.6 手動判斷 90
4.4 探測UA參數 92
4.4.1 UA參數簡介 92
4.4.2 指定UA參數 94
4.4.3 使用隨機UA參數 96
4.4.4 使用手機UA 97
4.4.5 手動判斷 99
4.5 探測Referer參數 101
4.5.1 Referer參數簡介 101
4.5.2 指定Referer參數 101
4.5.3 手動判斷 103
4.6 添加額外的HTTP頭 105
4.6.1 指定單個額外的HTTP頭 105
4.6.2 指定多個額外的HTTP頭 106
4.7 指定測試參數 106
4.7.1 指定可測試的參數 106
4.7.2 跳過指定的參數 108
4.7.3 跳過測試靜態參數 109
4.7.4 使用正則表達式排除參數 109
4.7.5 指定測試參數的位置 109
第2篇 信息獲取
第5章 獲取MySQL數據庫信息 112
5.1 MySQL數據庫簡介 112
5.2 獲取數據庫標識 112
5.3 獲取服務器主機名 113
5.4 獲取數據庫的用戶名 115
5.4.1 獲取當前連接數據庫的用戶名 115
5.4.2 獲取數據庫的所有用戶名 116
5.5 獲取數據庫用戶的密碼 117
5.5.1 獲取用戶密碼的哈希值 118
5.5.2 在線破解哈希值 119
5.5.3 使用其他工具破解哈希值 121
5.6 獲取數據庫的名稱 123
5.6.1 獲取當前數據庫的名稱 123
5.6.2 獲取所有數據庫的名稱 124
5.7 獲取數據表 126
5.7.1 獲取所有的數據表 126
5.7.2 獲取指定數據庫中的數據表 128
5.8 獲取數據庫架構 129
5.8.1 獲取所有數據庫的架構 129
5.8.2 獲取指定數據庫的架構 130
5.8.3 排除系統數據庫 132
5.9 獲取數據表中的列 133
5.9.1 獲取所有的列 133
5.9.2 獲取指定數據表的列 135
5.10 獲取數據表中的內容 136
5.10.1 獲取數據表中的全部內容 136
5.10.2 獲取指定的數據表中的內容 138
5.10.3 獲取所有的數據表中的內容 140
5.10.4 過濾數據表中的內容 141
5.10.5 獲取指定列的數據 144
5.10.6 排除指定列的數據 145
5.10.7 獲取註釋信息 146
5.10.8 指定導出的數據格式 147
5.11 獲取數據表的條目數 149
5.11.1 獲取所有數據表的條目數 149
5.11.2 獲取指定數據表的條目數 151
5.12 獲取數據庫的所有信息 152
5.13 搜索數據庫信息 152
第6章 獲取MSSQL數據庫信息 158
6.1 獲取數據庫標識 158
6.2 檢測是否為DBA用戶 159
6.3 獲取數據庫的名稱 161
6.3.1 獲取當前數據庫的名稱 161
6.3.2 獲取所有數據庫的名稱 162
6.4 獲取數據表的名稱 163
6.4.1 獲取所有數據表的名稱 164
6.4.2 獲取指定數據庫中的數據表的名稱 165
6.5 獲取數據庫架構 167
6.5.1 獲取所有數據庫的架構 167
6.5.2 獲取指定數據庫的架構 169
6.5.3 排除系統數據庫 171
6.6 獲取數據表中的列 172
6.6.1 獲取所有數據表中的列 172
6.6.2 獲取指定數據表中的列 174
6.7 獲取數據表中的內容 175
6.7.1 獲取指定數據表中的內容 175
6.7.2 獲取所有數據表中的內容 178
6.7.3 獲取指定列的內容 178
6.7.4 排除指定列的內容 179
6.7.5 獲取特定內容 179
6.7.6 獲取數據表的條目數 181
6.8 獲取數據庫用戶的權限 183
6.9 獲取數據庫用戶和密碼 184
6.9.1 獲取數據庫用戶 184
6.9.2 獲取用戶密碼 185
6.9.3 使用hashcat破解MSSQL密碼的哈希值 187
第7章 獲取Access數據庫信息 189
7.1 Access數據庫簡介 189
7.2 指紋識別 189
7.3 暴力破解數據表名 190
7.3.1 數據表的字典列表 191
7.3.2 手動暴力破解表名 193
7.4 暴力破解數據表中的列 194
7.4.1 數據表中的列字典 194
7.4.2 手動暴力破解列名 196
7.5 導出數據表中的列 198
7.5.1 暴力破解列內容 198
7.5.2 手動暴力破解 200
第8章 獲取Oracle數據庫信息 206
8.1 指紋信息 206
8.2 獲取數據庫服務的主機名 207
8.3 獲取數據庫的用戶 208
8.3.1 獲取當前數據庫的用戶 209
8.3.2 獲取所有數據庫的用戶 210
8.4 獲取數據庫用戶的密碼 211
8.5 獲取數據庫用戶的角色 213
8.6 獲取數據庫用戶的權限 215
8.6.1 判斷是否為DBA權限 215
8.6.2 獲取用戶權限 216
8.7 獲取數據庫的名稱 217
8.7.1 獲取當前連接的數據庫的名稱 218
8.7.2 獲取所有的數據庫的名稱 219
8.8 獲取數據表 221
8.8.1 獲取所有的數據表 221
8.8.2 獲取指定數據庫中的數據表 223
8.9 獲取數據表結構 224
8.10 獲取數據表信息 226
8.10.1 獲取數據表列 226
8.10.2 獲取數據表內容 228
8.10.3 獲取指定列的數據 230
8.10.4 排除指定列的數據 231
8.10.5 獲取數據表的條目數 232
第9章 使用SQL語句獲取數據庫信息 234
9.1 SQL語句 234
9.1.1 操作數據庫語句 234
9.1.2 操作數據表語句 235
9.2 數據庫變量與內置函數 235
9.2.1 全局變量 236
9.2.2 內置函數 237
9.3 執行SQL語句的方式 238
9.3.1 直接執行SQL語句 238
9.3.2 交互式SQL Shell模式 239
9.3.3 使用SQL文件 241
9.4 獲取數據庫信息 242
9.4.1 獲取數據庫版本 243
9.4.2 查詢用戶 243
9.4.3 查詢當前操作系統 243
9.4.4 查詢數據庫的安裝目錄 243
9.4.5 查看當前數據庫 244
9.4.6 查看數據表中的內容 244
9.4.7 查看系統文件 245
第3篇 高級技術
第10章 注入技術 248
10.1 基於布爾的盲注 248
10.1.1 判斷及指定注入類型 248
10.1.2 設置匹配的字符串 251
10.1.3 設置不匹配的字符串 251
10.1.4 設置匹配的正則表達式 251
10.1.5 設置匹配的狀態碼 252
10.2 基於錯誤的注入 252
10.2.1 判斷並指定注入類型 252
10.2.2 比較網頁內容 255
10.2.3 比較網頁標題 255
10.3 基於時間的盲注 256
10.3.1 判斷並指定注入類型 256
10.3.2 設置數據庫響應延時 259
10.4 聯合查詢注入 259
10.4.1 判斷並指定注入類型 260
10.4.2 設置UNION列數 263
10.4.3 設置UNION字符 264
10.4.4 設置UNION查詢表 266
10.5 堆疊注入 267
10.5.1 堆疊注入的局限性 267
10.5.2 實施堆疊注入 268
10.6 DNS注入 270
10.6.1 DNS注入原理 270
10.6.2 DNS注入要求 271
10.6.3 實施DNS注入 272
10.7 二級SQL注入 282
10.7.1 二級SQL注入原理 282
10.7.2 設置二級響應URL地址 283
10.7.3 加載二級SQL注入請求文件 284
10.8 自定義注入 284
10.8.1 設置問題答案 284
10.8.2 使參數值無效 286
10.8.3 自定義Payload 287
10.8.4 自定義函數注入 289
10.8.5 設置風險參數 289
第11章 訪問後台數據庫管理系統 290
11.1 連接數據庫 290
11.1.1 直接連接數據庫 290
11.1.2 指定數據庫 291
11.2 執行操作系統命令 293
11.2.1 直接執行操作系統命令 293
11.2.2 獲取交互式Shell 295
11.2.3 指定操作系統類型 297
11.2.4 指定Web服務器的根目錄 299
11.3 訪問文件系統 300
11.3.1 讀取文件 300
11.3.2 寫入文件 302
11.3.3 暴力枚舉文件 304
11.4 訪問Windows註冊表 305
11.4.1 添加註冊表項 306
11.4.2 讀取註冊表項 307
11.4.3 刪除註冊表項 309
11.4.4 輔助選項 310
11.5 建立帶外TCP連接 311
11.5.1 創建遠程會話 312
11.5.2 利用遠程代碼執行漏洞MS08-068 315
11.5.3 利用存儲過程堆溢出漏洞MS09-004 318
11.5.4 提升權限 321
第12章 使用sqlmap優化注入 325
12.1 跳過低成功率的啟發式測試 325
12.2 優化sqlmap性能 326
12.2.1 使用HTTP/HTTPS持久連接 326
12.2.2 HTTP NULL連接 326
12.2.3 設置HTTP請求線程 327
12.2.4 預測普通查詢輸出 327
12.2.5 啟動所有優化 329
12.3 設置超時 330
12.3.1 設置請求失敗的時間間隔 330
12.3.2 設置超時時間 330
12.3.3 嘗試次數 330
12.4 處理請求和響應 331
12.4.1 預處理請求 331
12.4.2 後處理響應 331
第13章 保存和輸出數據 332
13.1 保存HTTP數據包信息 332
13.1.1 保存為文本文件 332
13.1.2 保存為HAR文件 333
13.2 處理輸出數據 334
13.2.1 使用HEX函數返回輸出數據 334
13.2.2 獲取二進制數據 335
13.2.3 聲明包含Base64編碼數據的參數 336
13.2.4 自定義SQL注入字符集 338
13.2.5 強制編碼輸出的數據 338
13.2.6 禁止彩色輸出 338
13.2.7 不對未知字符進行編碼 339
13.2.8 顯示估計的完成時間 339
13.2.9 顯示數據庫錯誤信息 340
13.3 指定輸出位置 341
13.3.1 指定多目標模式下CSV結果文件的保存位置 341
13.3.2 指定輸出目錄 344
13.3.3 指定臨時文件的存儲位置 345
13.4 會話管理 346
13.4.1 加載會話 346
13.4.2 清空會話 347
13.4.3 離線模式 348
13.4.4 清理痕跡 349
第14章 規避防火牆 350
14.1 設置安全模式 350
14.1.1 使用安全網址 350
14.1.2 從文件加載安全的HTTP請求 351
14.1.3 指定POST方式攜帶的數據 351
14.2 繞過CSRF防護 352
14.2.1 指定控制Token的參數 352
14.2.2 指定獲取Token的網址 353
14.2.3 指定訪問反CSRF令牌頁的請求方法 353
14.2.4 設置反CSRF令牌重試次數 354
14.3 其他繞過防護系統的方式 354
14.3.1 使用HTTP污染技術 354
14.3.2 使用chunked傳輸編碼方式 355
14.3.3 根據Python代碼修改請求 356
14.3.4 關閉URL編碼 356
14.4 使用腳本繞過防火牆 356
14.4.1 查看支持的腳本 357
14.4.2 使用Tamper腳本 361