专栏/NSSCTF[MISC]刷题日记8

NSSCTF[MISC]刷题日记8

2022年11月13日 14:26--浏览 · --喜欢 · --评论
粉丝:94文章:122

https://www.ctfer.vip/problem

回来了惹,这几天本来打省赛的,可惜疫情和考试原因没去到,我们队的另一个队友也因为这方面原因,导致我们队没去,还是蛮可惜的,这回来第一天还是来点misc吧,web题后面再来,会补的= =。

1.[BJDCTF 2020]认真你就输了

打开压缩包,看到xls文件,这种wps类型的基本都是不是打开就是转换成压缩包,因为他本质就是压缩包= =。了解一下xls这类文件转换成压缩包的结构还是挺好的,这里就直接找到了flag.txt,其实你010打开应该也看到的。:


flag{M9eVfi2Pcs#}


2.[SWPUCTF 2021 新生赛]Bill

提示: 计算总价,flag为NSSCTF{账单金额}。不要被表象欺骗

010打开,看到提示:


看到结构,提取出来:

就跟我们上一题所说,本质是压缩包,改成xls后看到:


这里其实之前做DAS也有一道题类似,因为和出题人认识,所以知道他有这方面借鉴,看了一眼可以直接用那次的脚本:

好吧找不到了,找到了其他大佬脚本,感谢,同时发现这里如果直接改后缀不提取会提示有密码,这里属于是凑巧了。:

https://www.likecs.com/show-307127571.html#sc=23708

这里记得下载openpyxl,一般 pip install openpyxl就行了,注意吧xls文件放到脚本目录.

import openpyxl
import re
def trad_to_int(money):
    # 转换字典
    trad_dict = {
        '零':0,
        '壹':1,
        '贰':2,
        '叁':3,
        '肆':4,
        '伍':5,
        '陆':6,
        '柒':7,
        '捌':8,
        '玖':9,
        '拾':10,
        '佰':100,
        '仟':1000,
        '万':10000,
        '亿':100000000,
        '角':0.1,
        '分':0.01
    }

    trad = re.search(r"[零壹贰叁肆伍陆柒捌玖拾佰仟亿角分]+", money)
    if trad is not None:
        num = 0
        add = 0
        sum = 0
        for i in money:
            if i in ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']:
                add = trad_dict[i]
                sum = sum + add
            elif i in ['拾','佰','仟','亿','角','分']:
                num = add * trad_dict[i]
                sum = sum - add
                sum = sum + num
                add = num
            elif i == '万' or i == '亿':
                sum = sum * trad_dict[i]
        return float(sum)
    else:
        return money

def main():
    submoneyCN = ["", "拾", "佰", "仟"]
    numsCN = {"零": 0, "壹": 1, "贰": 2, "叁": 3, "肆": 4, "伍": 5, "陆": 6, "柒": 7, "捌": 8, "玖": 9}
    w = openpyxl.open("00000025.xlsx")
    ws = w.active
    # 获取第一列 即单件商品金额
    t = ws['A']
    t1=[]
    for x in range(1,len(t)):
        t1.append(trad_to_int(t[x].value))
    print(t1)
    # 获取第二列并处理
    t = ws['B']
    t2=[]
    for x in range(1,len(t)):
        t2.append(trad_to_int(t[x].value))
    print(t2)
    r=0
    for index in range(0,len(t2)):
       r+=float(t1[index])*float(t2[index])
    print(r)
if __name__ == '__main__':
    main()

这里他有特殊符号①啊这些,需要我们手动转,然后因为脚本全是大写,所以需要全转大写字符,然后跑脚本:

最后得到:{5030782.26}

3.[NISACTF 2022]where_is_here

Chenser打算约他的青梅竹马去旅游,在网上看到这个旅馆,觉得很不错,你能帮忙找一下这家旅店的预约电话吗?

信息检索题目:

一般丢到各种搜索软件或者旅行软件看就行了,这里是旅店其实丢旅行软件好一点。

这里丢百度看到:

当然这张图不标准,你也会看到厦门很多旅店挂的画一样,我记得我当时打这个比赛找到个特准的图,找不到了,然后这题很坑的地方在你百度找的号码很多是错的,当然有可能是我的问题,最后在携程上找到的号码才对:

当然你现在搜得到:厦门鼓浪屿奢华雅筑主题酒店,手机号还是得上携程搜pc端我没看到。

最后得到:{厦门市思明区鼓浪屿康泰路25号17746048875}


4.[CISCN 2018]Picture

国赛题,上难度,010打开发现没有压缩包,run 了 template发现不是单纯的jpg,于是切binwalk看一下:

jpg的文件结尾是FF D9,搜了一下zlib的开始是:78 9C,010搜一下:

这里提前出来需要脚本转换,ctrl+shift+c把hex码提取出来:

感谢大佬脚本:

https://blog.csdn.net/uiop_uiop_uiop/article/details/80153603

#python2
 
import zlib
 
import binascii
 
import base64
 
 
 
data = "789CAD50CB92A2500CFD2016C2151516BD08EFDB80C54304D979012FF2101015E4EB1B6AA6BB66379B4EA59293E4544E2A3E078A24B900B383520E153BF6FC280A219D6B9587252EE184C432CE9C8C5EC0B997E92DB7754489B05D8161B43EABDB9D7CF7C41E71C4E1D77E5767BDC534AEDE6CD8AA98F809278F6EC4FDC138A20DC3D50775F7D21291561B1C5C2FBB0BB7BA1BB835BA6A77EB4C8730C8DEDE3CEB39E4815093D5C04916B87805FFBB535E867F0CFF20A920C8AB640AF4BB01D20CB59742F9E8CC0EAA40A17EE4E2FD008737C86764A0872D056AAF49F42F7F5E7D5CB0312CE209680F378BBC86209EDA577E1DB9ACE9143C83CD5CEC0CD45CE65A71DB20A9B5220E3FF313EAA9A973AF64EDD2A43ECEBD0D8BF57D4EF481125D9B52B9DC2A6E43B11AB7440F282EC6218BF64D1C8E3D9E80C1D785573D631F464B965A7205818462998663E550D6C432D07FB5C3FAF826ACD7A675359D43F1E9459F6FB2C6DB1FCEF997B20F82E54BC329DA4F2912DFB10C3BF3FB17001F5F8A8CC192"

result = binascii.hexlify(zlib.decompress(data))
 
print result
 
result = result.decode('hex')
 
print result
 
r = base64.b64decode(result)
 
print r
 
f = open(r"2.zip","wb")
 
f.write(r)
 
f.close()
  

踏马的我python3运行不起,还要换python。

这里看了一下wp,binwalk -e也可以,这里把提取的zlib文件-e一下,提出文件一看就是base编码。

这里别人没用脚本的工具直接输出了16进制,我的16进制还带翻译,很乱,修改了一下脚本:

import binascii

import base64    

S="S1ADBBQAAQAAADkwl0xs4x98WgAAAE4AAAAEAAAAY29kZePegfAPrkdnhMG2gb86/AHHpS0GMqCrR9s21bP43SqmesL+oQGo50ljz4zIctqxIsTHV25+1mTE7vFc9gl5IUif7f1/rHIpHql7nqKPb+2M6nRLuwhU8mb/w1BLAQI/ABQAAQAAADkwl0xs4x98WgAAAE4AAAAEACQAAAAAAAAAIAAAAAAAAABjb2RlCgAgAAAAAAABABgAAFvDg4Xa0wE8gAmth9rTATyACa2H2tMBUEsFBgAAAAABAAEAVgAAAHwAAADcAFtQeXRob24gMi43XQ0KPj4+IKh9qH2ofQ0KDQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6DQogIEZpbGUgIjxweXNoZWxsIzA+IiwgbGluZSAxLCBpbiA8bW9kdWxlPg0KICAgIKh9qH2ofQ0KWmVyb0RpdmlzaW9uRXJyb3I6IKh9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofSA8LSBwYXNzd29yZCA7KQ0KPj4+IAA="

S=base64.b64decode(S).hex()

print(S)

修复后得到:

4b5003041400010000003930974c6ce31f7c5a0000004e00000004000000636f6465e3de81f00fae476784c1b681bf3afc01c7a52d0632a0ab47db36d5b3f8dd2aa67ac2fea101a8e74963cf8cc872dab122c4c7576e7ed664c4eef15cf6097921489fedfd7fac72291ea97b9ea28f6fed8cea744bbb0854f266ffc3504b01023f001400010000003930974c6ce31f7c5a0000004e000000040024000000000000002000000000000000636f64650a0020000000000001001800005bc38385dad3013c8009ad87dad3013c8009ad87dad301504b05060000000001000100560000007c000000dc005b507974686f6e20322e375d0d0a3e3e3e20a87da87da87d0d0a0d0a54726163656261636b20286d6f737420726563656e742063616c6c206c617374293a0d0a202046696c6520223c70797368656c6c23303e222c206c696e6520312c20696e203c6d6f64756c653e0d0a20202020a87da87da87d0d0a5a65726f4469766973696f6e4572726f723a20a87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87da87d203c2d2070617373776f7264203b290d0a3e3e3e2000

小技巧,把这串字符丢进txt,在010用import hex打开:

看到下面还要password猜测开头kp可能是PK,整理乱码花了一些时间:

这里下面password:

[Python 2.7] >>> ▆▆▆ Traceback (most recent call last):   File "<pyshell#0>", line 1, in <module>     ▆▆▆ ZeroDivisionError: ▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆ <- password ;) >>>

百度搜索到报错信息:

得到密码:integer division or modulo by zero

打开发现:G0TE30TY[,C,X.$%&,C@Y,T5".#5%0C%"-#,Y04)&1C8Q-S,Q.49]`

之前做到过,这是uuencode,解码得到flag:

CISCN{2388AF2893EB85EB1B439ABFF617319F}

这题有点折磨环境不对的,桑心。

期待我们下一题再见!

投诉或建议