【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的分支
相关推荐
liann1193 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20254 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec5 小时前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用5 小时前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云
原来是你~呀~6 小时前
Strix:AI驱动的全自动安全测试平台,LinuxOS部署
网络安全·自动化渗透测试·strix
fendouweiqian6 小时前
AWS WAF(配合 CloudFront)基础防护配置:免费能做什么、要不要开日志、如何限制危险方法
网络安全·aws·cloudfront
乾元6 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
Whoami!6 小时前
⓫⁄₁₃ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 利用Windows计划任务提权
网络安全·信息安全·利用windows计划任务提权
虚构之人1 天前
二进制漏洞挖掘(WinAFL Fuzzing)Windows篇
汇编·网络安全·信息安全·系统安全
原来是你~呀~1 天前
CAI:人机协作的模块化网络安全AI框架
网络安全·自动化渗透测试