当前位置:首页 >> 编程语言 >> 【pwn入门】用gdb实现第1个pwn,摩托罗拉 ex223

【pwn入门】用gdb实现第1个pwn,摩托罗拉 ex223

cpugpu芯片开发光刻机 编程语言 7
文件名:【pwn入门】用gdb实现第1个pwn,摩托罗拉 ex223 【pwn入门】用gdb实现第1个pwn 声明

本文是B站你想有多PWN学习的笔记,包含一些视频外的扩展知识。

有问题的源码 #include <stdio.h>#include <stdlib.h>#include <unistd.h>char sh[]="/bin/sh";int func(char *cmd){system(cmd);return 0;}int main(){char a[8] = {};char b[8] = {};puts("input:");gets(a); // gets函数可以读取超过8个字节的数据,然后写入a,造成越界写bprintf(a);if(b[0]=='a'){ // b数组出现'a',即进入获取shell的分支func(sh);}return 0;} 直接hack gcc question_1.c -o question_1_x64

用gdb调试理解这个过程

1.查看断点应该设置哪个位置

2.设置断点 输入13个a 3.查看寄存器的值

p $rbp-0x10

往0x7fffffffe330前面多打几个内存看看

x/20gx 0x7fffffffe310

可以看到输入输入13个a后,成功将b数组的值也越界写成aaaaa,所以b[0] == 'a’的条件会满足。

用gdb改变寄存器的值hack

1.将断点打在main

b main

2.打印$rip的汇编

x/20i $rip

3.在分支比较处设置断点

b *0x5555555552ce

4.通过GDB设置寄存器的值 0x61就是a的ascii码

程序进入到获取shell的分支
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2026年1月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接