【pwn入门】用gdb实现第1个pwn

声明

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

有问题的源码

c 复制代码
#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,造成越界写b
	printf(a);
	if(b[0]=='a'){ // b数组出现'a',即进入获取shell的分支
		func(sh);
	}
    return 0;
}

直接hack

bash 复制代码
gcc question_1.c -o question_1_x64

用gdb调试理解这个过程

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

2.设置断点

输入13个a

3.查看寄存器的值

bash 复制代码
p $rbp-0x10

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

bash 复制代码
x/20gx 0x7fffffffe310

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

用gdb改变寄存器的值hack

1.将断点打在main

bash 复制代码
b main

2.打印$rip的汇编

bash 复制代码
x/20i $rip

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

bash 复制代码
b *0x5555555552ce

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

  1. 程序进入到获取shell的分支
相关推荐
QT.qtqtqtqtqt3 小时前
网络安全防护技术
安全·网络安全·防火墙·vpn·入侵检测·网闸
燕雀安知鸿鹄之志哉.3 小时前
ctfshow VIP题目限免(前10题)
web安全·网络安全
李詹7 小时前
海外高防服务器延迟优化——跨国业务安全加速的底层逻辑
网络·安全·网络安全·负载均衡·网络攻击模型·ddos
humors2218 小时前
提升Windows安全的一些措施
网络安全·系统安全
卓豪终端管理8 小时前
黑白名单管理:构建安全高效的访问控制体系
运维·网络·安全·web安全·网络安全
中云DDoS CC防护蔡蔡9 小时前
tcp/ip攻击及防范
运维·服务器·tcp/ip·网络安全·ddos
一口一个橘子11 小时前
[ctfshow web入门] web23
web安全·网络安全
梧六柒13 小时前
1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序)
网络安全
游戏开发爱好者814 小时前
Charles的安装和使用教程
websocket·网络协议·tcp/ip·http·网络安全·https·udp
网安加社区21 小时前
国内外网络安全政策动态(2025年3月)
网络安全·政策动态