gdb的简单练习
创始人
2024-05-26 13:21:47

题目来自《ctf安全竞赛入门》

1.用vim写代码

vim  gdb.c

#include "stdio.h"
#include "stdlib.h"
void main()
{int i = 100;int j = 101;if (i == j){printf("bingooooooooo.");system("/bin/sh");}elseprintf("error............");
}

如果i==j

也就是100=101

那么就输出:bingooooooooo.

然后执行shellcode

但是这两个怎么可能相等嘛

2.用gcc生成可执行文件

首先用生成目标文件、gcc后边是源文件名字、-o后边的是目标文件名字

gcc   -g gdb.c  -o  gdbshouxi

然后会有一个文件,就叫做gdbshouxi

3.gdb

用gdb调试他

打开方式:

gdb  gdbshouxi

就进入gdb了

可以反汇编main函数

disassemble   main

3.1书上说让先下断点main

b main

断点下错了可以用d 标号删除

如果不运行下断点到下边那个地址的话到某个地址的话可能会出错

3.2然后运行

r

箭头所指就是即将要运行的

红色的是cmp比较函数,就是刚刚写的if

3.3下断点

b  *0x555555555162

3.4直接运行到断点处

c

发现要比较的是eax和rbp-0x4

3.5

查看下,给他改了

p $eax
x/w  $rbp-0x8
set $eax =0x65

x的用法参考这个

(1条消息) GDB查看指定内存地址的内容——指令x_Jeremy_ku的博客-CSDN博客_gdb查看地址内容

比较的是dword嘛双字节所以就是w了

或者改rbp-0x8也可以

但是set $rbp-0x8改的是它所指向的地址,并不是地址所指向的内容

改内容要set *地址

改的话记得加0x十六进制

3.6然后c

c

就可以执行到shellcode了

相关内容

热门资讯

东箭科技跌2.24%,成交额2... 12月12日,东箭科技跌2.24%,成交额2.01亿元,换手率8.48%,总市值51.70亿元。异动...
特变电工:目前尚未开展微波和激... 投资者提问:太空电站是未来绿色能源重点拓展方向,公司作为全球领先的输变电能源公司,请问有没有研发微波...
苏文电能涨0.76%,成交额2... 12月12日,苏文电能涨0.76%,成交额2.59亿元,换手率6.34%,总市值43.88亿元。异动...
中红医疗跌3.21%,成交额1... 12月12日,中红医疗跌3.21%,成交额1.24亿元,换手率2.29%,总市值58.15亿元。异动...
长盈通涨0.79%,成交额5.... 12月12日,长盈通涨0.79%,成交额5.36亿元,换手率9.54%,总市值59.25亿元。异动分...