暑假集训7.01
mysql
给了好多文件,有个FLAG文件,但里面什么都没有,问了web师傅也不是sql的题目
然后用strings指令去搜索字符,发现在flag藏在ibdata1和ib_logfile0
[HZNU]math
一道交互题
连接环境,让我们计算56除一个数的结果
去看一下源码,flag就是FLAG = open('flag').read
然后发现里面有assert函数和eval函数,这两个函数存在着漏洞,就是若函数里面的内容是字符串,就会被当成代码来执行
#!/usr/bin/env python3.8 from hashlib import sha256 import socketserver import signal import string import random import os FLAG = open('flag').read class Task(socketserver.BaseRequestHandler): def _recvall(self): BUFF_SIZE = 2048 data = b'' while True: part = self.request.recv(BUFF_SIZE) data += part if len(part) < BUFF_SIZE: break return data.strip() def send(self, msg, newline=True): try: if newline: msg += b'\n' self.request.sendall(msg) except: pass def recv(self, prompt=b'value 2: '): self.send(prompt, newline=False) return self._recvall() def proof_of_work(self): random.seed(os.urandom(8)) proof = ''.join( [random.choice(string.ascii_letters+string.digits) for _ in range(20)]) _hexdigest = sha256(proof.encode()).hexdigest() self.send(f"[+] sha256(XXXX+{proof[4:]}) == {_hexdigest}".encode()) x = self.recv(prompt=b'[+] Plz tell me XXXX: ') if len(x) != 4 or sha256(x+proof[4:].encode()).hexdigest() != _hexdigest: return False return True def multiply_func(self, x): self.send(f'value 1: {repr(x)} '.encode()) v = self.recv().decode() assert v # if len(v) > 8: return self.send(f'{x} * {v}'.encode()) self.send(str(eval(f'{x} * {v}')).encode()) return eval(f'{x} * {v}') def handle(self): # if not self.proof_of_work(): # return self.send(b"Welcome to the 4XWi11's Arithmetic classroom") self.send(b"I will give value1, you need to answer value2") self.send(b"and you need to multiply the two to equal 56") signal.alarm(500) for x in [7, 7.77, '77777', [777777777]]: if self.multiply_func(x) != 56: self.send(b"wrong!") return else: self.send(b"Correct!") self.send(b"Congrats! Here is your flag: ") self.send(FLAG.encode()) class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer): pass class ForkedServer(socketserver.ForkingMixIn, socketserver.TCPServer): pass if __name__ == "__main__": HOST, PORT = '0.0.0.0', 80 server = ForkedServer((HOST, PORT), Task) server.allow_reuse_address = True print(HOST, PORT) server.serve_forever()
所以可以直接输入open('flag').read()指令,直接获得flag
[SWPU 2020]耗子尾汁
一个“耗子尾汁”的gif
用binwalk指令分析一下,发现里面还有zip,分离出来
一个MP4,用pr逐帧分析的时候发现有一段密文,一个txt,没什么用
再用binwalk分析一下MP4,发现还有zip,分离出来
zip需要密码,应该就是上面解码的那个,得到一个txt文件,还提示说最后一层是单表替换密码
前面用CyberChef一把梭,最后用quipquip解单表替换密码,https://quipqiup.com/
也可以用仿射密码加上txt文件名的提示进行解码
[SWPU 2020]套娃
一个xlsx文件,直接打开报错了,用010打开,发现是zip,修改后缀
压缩包里得到一个RC4的密文,一个xls文件,同样打不开,改成zip
压缩包里面有一个加密的压缩包,是RC4key,一个xlsx,打不开改zip
压缩包有个注释,但没什么用处,最后在010末尾发现了密码,取出RC4key
最后进行RC4解码得到flag
[SWPU 2020]找找吧
一个加密的zip,密码在010的末尾
得到一个加密的压缩包,一个MP3文件,但打不开,用010发现是rar,修改一下后缀
一张没用的png,一个MP3,用Audacity打开,在末尾发现了摩斯
解码后发现还不是压缩包的密码,还需要进行MD5解密
然后拿到一个png和一个gif,png一看就是被改了高度,用010给它改回来,另一个gif里逐帧找到了密文
veni vidi vici是凯撒大帝说过的话,那密文就应该是凯撒密码,一位位遍历一下得到flag
[SWPU 2020]来猜谜了
一张图片,看着提示应该是lsb隐写
发现有压缩包,取出来
这里不得不说WinRAR不大行,打不开压缩包,用7-ZIP却能打开,得到一个jpg和一个USB流量包,流量包跑一下脚本
得到了AG DX AG DX AG DX,这是ADFGX解密,得到密码为gogogo
jpg进行outguess隐写,得到flag
[陇剑杯 2021]签到
给的是流量包,先进行流量分析
追踪tcp流,发现再用http传输文件,导出http,找到一个gif和一个jpg
gif没有什么东西,jpg用010打开后发现是zip文件,改一下后缀,得到了一个html文件的小游戏
打开是小恐龙的游戏
按f12在调试器里面搜索flag,找到了一个flag,但这是错误的
最后看了讨论区得知,题目问了我们这是什么协议的网络攻击,因此答案为flag{http}