南邮ctf nctf CG-CTF web题writeup
目錄
- **CG-CTF鏈接:**
- 0x01 簽到題
- 0x02 md5 collision
- 0x03 簽到2
- 0x04 這題不是WEB
- 0x05 層層遞進(jìn)
- 0x06 AAencode
- 0x07 單身二十年
- 0x08 php decode
- 0x09 文件包含
- 0x0a 單身一百年也沒(méi)用
- 0x0b Download~!
- 0x0c COOKIE
- 0x0d MYSQL
- 0x0e GBK Injection
- 0x0f /x00
- 0x10 bypass again
- 0x11 變量覆蓋
- 0x12 PHP是世界上最好的語(yǔ)言
- 0x13 偽裝者
- 0x14 Header
- 0x15 上傳繞過(guò)
- 0x16 SQL注入1
- 0x17 pass check
- 0x18 起名字真難
- 0x19 密碼重置
- 0x1a php 反序列化(暫時(shí)無(wú)法做)
- 0x1b SQL Injection
CG-CTF鏈接:
https://cgctf.nuptsast.com/challenges#Web
0x01 簽到題
題目鏈接:http://chinalover.sinaapp.com/web1/
查看源碼可得到flag
flag:nctf{flag_admiaanaaaaaaaaaaa}
0x02 md5 collision
題目鏈接:http://chinalover.sinaapp.com/web19/
題目給了源碼
經(jīng)分析,題目需要我們輸入一個(gè)a值,要求a的md5值與’QNKCDZO’的md5值相同
QNKCDZO的md5值為0e830400451993494058024219903391
要使a的md5值與給出的md5值相同進(jìn)行強(qiáng)行爆破不太現(xiàn)實(shí)
仔細(xì)觀察給出的md5值發(fā)現(xiàn) 該值以0e開頭的
PHP在處理哈希字符串時(shí),會(huì)利用”!=”或”==”來(lái)對(duì)哈希值進(jìn)行比較,它把每一個(gè)以”0e”開頭的哈希值都解釋為0,所以如果兩個(gè)不同的密碼經(jīng)過(guò)哈希以后,其哈希值都是以”0e”開頭的,那么PHP將會(huì)認(rèn)為他們相同,都是0
所以我們只需要找到md5值為0e開頭的值賦予a 則可以得到flag
以下幾個(gè)值作為參考
所以在url后面跟上?a=s878926199a 即可得到flag
flag:nctf{md5_collision_is_easy}
0x03 簽到2
題目鏈接:http://teamxlc.sinaapp.com/web1/02298884f0724c04293b4d8c0178615e/index.php
題目要求輸入口令,而口令在下方已經(jīng)直接給出
但是我們直接輸入是不行的,因?yàn)檩斎肟蛳拗屏溯斎氲拈L(zhǎng)度為10
我們按下F12,將輸入框限制輸入長(zhǎng)度改為更長(zhǎng),這里我改成了20
修改完畢后,在輸入框中輸入下面的口令,即可得到flag
flag:nctf{follow_me_to_exploit}
0x04 這題不是WEB
題目鏈接:http://chinalover.sinaapp.com/web2/index.html
經(jīng)分析后,flag一定跟圖片有關(guān),將圖片另存為本地
將圖片用文本格式或者用WinHex打開
可以看到flag隱藏在文本的最后面
flag:nctf{photo_can_also_hid3_msg}
0x05 層層遞進(jìn)
題目鏈接:http://chinalover.sinaapp.com/web3/
鏈接打開后是一個(gè)很正常的網(wǎng)頁(yè)
我們查看源碼,可以看到一個(gè)名為SO.html的網(wǎng)頁(yè)
題如其名,層層遞進(jìn),點(diǎn)開SO.html后還有S0.html、SO.htm、S0.htm
最后我們會(huì)找到一個(gè)叫404.html的網(wǎng)頁(yè)
在源碼中我們可以看到一串奇怪的js注釋,仔細(xì)觀察一下就可以得到flag
此外我們也可以使用burp 很快就能找到404.html
flag:nctf{this_is_a_fl4g}
0x06 AAencode
題目鏈接:http://homura.cc/CGfiles/aaencode.txt
鏈接打開后全是顏文字表情(o_o) 這里應(yīng)該是Unicode編碼
右鍵另存為頁(yè)面到本地 aaencode.txt 保存后再打開 就可以得到正常的aaencode
復(fù)制下來(lái) 在瀏覽器中按F12 在控制臺(tái)中 粘貼這些顏文字 即可得到flag
flag:nctf{javascript_aaencode}
0x07 單身二十年
題目鏈接:http://chinalover.sinaapp.com/web8/
點(diǎn)開burp抓包,可以得到flag
flag:nctf{yougotit_script_now}
0x08 php decode
題目給出代碼:
<?php function CLsI($ZzvSWE) {$ZzvSWE = gzinflate(base64_decode($ZzvSWE));for ($i = 0; $i < strlen($ZzvSWE); $i++) {$ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);}return $ZzvSWE;} eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==")); ?>直接放到php里面跑一遍
發(fā)現(xiàn)有語(yǔ)法錯(cuò)誤,把eval改成echo,即可得到flag
flag:nctf{gzip_base64_hhhhhh}
0x09 文件包含
題目鏈接:http://4.chinalover.sinaapp.com/web7/index.php
點(diǎn)開鏈接后,有一個(gè)click me?no 點(diǎn)一下
此時(shí)url為
通過(guò)對(duì)url進(jìn)行分析以及題目名稱文件包含來(lái)看,題目提示flag在index中,這里發(fā)送了file為key,show.php為value的GET請(qǐng)求
<?php$file = $_GET["file"];... ...include($file); ?>index.php大致內(nèi)容如上,通過(guò)訪問(wèn)index.php?file=show.php,則$file=show.php,也就是include(show.php),而對(duì)于php的include()函數(shù),會(huì)獲取指定文件的內(nèi)容,在執(zhí)行前將代碼插入到index.php文件中。而如果被包含的文件中無(wú)有效的php代碼,則會(huì)直接輸出無(wú)效的文件內(nèi)容。通常利用無(wú)效代碼這一點(diǎn)來(lái)將文件內(nèi)容輸出。
通過(guò)以上分析,我們應(yīng)該是需要獲取index.php文件的內(nèi)容進(jìn)行下一步分析,那么就需要利用include(),包含index.php,并且是無(wú)效代碼的index.php文件,嘗試使用php偽協(xié)議php://filter,以base64編碼格式讀取文件(因?yàn)閎ase64編碼的index.php無(wú)法執(zhí)行,將會(huì)被直接輸出),構(gòu)造:
文件路徑這里采取相對(duì)路徑,相對(duì)于/web7/index.php文件所在目錄下的index.php文件,即…/index.php(當(dāng)前目錄下的index.php文件)
得到
用base64解密,即可得到flag,解密結(jié)果如下
<html><title>asdf</title><?phperror_reporting(0);if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}$file=$_GET['file'];if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){echo "Oh no!";exit();}include($file); //flag:nctf{edulcni_elif_lacol_si_siht}?> </html>flag:nctf{edulcni_elif_lacol_si_siht}
0x0a 單身一百年也沒(méi)用
題目鏈接:http://chinalover.sinaapp.com/web9/
這道題跟0x07一樣,直接抓包,不過(guò)這題的flag在響應(yīng)頭中
flag: nctf{this_is_302_redirect}
0x0b Download~!
題目鏈接:http://way.nuptzj.cn/web6/
好像失效了⊙﹏⊙‖∣
0x0c COOKIE
題目鏈接:http://chinalover.sinaapp.com/web10/index.php
題目描述中有一個(gè)tips:0==not
抓包看看
抓包結(jié)果結(jié)合題目cookie 以及tips,我們?cè)囋噷ookie:Login=0修改為1,得到flag
flag:nctf{cookie_is_different_from_session}
0x0d MYSQL
題目鏈接:http://chinalover.sinaapp.com/web11/
點(diǎn)擊這個(gè)鏈接,結(jié)果真的是百度百科,我還仔細(xì)把百科看了一遍⊙﹏⊙‖∣
看上面提示,得知應(yīng)該存在一個(gè)robots.txt,打開看看
上面的字由于編碼原因看不起了,不過(guò)大概能知道有一個(gè)sql.php文件以及flag跟下面的代碼有關(guān)
分析后發(fā)現(xiàn)存在一個(gè)intval()函數(shù),用于獲取變量的整數(shù)值
根據(jù)下面的if函數(shù)分析,只要輸入一個(gè)整數(shù)位為1024,小數(shù)位不為0的id,即可得到flag,這里我用的是1024.1
flag:nctf{query_in_mysql}
0x0e GBK Injection
題目鏈接:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1
顯示了當(dāng)前語(yǔ)句,很容易看出來(lái)是字符型注入
嘗試在id=1后面加上一個(gè)單引號(hào)’,發(fā)現(xiàn)’被轉(zhuǎn)義為反斜杠\,再結(jié)合題目GBK Injection,不難想到這是一道寬字節(jié)注入題,我們可以用%df%27來(lái)代替單引號(hào)’,后面發(fā)現(xiàn)空格和#也被過(guò)濾了,所以用%23代替#,注釋號(hào)/**/代替空格
接下來(lái)開始注入
id=-1’ union select 1,2#
可以知道回顯位為2
id=-1’ union select 1,database()#
可以得到數(shù)據(jù)庫(kù)名為sae-chinalover
?id=-1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572#
這里數(shù)據(jù)庫(kù)名字用16進(jìn)制表示
可以得到ctf,ctf2,ctf3,ctf4,gbksqli,news六張表
查詢每一張表的列,以gbksqli為例
?id=-1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=0x67626b73716c69#
可以得到gbksqli中有flag列(ctf4表中有個(gè)假flag)
查詢flag值
?id=-1 union select 1,flag from gbksqli#
可以得到flag
flag:nctf{gbk_3sqli}
0x0f /x00
題目鏈接:http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php
題目給出代碼
ereg()函數(shù)用指定的模式搜索一個(gè)字符串中指定的字符串,如果匹配成功返回true,否則,則返回false。搜索字母的字符是大小寫敏感的,這里限制變量nctf的必須為數(shù)字型
strpos() 函數(shù)查找字符串在另一字符串中第一次出現(xiàn)的位置,返回字符串在另一字符串中第一次出現(xiàn)的位置,如果沒(méi)有找到字符串則返回 FALSE,這里限制nctf中必須含有’#biubiubiu’
同時(shí)要求變量為數(shù)字型且含有字符串片段,這里我們有兩種方法
方法一:ereg(array)返回NULL,strpos(array)返回NULL而NULL與FALSE類型是不同的,所以我們可以考慮傳入nctf為一個(gè)數(shù)組
方法二:根據(jù)題目名稱,我們可以用%00截?cái)嗟姆绞絹?lái)獲得flag
ereg()函數(shù)存在NULL截?cái)嗦┒?#xff0c;導(dǎo)致了正則過(guò)濾被繞過(guò),所以可以使用%00截?cái)嗾齽t匹配
這里#用%23代替
flag:nctf{use_00_to_jieduan}
0x10 bypass again
題目鏈接:http://chinalover.sinaapp.com/web17/index.php
題目給出代碼
這里要求傳入a,b要求a,b的值不相同,而a,b的md5值相同,我們就想到0x02中,md5()函數(shù)中存在0e截?cái)?#xff0c;所以我們只用傳入兩個(gè)md5值為0e開頭的a,b值即可
s878926199a0e545993274517709034328855841020s155964671a0e342768416822451524974117254469這里采用0x02的數(shù)據(jù)
?a=s878926199a&b=s155964671a
同時(shí),md5(array)的值為NULL,所以我們也可以考慮傳入兩個(gè)數(shù)組
flag:nctf{php_is_so_cool}
0x11 變量覆蓋
題目鏈接:http://chinalover.sinaapp.com/web18/index.php
下面有個(gè)source.php,給出代碼
要求傳入一個(gè)pass值,使得pass值與thepassword_123相同,即可得到flag,但我們不知道thepassword_123是多少
extract() 函數(shù)從數(shù)組中將變量導(dǎo)入到當(dāng)前的符號(hào)表,該函數(shù)使用數(shù)組鍵名作為變量名,使用數(shù)組鍵值作為變量值。針對(duì)數(shù)組中的每個(gè)元素,將在當(dāng)前符號(hào)表中創(chuàng)建對(duì)應(yīng)的一個(gè)變量。
extract(array,extract_rules,prefix)中第二個(gè)變量是檢查和符號(hào)表中已存在的變量名是否沖突,而在上面為默認(rèn)值,若沒(méi)有另外指定,函數(shù)將覆蓋已有變量,故傳入任意pass和與之相等的thepassword_123即可獲取flag
抓包,post傳入
flag:nctf{bian_liang_fu_gai!}
0x12 PHP是世界上最好的語(yǔ)言
題目鏈接:http://way.nuptzj.cn/php/index.php
題目已崩,說(shuō)明PHP不是世界上最好的語(yǔ)言
0x13 偽裝者
題目鏈接:http://chinalover.sinaapp.com/web4/xxx.php
理論上抓包,加上X-Forwarded-For為127.0.0.1就可以成功,這里可能是題目崩了
0x14 Header
題目鏈接:http://way.nuptzj.cn/web5/
崩
0x15 上傳繞過(guò)
題目鏈接:http://teamxlc.sinaapp.com/web5/21232f297a57a5a743894a0e4a801fc3/index.html
一道正經(jīng)的上傳題,我們隨便上傳一個(gè)文件提示我們應(yīng)該上傳圖片,上傳一張jpg圖片,提醒我們應(yīng)該改為PHP后綴
抓包,嘗試將filename改成1.jpg.php,失敗了
我們采用%00截?cái)?#xff0c;將upload/后面加上1.php .jpg,php后面有一個(gè)空格,方便一會(huì)兒修改
在hex中找到這里,把空格的20改成00
得到flag
flag:nctf{welcome_to_hacks_world}
(這里嘗試過(guò)將filename改成1.php .jpg再截?cái)?#xff0c;結(jié)果失敗了)
0x16 SQL注入1
題目鏈接:http://chinalover.sinaapp.com/index.php
有個(gè)Source,代碼如下
分析下代碼,明顯的帶括號(hào)的字符型,這里僅判斷user=admin即可登錄成功,所以我們直接閉合user之后的語(yǔ)句并讓user=admin即可
抓包,post,得到flag
flag:nctf{ni_ye_hui_sql?}
0x17 pass check
題目鏈接:http://chinalover.sinaapp.com/web21/
題目給出代碼
strcmp(string1,string2)函數(shù)比較兩個(gè)字符串,若返回0則string1=string2,返回<0則string1<string2,返回>0則string1>string2
這里要求我們傳入一個(gè)pass值與未知的pass1相同,即可得到flag
同樣,strcmp(array)的值為NULL
不過(guò)這里,好像出現(xiàn)了點(diǎn)小問(wèn)題,無(wú)論如何都不能傳入pass值,gg
0x18 起名字真難
題目鏈接:http://chinalover.sinaapp.com/web12/index.php
題目給出代碼
ord(string)是求string的ascii值
分析下代碼,題目要求我們傳入一個(gè)key其中不能含有數(shù)字,又要跟’54975581388’相同
一開始沒(méi)什么思路,不過(guò)把’54975581388’換成16進(jìn)制,就知道了
54975581388=0xccccccccc
flag:nctf{follow_your_dream}
0x19 密碼重置
題目鏈接:http://nctf.nuptzj.cn/web13/index.php?user1=Y3RmdXNlcg==
題目要求我們重制管理員admin的密碼
我們將賬號(hào)欄改成admin,發(fā)現(xiàn)無(wú)法修改,驗(yàn)證碼告訴了是1234
抓包
發(fā)現(xiàn)失敗了,我們?cè)倏匆幌聈rl
發(fā)現(xiàn)有個(gè)user1=Y3RmdXNlcg==
看上去是個(gè)base64編碼,解碼后為ctfuser,為默認(rèn)輸入的值,所以我們還需要將admin的base64值加到url的user1=后面
admin的base64值為YWRtaW4=
nctf{reset_password_often_have_vuln}
0x1a php 反序列化(暫時(shí)無(wú)法做)
題目鏈接:http://4.chinalover.sinaapp.com/web25/index.php
0x1b SQL Injection
題目鏈接:http://chinalover.sinaapp.com/web15/index.php
查看源碼可以得到提示
分析下代碼,clean()函數(shù)中stripslashes(string)函數(shù)的作用是去掉字符串string中的反斜杠\,htmlentities(string, ENT_QUOTES)的作用是將字符串中string的單引號(hào)和雙引號(hào)編碼
總結(jié)
以上是生活随笔為你收集整理的南邮ctf nctf CG-CTF web题writeup的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用字节流和字符流向浏览器输出数据
- 下一篇: 自动延时关机电路分析