【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的分支
相关推荐
PinTrust SSL证书1 小时前
IP地址访问网站,怎么去除不安全提示?
网络协议·tcp/ip·安全·网络安全·https·ssl
菩提小狗2 小时前
每日安全情报报告 · 2026-04-17
网络安全·漏洞·cve·安全情报·每日安全
busy dog~乌鸦~4 小时前
【THM-题目答案】:Web Fundamentals-How The Web Works-DNS in Detail: Domain Hierarchy
运维·web安全·网络安全·系统安全
Suckerbin7 小时前
vulnyx-Kyubi 靶场渗透
安全·web安全·网络安全
星依网络8 小时前
应急响应流程全解析:如何快速处置网络安全事件
网络安全
大方子10 小时前
【PolarCTF】x64
网络安全·polarctf
一名优秀的码农12 小时前
vulhub系列-69-Keyring(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
Chengbei1113 小时前
2026护网HVV面试看这篇就够了!真题+技巧+培训福利一站式get
网络·安全·web安全·网络安全·面试·职场和发展·安全架构
深邃-14 小时前
【Web安全】-基础环境安装:Miniconda,Python环境安装,PHP环境安装(2)
python·计算机网络·安全·web安全·网络安全·系统安全·php
极客小云14 小时前
【AiCodeAudit 2.0 发布:基于调用图与局部子图的 AI 代码安全审计平台】
人工智能·网络安全·语言模型·大模型·github·安全性测试·代码复审