JCTF2015非官方writeup

这次水平有限,所以只做出了四道题……请大家尽情鄙视我们吧……

0x1

在资源文件夹中有一个bababa.wav的文件,用AU打开,发现是四声道,下面的两个音轨是二进制波形。按照高低不同分为01记下后,每八位一组,转换为char,即可得到flag。

0x2

根据提示可得栈226有问题, 发现所有记录中均使用DES-EBC加密,key为stringWi。从github上down一个des解密算法,把226的post数据base64解码后使用des解密,即可得到flag。

1
2
3
4
5
6
7
8
9
10
11
12
{
"bundle" : "com.Securitygossip",
"os" : "0.0.1",
"status" : "solved",
"app" : "XcodeGhost",
"country" : "CN",
"language" : "zh-Hans",
"version" : "426",
"type" : "iPhone6,",
"timestamp" : "1440065480",
"name" : "JCTF{XcodeGhost_is_everywhere}"
}

0x6-1

在根目录下的robots.txt中发现如下字符串:

1
2
User-agent: *
Disallow: /13c087c969641bc59fffc97dccd5e673.php?ajiao=whosays*$

最后两个字符看起来像一个正则表达式。

打开Disallow的网址之后,发现php文件的ETAG有点特殊,其它文件的ETAG都是正常的,只有php文件的ETAG是一串连起来的字符:

1
61573135623356795a6d467563773d3d

将ETAG每两位分隔开,作为URL编码来解码,得到一个base64串:

1
aW15b3VyZmFucw==

解码后得到“imyourfans”。

考虑之前robots.txt中的提示,将此字符串带入参数:

1
?ajiao=whosaysimyourfans

访问之后,可以在最下方找到如下代码:

1
<script>alert("JCTF{keep_clam_and_carry_on}")</script><script>alert("# 0x2/1c8bd3e2bdb4c43d317ef5fbef73aab0.php")</script>

0x6-2

查看网页源代码,可以看到一段注释:

1
<!--my birthday 19xxxxxx-->

根据注释和上面<img>标签的alt,容易联想到“刘涛生日”,百度可得19780712。然而输入进去发现并没有立即提交。

看到网页中的一段js,这是在用jQuery发post包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function sendreq() {
var requestUrl = "./1c8bd3e2bdb4c43d317ef5fbef73aab0.php";
$.ajax({
type: "post",
data: "pwd=" + $("#liutao").val(),
dataType: "text",
contentType: 'application/x-www-form-urlencoded',
url: requestUrl,
async: false,
complete: function() {},
error: function(xhr) {
alert(xhr);
},
success: function(msg) {
if (msg == "error")
alert("Password Error!");
else
window.location.href = msg;
}
});
}

其中data的值为“pwd=19780712”,用Fiddler模拟发个包就好了,可以在网页最下方发现提示:“不是土豪不过关,请用iphone7浏览”……主办方丧心病狂……

然后我当时智商太低,并没有意识到iphone只出到了6s,傻傻去百度iphone7的参数去了……结果真发现了,iphone7使用的是iOS10系统,所以将浏览器UA中的版本改成10就可以了,访问得到一个图片的路径,以及一句提示:“wrong session”。

打开图片,里面是一些用xss获取到的cookie,将PHPSESSID替换掉再访问,即可获取flag。