墨锋阁 Code & Conquer

DASCTF 十月赛 1!5! WriteUp

思路 列出可用集,根据可用集逐步构造出全指令集 根据可用集逐步编码shellcode 看了别的师傅有很巧妙的做法:不直接调shell,而是先手写调read,然后输入真正的shellcode,绕过检测。 我这里主要借机学习一下shellcode编码,就按官方思路复现了。 指令集扩展 shellcode

墨锋 墨锋 Published on 2022-11-06

shellcode编码

shellcode原理 系统调用execve("/bin/sh", 0, 0) 具体可以参考系统调用表、64位linux中断向量表 64位 寄存器: rax = 0x3b rdi = "/bin/sh" rsi = 0 rdx = 0 一段简单的 shellcode: mov rax, 0x6873

墨锋 墨锋 Published on 2022-11-01

DASCTF X CBCTF 2022 九月挑战赛 ez_note WriteUp

这题拖了挺久的,因为一些知识点还不是很明白。 分析过程 checksec 保护全开 [*] '/mnt/e/sec/dasctf/ez_note/pwn' Arch: amd64-64-little RELRO: Full RELRO Stack: Can

墨锋 墨锋 Published on 2022-10-17

切割堆块

在glibc源码中搜索split可以找到堆块切割相关源码 在malloc.c的_int_malloc函数中发生堆块切割的情形如下: 遍历unsorted chunks时 请求满足small request last remainder 堆块是唯一堆块,且切割后剩下的仍然满足最小堆块大小 从large

墨锋 墨锋 Published on 2022-10-17

Pwn安全措施

NX: No Exection gcc -z execstack Canary: defeat bof, 在 return 前做 canary check - security_init() => fs:0x28 (stack guard) - canary end with

墨锋 墨锋 Published on 2022-10-02

函数调用约定

为了能够调用函数,需要有一种公认的方式来传递参数。 如果程序是完全独立的二进制文件,编译器可以自由决定调用约定。 然而在现实中,会使用共享库(例如 libc)以便公共代码可以只存储一次并动态链接到需要它的程序,从而减少程序大小。 在 Linux 二进制文件中,实际上只有两种常用的调用约定:cdecl

墨锋 墨锋 Published on 2022-10-02

DASCTF X CBCTF 2022 九月挑战赛 Appetizer WriteUp

我的第一道沙盒题(竟然不能get shell!!!),主要考察栈帧分配(构造rop链)。顺便学了下pwntools rop的接口,还是挺香的。 我喜欢轮子,exp里会用比较多的轮子,建议看最终exp。 分析过程 栈帧复用 func里面写入的栈帧在check里面复用,通过检测。 io.send

墨锋 墨锋 Published on 2022-09-26

格式化字符串任意地址写入栈上数据

利用限制 存在格式化字符串漏洞 每个格式化字符串只能实现一次 需要等待int长度空格的输出时间 利用原理 *可以通过参数指定格式化字符串的宽度,比如: int width = 10; char ch = 'a'; printf("|%*c|", width, ch); // output:|

墨锋 墨锋 Published on 2022-09-25

DASCTF X CBCTF 2022九月挑战赛 Cyberprinter WriteUp

分析过程 观察栈结构 这题的关键(对我来说)就是利用栈上残留的数据。平时练的不多,没有这个习惯,导致泄露和格式化字符串利用都遇上了麻烦。 vuln函数里的栈结构如下: 00:0000│ rsp 0x7fffffffdfe0 ◂— 0x0 ... ↓ 2 skipped 03:0018│

墨锋 墨锋 Published on 2022-09-24

Python解析libc未导出符号

背景 glibc里面有很多未导出的符号,比如一些数据变量、内部函数等等。漏洞利用时有时需要对这些符号进行定位,由于这些符号与libc偏移固定,一般的方式是通过gdb算出这些偏移。但这种方式的弊端在于不能可靠地解析不同glibc下的符号偏移,每次切换不同的libc都需要重新定位。 本文以exit ho

墨锋 墨锋 Published on 2022-09-22
Previous Next