sqlmap執行mysql命令 sqlmap的使用

2021-10-21 08:13:37 字數 3734 閱讀 5427

摘要:使用sqlmap注入本地搭建的sqli-labs過程記錄

學習sql 注入,一直在手注,關於工具的使用的學習一直拖,根據《web安全攻防:滲透測試實戰指南》書中教學,記錄一遍使用sqlmap跑本地環境下的sqli-labs的過程。

sqlmap基礎

判斷是否存在注入點

1.根據url是否存在注入點

payload:sqlmap.py -u 當注入點引數大於等於兩個時,需要加雙引號

image

截圖的時候不小心,把上面的的payload和sqlmap的logo截掉了,中的英語並不難理解,第乙個詢問我們經過測試目標注入點的後台的資料庫引擎彷彿是mysql,詢問是否跳過對其他資料庫管理引擎的測試;第二個問句詢問在以後的測試中是否一律測試針對mysql的等級為1的測試,選擇

(yes)即可。

image

這張圖就較為完整地展示了該後台的資訊,並且我們知道,這裡存在注入。

2.根據文字檔案中的請求判斷是否存在注入點

payload:sqlmap.py -r

一般當傳遞引數的方式為post時,我們抓包將請求儲存為文字檔案,使用上述的方法進行post型別的注入;在get方法中,也是有效的。

查詢當前使用者下的所有資料庫

sqlmap.py -u --dbs

獲取資料庫中的表名

sqlmap.py -u -d --tables

獲取表中的欄位名

sqlmap.py -u -d -t --columns

獲取字段內容

sqlmap.py -u -d -t -c --dump

獲取資料庫的所有使用者

sqlmap.py -u --users

獲取資料庫使用者的密碼

sqlmap.py -u --passwords

獲取當前**資料庫的名稱

sqlmap.py -u --current-db

獲取當前**資料庫的使用者名稱

sqlmap.py -u --current-user

sqlmap高階

--level 指定探測等級

sqlmap的探測共分為5(1~5)級,使用--level引數指定探測等級,不指定則預設使用等級為1的探測等級,其中5級最高,包含的payload最多,也最耗費時間。sqlmap的payload儲存在sqlmap\xml\payloads資料夾下,可以看到分門別類的payload以xml文件形式儲存。因此我們也可以新增自己的payload。

--is-dba 當前使用者是否為管理許可權

sqlmap.py -u --is-dba

--roles 列出資料庫管理員角色

用於檢視資料庫使用者的角色,如果當前使用者有許可權讀取包含所有使用者的表,該命令會列舉出每個使用者的角色,也可以使用-u引數指定想看哪個使用者的角色。該命令僅適用於當前資料庫是oracle時。

--referer http referer頭

sqlmap可以再請求中偽造http中的referer,當level引數設定為3以上時,會嘗試對referer進行注入。可以使用referer命令來欺騙,如--referer

--sql-shell 執行自定義sql語句

該命令用於執行指定的sql語句,如下,假設執行select * from users where id=1

sqlmap.py -u --sql-shell

image

--os-cmd,--os-shell 執行任意作業系統命令

當資料庫為mysql、postgresql或sqlserver且當前使用者具有許可權使用特定函式時該指令生效,但實現的原理有所不同。

資料庫為mysql和postgresql時,sqlmap商戶餐乙個二進位制庫,包含使用者自定義的函式sys_exec()和sys_eval()這兩個函式可以執行系統命令。在microsoft sql server中,sqlmap使用xp_cmdshell儲存過程,如果被禁用(2005及以上版本預設禁用),sqlmap會重新啟用它,如果不存在則會被建立。

--os-shell 引數可以模擬乙個真實的shell,當不能執行多語句時,仍可以使用into outfile寫進可寫目錄,建立乙個web後門。--os-shell支援asp、asp.net、jsp和php四種語言。(要執行改引數,需要有資料庫管理員許可權,--is-dba為true)

--file-read 從資料庫伺服器中讀取檔案

適用於mysql、postgresql或microsoft sql server且當前使用者有許可權執行特定的函式時。讀取的檔案可以是文字可以是二進位制檔案。

sqlmap.py -u --file-read "路徑" -v 1

--file-write --file-dest 上傳檔案到資料庫伺服器中

資料庫:mysql、postgresql、microsoft sql server

sqlmap的自帶繞過waf指令碼

預設情況下,出了使用char()函式防止出現單引號,沒有對注入的資料進行修改,所以我們在遇到就像寬位元組注入或者是需要變換大小寫來繞過的waf時,sqlmap不太管用,為了解決這個問題,sqlmap自帶了解決此困境的繞過指令碼,使用--tamper引數來使用這些載荷來繞過waf的檢測。

sqlmap.py ***xx --tamper "模組名"

常用的tamper指令碼:

apostrophemask.py

作用:將引號替換為utf-8,用於過濾單引號

base64encode.py

作用:替換為base64編碼

multiplespaces.py

作用:圍繞sql關鍵字新增多個空格

space2plus.py

作用:用+替換空格,空格被過濾時使用

nonrecursivereplacement.py

作用:作為雙重查詢語句,用雙重語句替換預定義的sql關鍵字(適用於非常弱的自定義過濾器,例如將select替換為空,也就是當我們在手注需要使用雙寫繞過的情況下可以改用sqlmap使用此模組)

space2randomblank.py

作用:將空格替換為其他有效字元

unionalltounion.py

作用:將union all select替換為union select

securesphere.py

作用:追加特製的字串

spae2hash.py

作用:將空格替換為#,並新增乙個隨機字串和換行符

space2mssqlblank.py (mssql)

作用:將空格替換為其他空符號

space2mssqlhash.py

作用:將空格替換為#,並新增乙個換行符

between.py

作用:用not between 0 and替換大於號(>),用between and 替換等號(=)

percentage.py

作用:asp允許在每個字元前面新增乙個%號

sp_password.py

作用:從dbms日誌的自動模糊處理的有效載荷中追加sp_password

charecode.py

作用:對給定的payload全部字元使用url編碼(不處理已經編碼的字元)

randomcase.py

作用:隨機大小寫

charuniocodeencode.py

作用:字串unicode編碼

space2comment.py

作用:將空格替換為/**/

equaltolike.py

作用:將等號替換為like

geatest.py

作用:繞過對「>」的過濾,用greatest替換大於號

sqlmap之 os shell命令執行原理

最近也是在看sqlmap,感覺 os shell這個命令確實很厲害,但我並不知道它的原理,所以來研究一下 環境就是我本地搭的乙個有sql注入漏洞的乙個小demo 這是我們的demo環境 用sqlmap跑一下 發現確實有注入 試試 os shell命令 python2 sqlmap.py r 11.9...

SQLMap引數命令

sqlmap引數命令 method 指定使用的http方法 data 提交post資料並對post資料進行測試 param del 分隔符 指定引數的分隔符 cookie 新增cookie http請求頭 headers 新增http請求頭,不同的頭使用 n 分隔 auth type和 auth c...

Sqlmap常見命令

藉著複習mysql的機會再重新複習一下sqlmap,因為引數太多了,我只記錄一下自己常用的命令,如果想看詳細大全,可以看一下大佬們的完整版 文章參考 h,help 顯示基本幫助資訊並退出 hh 顯示高階幫助資訊並退出 version 顯示程式版本資訊並退出 在這些選項中必須提供至少有乙個確定目標 u...