【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的分支
相关推荐
久违 °8 小时前
【安全开发】Nuclei源码分析-任务执行流程(三)
安全·网络安全·go
white-persist8 小时前
汇编代码详细解释:汇编语言如何转化为对应的C语言,怎么转化为对应的C代码?
java·c语言·前端·网络·汇编·安全·网络安全
jenchoi41310 小时前
【2025-11-03】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全
Z_renascence10 小时前
web214-web220
web安全·网络安全
hu1j12 小时前
[HTB] 靶机学习(十二)Eureka
学习·安全·web安全·网络安全·云原生·eureka
jenchoi41319 小时前
【2025-11-04】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
安全·web安全·网络安全
hcja6661 天前
WordPress wpForo Forum插件漏洞CVE-2025-11740复现
web安全·网络安全
安全不再安全1 天前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
竹等寒1 天前
Go红队开发—图形化界面
网络安全·golang·个人开发
Jerry2505091 天前
怎么才能实现网站HTTPS访问?
网络协议·http·网络安全·https·ssl