Post List

5.6k words 5 mins.

# 思路 在申请 memery 的时候存在整数溢出,程序虽然会检测到,但是允许我们进行一次的整数溢出申请,这样实际的 memery 的 count 很大,但是 chunk 的大小远小于这个值,造成了堆块的越界读写。 当我们申请一个很大的堆块,会在 libc 附近分配,配合越界写,我们就可以修改 tls_dtor_list, 以及 secret 的值。 chunk 的释放冲 i 性能申请没有对其进行清空,所以,我们申请出一个 largebin 范围的 chunk,然后释放,这样再次将其申请出来的时候,在 memery [1] 会存有一个指针,就可以知道 libc 的及地址了。将这个数据存在这个...
24k words 22 mins.

# glibc 2.35 ubuntu3 下的利用手法。 原本我们以为 2.35 的时代不会来的这么快,但是最近 DS360ctf,以及强网杯几道题目的出现让 glibc 的 pwn 生存条件急剧下降。 首先我们谈谈为什么很多师傅都人为 2.35 的堆 pwn 是一个寒冬: # 现状: 之所以这样讲,一部分原因在于由于高版本的 glibc 的安全特性,封锁掉了很多的后门,特别是几个重要的 hook...
5k words 5 mins.

# adworld_mobile—— 基础的 android # 这是一个新的系列,这里记录的是我自己在学习安卓逆向过程中的刷题记录。 # 首先我们来看看项目的注册声明 # Mainfest.xml 1234567891011121314151617181920<?xml version="1.0" encoding="UTF-8"?><manifest android:versionCode="1"...
4.1k words 4 mins.

# TASK: ​ 编写 IDA 脚本,不依赖版本号的条件下,利用二进制特征,在 openssl 的 libssl.so 中检查 CVE-2015-0207 和 CVE-2014-3507 是否被修补 要求:idc 和 python 两个版本都写一下,这个就是把 libssl.so 拖进 ida,然后运行你的脚本,然后弹窗或者输出有没有那两个 cve 存在 参考链接:https://www.hex-rays.com/products/ida/support/idadoc/162.shtml 按字母顺序排列的 IDC 函数列表 不依赖版本号,就是使用 ida 通用的函数, #...
20k words 18 mins.

# CISCN_2022 planecoode 这个题目算是一个 llvm 的题目,对于我们输入的 code 进行解析操作,但是逆向的工程量很大,设计了很多 if,else 的模块,对应众多的操作。而且并不是说常规 vm 那种可以解析出常见汇编指令格式的操作码。而且使用了很多数据的转换操作,比如 BYTE1~BYTE5,HIBYTE,LOBYTE 等等,这些东西是我们必须回的东西。 然后经过我长时间的解析,大概猜出来了流程,我们指定最开始的 xy, 这是边界限制,申请出来 8*x*y 字节的空间,然后对应的 (x,y) 的位置是一个 code,code 为 8 字节 64...
4.8k words 4 mins.

# CISCN_2022 popcalc 一道 vm 的题目。一开始出题人就搞活,之前也遇到过几次,这次也是稍微学到了。 12345678910111213141516171819202122232425262728293031__int64 __fastcall main(int a1, char **a2, char **a3){ unsigned int v3; // eax int i; // [rsp+Ch] [rbp-64h] int v6; // [rsp+10h] [rbp-60h] void **dest; // [rsp+18h] [rbp-58h]...
4.8k words 4 mins.

# ciscn2022_syscall 程序的漏洞点在于 free 后不会清空 size 数组对应的数据,而且在同一个该位置再次申请一个 chunk 的时候, 123456789101112131415161718192021222324252627282930313233else if ( choice == 17 ) // malloc { idx = (syscall)(38929LL, sub_E1B, 0LL, 0LL); if ( idx < 0 ) goto LABEL_32; if ( idx > 4 ) goto...