這幾天cg-ctf分?jǐn)?shù)終于突破了800分大關(guān)拖刃,那么來(lái)適當(dāng)?shù)恼硐滤悸放c知識(shí)吧薯演。
SQL注入1
先看題目跟源碼
? 分析下源碼贸诚,大致可以知道要求user為admin耻姥,對(duì)密碼沒(méi)有要求销钝,因此繞過(guò)密碼將其注釋掉是肯定的了。但同時(shí)琐簇,發(fā)現(xiàn)$user跟$pass兩個(gè)變量經(jīng)過(guò)trim()函數(shù)處理蒸健,這個(gè)函數(shù)的作用是移除字符串兩側(cè)的空白字符或其他預(yù)定義字符。因此雙引號(hào)里面的都被解析婉商,可以不用閉合似忧。
直接注入就好了,
得到flag
SQL Injection
查看源代碼如下:
出現(xiàn)在源碼中的clean()函數(shù)是我們調(diào)整注入語(yǔ)句的關(guān)鍵 ,而其中的? htmlentities()函數(shù)在很多安全書(shū)籍中有關(guān)注入的章節(jié)都有所出現(xiàn)蘑秽。其功能視第二個(gè)參數(shù)而定饺著,可以過(guò)濾掉單引號(hào),雙引號(hào)肠牲,或者兼而有之幼衰。因此,sql語(yǔ)句的閉合就成了問(wèn)題缀雳,即我們不能用常規(guī)的單引號(hào)' 來(lái)進(jìn)行閉合渡嚣。
這時(shí)tip就派上用場(chǎng)了,因?yàn)?‘\’反斜杠可以用來(lái)轉(zhuǎn)義俏险,所以注入時(shí)考慮使用反斜杠進(jìn)行轉(zhuǎn)義严拒。
首先看sql語(yǔ)句
$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
首先反斜杠碰上單引號(hào)直接吞掉
所以語(yǔ)句實(shí)際為:
SELECT * FROM users WHERE name='.$username.' AND pass='.$password.';
我們要傳的兩個(gè)參數(shù)就在其中,考慮到閉合問(wèn)題竖独,先用反斜杠使$username無(wú)效化,就是說(shuō):
SELECT * FROM users WHERE name=' AND pass='.$password'
所以這里針對(duì)password的值也好說(shuō)了裤唠,直接使sql語(yǔ)句中 or 1=1#就好;?
所以構(gòu)造出來(lái)的結(jié)果是:username=\&password=or%201%3d1%23
得到flag莹痢。
#這種注入技巧很不錯(cuò)种蘸,可以多理解一下其語(yǔ)句結(jié)構(gòu)
密碼重置
要求是:重置管理員賬號(hào):admin 的密碼
首先記得先點(diǎn)下重置,竞膳,航瞭,(我其他步驟都是對(duì)的結(jié)果在這一步上出了問(wèn)題。坦辟。刊侯。)
看到url中user1=Y3RmdXNlcg==,很容易想到是base64編碼锉走,轉(zhuǎn)過(guò)來(lái)后發(fā)現(xiàn)是ctfuser
基于頁(yè)面里的用戶框不能更改滨彻,我們先把重置的url定下來(lái)藕届,即user1='admin的base64編碼'
即??http://nctf.nuptzj.cn/web13/index.php?user1=YWRtaW4=
然后看了下源碼,確認(rèn)了三個(gè)框的名字分別為 user, newpass, vcode
用fiddler傳post請(qǐng)求:
flag也就出來(lái)了亭饵。