HackThebox Lesson

本文介绍了如何解决HackThebox上一道基础PWN题目,涉及链接服务器、查看程序属性、找到不可写保护区域、字符串处理、缓冲区溢出检测以及未调用函数的地址查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HackThebox Lesson

每日一更 HackThebox 系列 

这次没有攻击和靶机的环境因为开新篇章的缘故  所以现在在更新PWN的题目 以后每日一更的都属于那种相对简单的 更深层次的我会放在后面继续更新 话不多说开始

下载文件

到Linux解压

解压出来就是这样 先看README.txt

enmmmm 这是个基础题 要你去链接他的服务器 然后根据题目做题类似这种非常基础

他的服务器地址在上面截图上是有的 直接nc 连接就是了

一个一个看

一开始误会了 这里题目是问 这是个多少位的程序 (我还在那疯狂运行报错)

这个可以通过checksec 看

64位程序

问题二:哪个地方开启了不可写保护

NX 也是上一步就看到了

问题三: 如果想要 让他输出 "Welcome admin!" 你需要输入什么

这个就需要看看代码

C的代码

看到print_msg是控制输出什么的

这段代码是一个简单的函数,接受一个字符串指针作为参数,并根据该字符串的内容打印不同的欢迎消息。

让我们来分析一下:

void print_msg(char *user):这是一个函数声明,表明该函数名为print_msg,接受一个指向字符的指针作为参数,并且不返回任何值(void)。

char formatter[0x20];:在函数内部定义了一个长度为32字节(0x20的十六进制表示)的字符数组formatter,用于存储格式化后的用户输入。

# 重点1 
strncpy(formatter, user, 5);:使用strncpy函数将user指针指向的字符串的前5个字符复制到formatter数组中。这里有一个潜在的问题是,如果user指向的字符串长度小于5,那么formatter中将不会以null结尾。

for (size_t i = 0; i < 5; i++) formatter[i] = tolower(formatter[i]);:将formatter数组中的前5个字符转换为小写字母,这样可以确保对大小写不敏感的比较。

# 重点2
printf(strncmp(formatter, "admin", 5) == 0 ? "\nWelcome admin!\n\n" : "\nWelcome user!\n\n");:根据比较formatter数组中的前5个字符与字符串"admin"的结果,选择性地打印不同的欢迎消息。如果相等,就打印"Welcome admin!",否则打印"Welcome user!"

我标出来两个重点都是要用到的 先看重点2  就是这题的答案 前5个字符如果等于admin  那就输出"Welcome admin!" 否则输出 "Welcome user"

所以这个题答案就是admin

问题四:name 有多大 0x20  这个上面定义就看到了 32 好像也行 他后面括号写 用 16进制或者10进制都可以

问题五:哪个函数没有被调用?

通过 我们看 main.c可以看到 under_construction()这个函数是全程没被调用的

问题六:哪个函数有可能造成缓冲区溢出?

这个需要去看C的相关资料 scanf()是有可能的 scanf_s()是安全的

问题7:输入 分别尝试30 39 40 个'A' 在输入第几个A的时候 会造成缓冲区溢出?

这个问题详细讲很难 虽然name的大小是32 但是 你输入到39 也没问题因为寄存器和栈的运行原理输入到39 是没问题的 到40 就会造成这个问题 后续我会单独出一个关于栈溢出的帖子

问题八:那个没被调用的函数under_construction()的地址是多少 用16进制表示出来

这个问题在于C 编译的原理 虽然每调用但是他是有地址的 只是没有call 这个地址的地方就是他存在但是没人用它 怎么看呢  可以用Windows可以用IDA Xdbg Linux直接

objdump -t main | grep under_construction

这个第一个就是他的地址 00000000004011d6

16进制就是 0x4011d6

最终获取到Flag 完结撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值