2021 ctfshow 月饼杯 pwn Moon_note

在这里插入图片描述
保护全开,没给libc。
没给libc真可恶。

菜单
在这里插入图片描述

create
在这里插入图片描述设计的很有意思,申请的chunk实现了类似unsorted bin 的一个hash表。
chunk的结构是前16个字节是title,中间16个字节是链表,后八个字节是一会write的时候写内容的chunk地址。

write
在这里插入图片描述就是申请一个chunk,写东西,地址放到上面create里面说的那个玩意里面。
但是只能写一次。

show
在这里插入图片描述正常show

delete
在这里插入图片描述free掉chunk,但是漏洞就在free掉那个wirte的chunk之后没有清理指针,造成uaf。那个指针可以重复使用,多次释放,可以double free。

思路是啥
首先我们需要知道libc的版本。
先尝试一次double free,看报不报错,或者报错类型,来看看libc版本是2.23 2.27还是2.29及以上。

因为2.23的话就会直接报double free。
2.29及以上会报tcache dup 2.

最后double free啥都不报,确定了2.27的版本,具体2。27那个版本一会试一试就清楚了。

再说解题,我们现在有double free,首要任务是泄露libc,但是我们的chunk只能申请到0x60大小,所以首先想到的是攻击tcache struct。所以首先就通过double free泄露heap地址,然后污染tcache struct,释放掉它,得到libc地址。

得到之后再怎么利用,常规来讲我们只需要利用double free去攻击free_hook就好啦。
但是因为tcache被污染了,我们只能提前申请好大小合适的chunk,然后free进入tcache,或者我这里利用的方法是tcache中有一个残留的指针,只需要提前留几个0x30的chunk,方便申请,就可以直接利用残留的指针攻击free_hook。

exp

from pwn import*

context.log_level = "debug"
context.terminal = ['tmux', 'splitw', '-h']


#r = process("./moon")
r = remote("pwn.challenge.ctf.show", 28098)

elf = ELF("./moon")
#libc = ELF("/home/wuangwuang/glibc-all-in-one-master/glibc-all-in-one-master/libs/2.27-3ubuntu1.2_amd64/libc.so.6")
libc = ELF("./64/libc-2.27.so")

def
<think>好的,我现在需要帮助用户解决关于CTFShow平台上PWN相关的Linux环境配置和使用方法的问题。首先,我需要确认用户的具体需求是什么。他们可能是在准备CTF比赛,需要配置一个适合PWN挑战的Linux环境,可能涉及到调试工具、禁用地址随机化(ASLR)、内核设置等方面。 根据用户提供的引用内容,有三个引用提到了修改ASLR的方法,以及关闭内核地址随机化(nokaslr)的启动参数。还有安装内核符号表的步骤。这些都是配置PWN环境时的常见操作。因此,我需要将这些信息整理成清晰的步骤,并确保用户能够按照步骤操作。 首先,用户可能需要安装基本的开发工具,比如gcc、gdb、make等,这些都是编译和调试PWN题目的基础。接下来是禁用ASLR,这在PWN题目中很常见,因为地址随机化会增加利用难度,禁用后可以更稳定地进行漏洞利用。用户提供的引用[1]和[2]都提到了通过修改/proc/sys/kernel/randomize_va_space来关闭ASLR,这里需要提醒用户需要root权限,并且可能需要永久设置。 然后是配置调试环境,特别是GDB的插件,比如pwndbg、peda或gef,这些工具能极大提高调试效率。用户可能还需要使用checksec来检查二进制文件的保护机制,这可以通过安装pwntools来获得。 接下来,用户的问题可能涉及到内核地址随机化(KASLR),这在引用[3]中提到了在启动QEMU时添加nokaslr参数来关闭。这里需要说明如何在启动脚本中设置这个参数,以及可能需要重新编译内核或使用特定启动选项的情况。 此外,用户可能需要配置QEMU环境,特别是在使用虚拟机进行漏洞利用时,需要正确设置内核镜像和初始文件系统,如引用[3]中的例子。同时,安装内核符号表对于调试内核相关的题目可能很重要,需要指导用户如何手动安装。 最后,用户可能需要安装一些常用的PWN工具,如pwntools、ROPgadget等,这些都是进行漏洞利用的必备工具。在整理这些步骤时,需要确保每个步骤都清晰,并且指出可能的注意事项,比如权限问题或依赖安装。 生成的相关问题需要覆盖用户可能遇到的后续疑问,比如如何验证ASLR是否关闭,如何调试内核驱动,如何处理依赖缺失,以及如何优化调试体验等。这些问题可以帮助用户进一步解决实际配置中可能遇到的问题。 现在需要将上述思考整理成一个结构化的回答,确保每个步骤都有对应的说明和引用来源。同时,保持语言简洁明了,适合中文用户理解。可能还需要检查是否有遗漏的配置步骤,比如Docker环境的使用或其他特定于CTFShow平台的设置,但根据现有引用内容,可能不需要涉及这些。如果有不确定的地方,可能需要提示用户参考更多资料或官方文档。</think>### CTFShow PWN Linux环境配置指南 #### 1. 基础环境准备 - **安装开发工具**:使用apt安装编译调试工具链 ```bash sudo apt update && sudo apt install -y gcc gdb make python3-pip ``` - **配置ASLR关闭**(关键配置): ```bash echo 0 > /proc/sys/kernel/randomize_va_space # 临时关闭[^1][^2] # 永久关闭需在/etc/sysctl.conf添加: # kernel.randomize_va_space = 0 ``` #### 2. 调试环境配置 - **安装GDB插件**(推荐pwndbg): ```bash git clone https://github.com/pwndbg/pwndbg cd pwndbg && ./setup.sh ``` - **安装pwntools工具包**: ```bash pip3 install pwntools ``` #### 3. 内核环境配置(针对内核题目) - **关闭KASLR**:在QEMU启动参数添加`nokaslr`标志 ```bash -append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 nokaslr"[^3] ``` - **内核符号表安装**: ```bash gdb -ex "add-symbol-file /path/to/vmlinux" -ex "target remote :1234" ``` #### 4. 工具链配置 - **安装ROPgadget**: ```bash pip3 install ROPgadget ``` - **配置checksec**(已包含在pwntools中): ```bash checksec --file=target_bin ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值