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了

相关内容

热门资讯

言短意长|“烹饪大师”退场,餐... 地方行业协会的“大师”清理仍在进行时。近日,四川泸州市餐饮行业协会、泸州市餐饮行业工会联合会发出一纸...
国家发展改革委向民营企业 公开... (来源:嘉兴日报)转自:嘉兴日报  新华社北京9月11日电(记者 魏玉坤)记者11日从国家发展改革委...
弓弦之上 热爱与梦想同箭齐发 (来源:嘉兴日报)转自:嘉兴日报  ■记者 龚思雨  拉弓、瞄准、放弦,箭矢破空而出,一声清脆的“b...
漫画的启示 (来源:南湖晚报)转自:南湖晚报   长安镇中心小学605班 潘奕桐 指导老师 杜盈  漫画虽然不会...
三友联众聘任44岁杜欣洋为核心... 9月12日,三友联众公告,聘任杜欣洋先生为公司核心技术人员。资料显示,杜欣洋先生,中国国籍,无境外永...