Skip to main content

拾枝杂谈 03

· 8 min read
MuelNova
Pwner who wants to write codes.

看到这个标题,你可能疑惑:拾枝杂谈是什么,它不是原神里的东西么?怎么就 03 了,前两篇去哪里了?

我的答案是,我也不知道。今天给学弟学妹翻我 21 年某个课的笔记的时候,意外的从我的硬盘里找到了这么一份并不完整的旧文章的备份。

生死之间

· 11 min read
MuelNova
Pwner who wants to write codes.

是的,这个标题取得大了一点。这篇文章源于我今日和我妈妈视频通话后,我的一些所思所感。

或许会被评价为一个冷血的人,但无可奈何的,这就是我。

浅忆我的本科三年

· 41 min read
MuelNova
Pwner who wants to write codes.

本文作于 2024/09/24。

目视初定之日程,列有三端:“赛题复现”其一也,“科研探索”其二也,“项目开发”其三也。三者并列,然心绪纷扰,犹豫不决,竟莫能定其所从。

苦思冥想,久矣未决。忽思推免之事,忆本科三载有余,吾之心路漫漫,乃定心凝神,正襟危坐,欲将其尽书于博客之上,以飨同好,亦以自醒。

「Pwn」粗浅分析 House Of Muney

· 12 min read
MuelNova
Pwner who wants to write codes.

前几天 ZBR 发了这个 repo,我寻思没听过,看着攻击能力还挺强的,于是浅浅分析一下。

简单来说,这个 house 能做这样一件事:在没有泄露的情况下绕过 ASLR 实现代码执行。

而它的利用条件如下:

  • Partial RELRO / No RELRO —— 它需要修改 .dynsym 去修改 dlresolve 结果
  • 可以分配较大的堆 —— 要使其由 MMAP 分配
  • 能够改写这个堆的 prev_size 和 size 字段,使得 IS_MMAPED 位被改写

本文将基于 2.31 的环境,复现 Docker 可以使用下面的 Dockerfile:

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND noninteractive

# Update
RUN apt-get update -y && apt-get install socat -y gdb vim tmux python3 python3-pip

# General things needed for pwntools and pwndbg to run
RUN apt-get install git build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev patchelf python3-dev -y

RUN pip3 install pwn

# Install pwndbg
RUN git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh && cd ../

RUN echo "set auto-load safe-path /" >> /root/.gdbinit

# Challenge files to ADD
RUN git clone https://github.com/mdulin2/house-of-muney

# Fixes the loader and recompiles the binary for us :)
RUN cd house-of-muney && ./compile.sh

Off-by-null 的利用方法

· 20 min read
MuelNova
Pwner who wants to write codes.

不知道为什么以前都不把这些记录下来,然后每次做到的时候都会忘了从零开始学。

本文将主要介绍 2.23 和 2.31 版本下的利用,2.27 和 2.23 差不多,多填一个 tcache 即可。2.29 和 2.31 也差不多,多了一个 key。

因此,阅读本文你需要对 Heap 的分配有一定的基础,本文将更多涉及方法而非原理。

本文涉及的挑战主要有以下几个特征

  • 存在 off-by-null
  • 分配次数几乎不受限
  • 分配大小几乎不受限或是能分配 largebin 范围
  • 不存在 edit 函数或只能 edit 一次
  • 只能 show 一次(按理来说不能 show 也可以,但是堆块分配太麻烦了,做这种题不如睡觉)