[pwnable.tw] Silver Bullet
1 程序分析32 位程序,没 Canary,没开 PIE,libc 版本依旧是 2.23 12345678910(pwn) secreu@Vanilla:~/code/pwnable/silver_bullet$ checksec --file=silver_bullet[*] '/home/secreu/code/pwnable/silver_bullet/silver_bullet' Arch: i386-32-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8047000) Stripped: No(pwn) secreu@Vanilla:~/code/pwnable/silver_bullet$ strings libc_32.so.6 | grep "Ubuntu GLIBC"GNU C Library (Ubuntu GL...
[pwnable.tw] hacknote
1 程序分析32位,没开 PIE,给的 libc 版本为 2.23 123456789(pwn) secreu@Vanilla:~/code/pwnable/hacknote$ checksec --file=hacknote[*] '/home/secreu/code/pwnable/hacknote/hacknote' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8046000)(pwn) secreu@Vanilla:~/code/pwnable/hacknote$ strings libc_32.so.6 | grep "Ubuntu GLIBC"GNU C Library (Ubuntu GLIBC 2.23-0ubuntu5) stable release version 2.23, by Rolan...
[pwnable.tw] dubblesort
1 程序分析32位,保护全开 123456789(pwn) secreu@Vanilla:~/code/pwnable/dubblesort$ checksec --file=dubblesort[*] '/home/secreu/code/pwnable/dubblesort/dubblesort' Arch: i386-32-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled RUNPATH: b'/home/secreu/code/pwnable/dubblesort' FORTIFY: Enabled 题目提供的 libc 是 32 位 2.23 版本,要用 patchelf 替换同样版本解释器 123456(pwn) secreu@Vanilla:~/code/pwnable/dubblesort$ strings...
[pwnable.tw] 3x17
1 程序分析只开了 NX,但是其实也开了 Canary 1234567(pwn) secreu@Vanilla:~/code/pwnable/3x17$ checksec --file=3x17[*] '/home/secreu/code/pwnable/3x17/3x17' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) 初步运行一下是让我们输入一个 addr,再输入 data 123(pwn) secreu@Vanilla:~/code/pwnable/3x17$ ./3x17 addr:123data:123 IDA 进去是 start 函数,因为去除了符号表,读起来不太方便,但是主要流程就是调用 __libc_start_main 执行 main 123456789101112131415161718...
[pwnable.tw] calc
1 程序分析i386 架构,开了 Canary 和 NX 12345678(pwn) secreu@Vanilla:~/code/pwnable/calc$ checksec --file=calc[*] '/home/secreu/code/pwnable/calc/calc' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No 1.1 程序流程main 函数做了一些设置,关键内容应该在 calc 里面 123456789int __cdecl main(int argc, const char **argv, const char **envp){ ssignal(14, timeout); alarm(60); puts("=== Welcome to ...
[pwnable.tw] CVE-2018-1160
1 基本信息1.1 题目信息根据题目可知这是 CVE-2018-1160 的漏洞复现及利用,提供了 binary、配置文件以及 2 个库 12345678(base) secreu@Vanilla:~/netatalk$ tree.├── afp.conf├── afpd├── libatalk.so.18└── libc-2.27.so0 directories, 4 files libc 版本是 2.27 12345678910(pwn) secreu@Vanilla:~/netatalk$ ./libc-2.27.soGNU C Library (Ubuntu GLIBC 2.27-3ubuntu1) stable release version 2.27.Copyright (C) 2018 Free Software Foundation, Inc.This is free software; see the source for copying conditions.There is NO warranty; not even for MERCHANTABILITY...
[pwnable.tw] orw
1 程序分析i386 架构,开了 Canary,但是无关紧要,程序逻辑非常简单,就是读一段 shellcode 并运行 12345678int __cdecl main(int argc, const char **argv, const char **envp){ orw_seccomp(); printf("Give my your shellcode:"); read(0, &shellcode, 0xC8u); ((void (*)(void))shellcode)(); return 0;} 但是设置了 seccomp 沙箱,限制了系统调用 123456789101112131415unsigned int orw_seccomp(){ __int16 v1; // [esp+4h] [ebp-84h] BYREF _BYTE *v2; // [esp+8h] [ebp-80h] _BYTE v3[96]; // [esp+Ch] [ebp-7Ch] BYREF unsigned int v4...
[pwnable.tw] start
1 程序分析i386 架构,没有开任何保护,直接看汇编代码,包括一个 _start 和一个 _exit,_start 执行完后返回到 _exit 123456789101112131415161718192021222324.text:08048060 _start proc near ; DATA XREF: LOAD:08048018↑o.text:08048060 push esp.text:08048061 push offset _exit.text:08048066 xor eax, eax.text:08048068 xor ebx, ebx.text:0804806A xor ecx, ecx.text:0804806C xor edx, edx.text:0804806E ...
[pwn.college] Dynamic Allocator Misuse
pwn.college 中的 Dynamic Allocator Misuse 堆漏洞利用思路小结 level 1UAF level 2UAFread_flag 申请的堆块大小做了一个 rand 处理,但是并未设置随机种子,所以每次运行还是固定的值 level 3UAFread_flag 申请 2 次堆块,但我们同时也能访问多个堆块 level 4Double Free思考 tcache 在 free 时会做什么检查 level 5read_flag 会将申请的堆块首字节置 0,puts_flag 检查其是否为 0可以利用 free 设置 next 指针将其修改 level 6未开启 PIE,.bss 段上存放了 8 字节 secret,需要读出来作为 send_flag 的输入可以修改 next 指针从而 malloc 得到目标地址堆块 level 7和 level 6 相似,只是 8 字节 secret 变成了 16 字节注意 malloc 会将 key 清 0 即可 level 8secret 地址最低字节为 \x0A,即 \n,通过 scanf 发送给程序会被截断所以...