1.web2
F12直接找到

2.計(jì)算器
準(zhǔn)備輸入答案時(shí)發(fā)現(xiàn)只能輸入一位,檢查源碼

將maxlength的值修改一下再輸入就好了

3.web基礎(chǔ)$_GET
用get方法傳入what的值

4.web基礎(chǔ)$_POST
和第三道很像,使用post方法傳遞值。不過(guò)沒(méi)有輸入框,我是用的火狐瀏覽器中的hackbar插件直接輸入

5.矛盾
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
輸入的num既不能是數(shù)字,還要等于1。變量num是直接接入條件的,故可以構(gòu)建多條件,來(lái)成立判斷。
payload:?num=1=

6.web3
進(jìn)去之后發(fā)現(xiàn)一直在彈窗,查看源碼時(shí)發(fā)現(xiàn)

復(fù)制下來(lái)用unicode解碼得到flag

7.域名解析
剛開(kāi)始看到這句話的時(shí)候一直修改flag.baidu.com但是發(fā)現(xiàn)一直不對(duì),然后突然想到,如果反過(guò)來(lái)呢?

首先輸入123.206.87.240,然后burpsuite抓包,將host修改成flag.baidu.com得到flag

8.你必須讓他停下
這一道題好皮,一直在跳轉(zhuǎn),源碼都沒(méi)辦法看,但是幸好有開(kāi)著F12的習(xí)慣,看看我發(fā)現(xiàn)了什么?

一閃而過(guò)的頁(yè)面中有著flag,我用截圖把每個(gè)頁(yè)面都截了之后找到的,最好用burp一個(gè)一個(gè)抓包(;′д`)
本地包含
這個(gè)題打開(kāi)之后服務(wù)器出錯(cuò),修好之前應(yīng)該是不能寫(xiě)了,就不算這一題了。
9.變量1

代碼審計(jì),看最后一行代碼:
eval("var_dump($$args);");
有了兩個(gè)$$的可變變量,所以payload:?args=GLOBALS? ,最后會(huì)解析全局變量GLOBALS將數(shù)值全部爆了出來(lái)

10.web5
可以從源碼的head中發(fā)現(xiàn)這些玩意兒

一堆括號(hào)和符號(hào)。由題目可以知道這是jsp(Java Server Pages)加密的,直接放到Firefox的控制臺(tái)中

11.頭等艙
看題目就知道是在消息頭里面,然而找了幾遍竟然沒(méi)找到,后來(lái)用burp抓包發(fā)現(xiàn)

12.網(wǎng)站被黑
進(jìn)去之后可以發(fā)現(xiàn)是一個(gè)黑頁(yè),黑頁(yè)大部分是靜態(tài)的網(wǎng)頁(yè)。然后用御劍掃描后發(fā)現(xiàn)一個(gè)網(wǎng)址


之后用burp暴力破解,發(fā)現(xiàn)密碼為hack

13.管理員系統(tǒng)
先隨便輸入一個(gè)用戶名和密碼發(fā)現(xiàn)

然后想到可以通過(guò)XXF偽造一個(gè)ip地址,X-Forwarded-For(XFF)是用來(lái)識(shí)別通過(guò)HTTP代理或負(fù)載均衡方式連接到Web服務(wù)器的客戶端最原始的IP地址的HTTP請(qǐng)求頭字段。通俗來(lái)說(shuō),就是瀏覽器訪問(wèn)網(wǎng)站的IP。
偽造一個(gè)IP之后發(fā)現(xiàn)還是沒(méi)什么用,于是又去翻源碼,發(fā)現(xiàn)最后一行有點(diǎn)東西

base64編碼,解密之后是test123,這個(gè)會(huì)不會(huì)是密碼?
Note:username和password與數(shù)據(jù)包之間要有一行空格隔開(kāi),否則服務(wù)器不解析?。?!

14.Web4
進(jìn)去之后它說(shuō)讓看源碼

將這些東西進(jìn)行url解碼之后得到

所以將兩端代碼拼接起來(lái)就好了。(不要忘了在中間加上54aa2!不過(guò)感覺(jué)應(yīng)該是少了個(gè)+號(hào) ( ̄▽ ̄) )。
payload:輸入67d709b2b54aa2aa648cf6e87a7114f1
15.flag在index里
進(jìn)去之后發(fā)現(xiàn)一句話,點(diǎn)擊發(fā)現(xiàn)下一個(gè)網(wǎng)址是這樣的

然后想到這應(yīng)該是一個(gè)文件包含類型的漏洞,
payload:php://filter/read=convert.base64-encode/resource=index.php
php://是一種封裝協(xié)議,參考:https://www.php.net/manual/zh/wrappers.php.php
這個(gè)payload可以通過(guò)偽造協(xié)議來(lái)查看源碼,將得到的字符串進(jìn)行解碼后得到

16.輸入密碼查看flag
這個(gè)進(jìn)去之后發(fā)現(xiàn)

五位數(shù)字,不如用burp暴力破解試下?

密碼:13579
17.點(diǎn)擊一百萬(wàn)次
先看源碼,

name是clicks,用post傳遞,于是

18.備份是個(gè)好習(xí)慣
進(jìn)去后只發(fā)現(xiàn)了一堆字符串,觀察了一會(huì)還發(fā)現(xiàn)了它其實(shí)是一段字符出現(xiàn)了兩遍,但是拿去解碼卻不行。
再回頭看題目:備份是個(gè)好習(xí)慣,那我們把index.php備份一下試試,
url:123.206.87.240:8002/web16/index.php.bak
然后把得到的文件轉(zhuǎn)換成txt格式可以看到源碼

key被替換成空了,不過(guò)我們可以用雙寫(xiě)繞過(guò)去。之后只需要解決key1==key2但是又不相等的問(wèn)題。
這里需要知道,md5中PHP在處理哈希字符串時(shí),會(huì)利用”!=”或”==”來(lái)對(duì)哈希值進(jìn)行比較,它把每一個(gè)以”0e”開(kāi)頭的哈希值都解釋為0,所以如果兩個(gè)不同的密碼經(jīng)過(guò)哈希以后,其哈希值都是以”0e”開(kāi)頭的,那么PHP將會(huì)認(rèn)為他們相同,都是0。所以只需要找到兩個(gè)md5是0e開(kāi)頭的就行。
0e開(kāi)頭小結(jié):https://blog.csdn.net/fengzhantian/article/details/80490629?utm_source=blogxgwz2
payload:http://123.206.87.240:8002/web16/index.php?kekeyy1=s155964671a&kekeyy2=s878926199a
最后得到flag:Bugku{OH_YOU_FIND_MY_MOMY}

19.學(xué)生成績(jī)查詢
看見(jiàn)這個(gè)輸入框第一反應(yīng)就是sql注入,用單引號(hào)試了一下,沒(méi)錯(cuò),就是sql注入了。

之后可以用聯(lián)合查詢直接查詢出來(lái)。

當(dāng)然,使用sqlmap跑也行

20.秋名山老司機(jī)
這一關(guān).......考的是python,兩秒內(nèi)算出答案然后再提交,只能寫(xiě)腳本了,然而因?yàn)楝F(xiàn)在還沒(méi)學(xué)會(huì)python,等到能寫(xiě)腳本的時(shí)候再補(bǔ)吧。。。。。