BUUCTF PWN wp rip

第一步  先进去Xubuntu,打开终端。输入checksec指令,可以查看文件类型和linux下的ELF二进制文件的保护机制,本题是64位的,拖入ida

解释一下本题的保护机制

  1. Arch: amd64-64-little
    • 表示该二进制文件是为64位的AMD或Intel架构(x86-64)编译的,并使用小端字节序。
  2. RELRO: Partial RELRO
    • RELRO(Relocation Read-Only)是一种防止特定类型的攻击的安全技术。Partial RELRO表示部分的重定位表(GOT)被设置为只读,但并不是全部,这提供了一定级别的保护,但不如Full RELRO安全。
  3. Stack: No canary found
    • 栈保护中的“canary”是一种防止栈溢出攻击的技术。"No canary found"意味着这种保护机制没有被启用,使得程序更容易受到栈溢出攻击。
  4. NX: NX disabled
    • NX(No-Execute)是一种内存保护技术,用于标记某些内存区域为不可执行,防止执行非代码区域的数据。"NX disabled"表示这项保护被禁用,攻击者可能将恶意代码注入到内存中并执行。
  5. PIE: No PIE (0x400000)
    • PIE(Position Independent Executable)允许程序的执行代码在内存中随机位置加载,增加了攻击者成功利用程序漏洞的难度。"No PIE"表示程序在每次运行时都会加载到相同的内存地址,这使得某些类型的攻击更容易实施。
  6. RWX: Has RWX segments
    • RWX表示内存段可以同时具有读、写和执行权限。通常,为了安全,不建议将内存段设置为RWX,因为这允许攻击者写入并执行恶意代码。

总的来说,这个二进制文件的保护机制较弱,存在多个安全风险,特别是因为没有启用栈保护、NXPIE,同时存在RWX段,使得它容易受到多种类型的攻击。

第二步   string窗口找到/bin/sh

system("/bin/sh")在fun()函数里,不在main函数里,所以这里就有了工作: 想办法触发fun()

第三步    我们进入主函数界面

  • gets函数原型只接受一个参数,即目标字符串的指针。这里的额外参数(__int64)argv是多余的,且可能导致编译错误。
  • gets是一个不安全的函数,因为它不检查目标缓冲区的大小,容易造成缓冲区溢出。这是一个典型的安全漏洞。

点进去这个数组

r对应的字节数为8,及ebp的的大小;两个s之间从1到F这个距离是gets函数的范围大小,为F。(在main函数中,双击s,s占据了15个db,再加上"s"[saved registers]的8个db,一共23个db.)因为是在十六进制下,所以上面所说的gets函数覆盖范围大小为0x8+0xF。

fun()地址(View->Open subviews->Function calls 显示出函数调用窗口,如下:

但我们要找实际"/bin/sh"指令执行的地址为0x40118A

第四步   编写脚本

第五步   运行

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无 双

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值