三步法搞定CTF中的SQL注入题型
三步法:
一、找到注入點(diǎn)
二、Fuzz出未過(guò)濾字符
三、構(gòu)造payload/寫(xiě)腳本
?
?
例題1
打開(kāi)題目:
?
?
第一步,尋找注入點(diǎn)。
輸入用戶名123456,密碼123456,返回結(jié)果username error!
輸入用戶名admin,密碼123456,返回結(jié)果password error!
輸入用戶名admin,密碼admin,返回結(jié)果password error!
(根據(jù)提示已知這是道注入題,所以可判斷注入點(diǎn)在用戶名)
?
第二步,fuzz出未過(guò)濾字符。
fuzz后,發(fā)現(xiàn)%返回結(jié)果不同
?
?看到sprintf函數(shù),我們能想到php的字符串格式化逃逸漏洞,這個(gè)漏洞導(dǎo)致的結(jié)果是會(huì)將%1$/’變?yōu)?/span>’。
此時(shí)我們?cè)賴Ladmin%1$\’?and 1=1%23,結(jié)果返回了username error!
?
根據(jù)之前測(cè)試,and 1=1返回password error!才表示成功。猜測(cè)應(yīng)該是過(guò)濾了and,我們?cè)賴L試一下admin%1$\’?or?1=1%23(這里可以再fuzz一次),執(zhí)行成功了。
?
?
第三步,構(gòu)造payload/寫(xiě)腳本。
本題未過(guò)濾其他字符,剩下的就是盲注了,腳本大家根據(jù)題目自行編寫(xiě),最終拿到flag。
?
?
例題2
打開(kāi)題目:
?
?
第一步,找到注入點(diǎn)。
在搜索框輸入1,返回you are in...
?
在搜索框輸入2,返回you are not in...
?
由此判斷是盲注,注入點(diǎn)是id=1處。
?
第二步,fuzz出未過(guò)濾字符。
?
這些是被過(guò)濾掉的(空格也被過(guò)濾了),or沒(méi)有被過(guò)濾,我們嘗試輸入1'/**/or/**/'1'='1
?
明明沒(méi)有過(guò)濾掉or,應(yīng)該是后端給過(guò)濾了,嘗試雙寫(xiě)繞過(guò):1'/**/oorr/**/'1'='1,還是you are not in...,再用%0a代替/**/(即空格)
?
雖然沒(méi)顯示you are in,但是應(yīng)該是注入成功了。
?
第三步,構(gòu)造payload/寫(xiě)腳本。
剩下的就是盲注了,大家根據(jù)題目自行編寫(xiě)就好了,最終拿到flag。
?
?
總結(jié):
此類(lèi)題目的難與易主要在于尋找注入點(diǎn),對(duì)于難一點(diǎn)的題目,出題人會(huì)把注入點(diǎn)藏得很隱蔽,需要大家不斷地嘗試,細(xì)心地去尋找。
轉(zhuǎn)載于:https://www.cnblogs.com/paperpen/p/10648240.html
總結(jié)
以上是生活随笔為你收集整理的三步法搞定CTF中的SQL注入题型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IE-OLD IE 提示
- 下一篇: struct和typedef struc