栈溢出

  1. 修改返回地址,让其指向溢出数据中的一段指令(shellcode)

2.修改返回地址,让其指向内存中已有的某个函数(return2libc)
return-to-libc
EIP一旦改写成system函数地址后,那执行system函数时,它需要获取参数。而根据Linux X86 32位函数调用约定,参数是压到栈上的。噢,栈空间完全由我们控制了,所以控制system的函数不是一件难事情。
这里写图片描述
执行

payload="A"*pad+"BBBB"+p32(sys_addr)+"dead"+p32(sh_addr    )

32位数据从右到左存入栈中,先跳转到system函数执行call system
call会把下一条指令入栈即把“system的返回地址入栈,故返回地址随意写
然后执行(/bin/sh)

3.修改返回地址,让其指向内存中已有的一段指令(ROP)
这里写图片描述
64位传参先存入寄存器
pop edi即把栈顶的数据传入edi寄存器
就是把/bin/sh传入edi
再ret返回system函数取出(/bin/sh)中的数据;

4.修改某个被调用函数的地址,让其指向另一个函数(hijack GOT)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值