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

声明

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

有问题的源码

#include 
#include 
#include 
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

gcc question_1.c -o question_1_x64

【pwn入门】用gdb实现第1个pwn_第1张图片

用gdb改变寄存器的值hack

1.将断点打在main

b main

【pwn入门】用gdb实现第1个pwn_第2张图片
2.打印$rip的汇编

x/20i $rip

【pwn入门】用gdb实现第1个pwn_第3张图片
3.在分支比较处设置断点

b *0x5555555552ce

【pwn入门】用gdb实现第1个pwn_第4张图片

4.通过GDB设置寄存器的值
0x61就是a的ascii码
【pwn入门】用gdb实现第1个pwn_第5张图片

  1. 程序进入到获取shell的分支
    【pwn入门】用gdb实现第1个pwn_第6张图片

你可能感兴趣的:(PWN,智能汽车安全,pwn,网络安全)