Pwn - Heap Exploit Summary
总结一下 Heap 的相关内容,便于后续调用 Github: ptmalloc 源码(只有 malloc 部分) source code compilation && all libc debs [0] 目录 Patchelf的使用方式 详解 ‘申请与释放 chunk’ chunk Extend and Overlapping Use After Free Double Free Unlink Series of Bin 7-1 Tcachebin 7-2 Fastbin 7-3 Unsortedbin 7-4 Largebin Attack Series of House 8-1 House of Orange 8-2 House of Force 8-3 House of botcake 8-4 House of banana 8-5 House of pig [1] Patchelf的使用方式 在本地调试堆题时,不同的 libc 版本会有不同的 heap 管理器来管理 heap,因此我们需要将本地的 elf 文件的链接部分 patch...
Math Knowledge Summary
总结一下计算机中的数学相关内容,便于后续调用 [0] 目录 数学算法 [模乘] [1-1-1 蒙哥马利算法] 密码学 Stream Cipher 1-1 RC4 Block Cipher 2-1 tea/xtea/xxtea [1] MATH[1-1] 模乘[1-1-1] 蒙哥马利算法蒙哥马利算法能够提高类似模幂运算的速度而实现的,主要是因为蒙哥马利算法巧妙地避免了大量模运算(除法),极大地降低了运算时间,下面介绍如何减少x*y mod N的模运算数目。 首先,蒙哥马利算法引入了REDC函数,该函数以大数T,模数N,模数N的逆元的负数N’和整数R(如果N为素数,R一般选取$2^{n_bit}$,这样就可以在整除前提下用移位运算代替除法运算,也就是将下面代码第三行的整除运算换成移位运算)作为输入,在不使用模运算的情况下输出$TR^{-1} mod N$。该函数减少了模运算的数目,同时将T的蒙哥马利形式恢复成了普通形式。该函数的低效版python实现如下: 123456def REDC(R, N, N_inverse, T): m =...
Rust - learning cheat sheet
DIVE INTO RUST LAKE [0] 前言[1] 数据类型Rust 的数值类型和运算跟其他语言较为相似,但是实际上,除了语法上的不同之外,还是存在一些差异点: Rust 拥有相当多的数值类型. 因此你需要熟悉这些类型所占用的字节数,这样就知道该类型允许的大小范围以及你选择的类型是否能表达负数 类型转换必须是显式的. Rust 永远也不会偷偷把你的 16bit 整数转换成 32bit 整数 Rust 的数值上可以使用方法. 例如你可以用以下方法来将 13.14 取整:13.14_f32.round(),在这里我们使用了类型后缀,因为编译器需要知道 13.14 的具体类型 [1-1] 整数类型与 C++ 几乎没有差别,只是溢出在 debug 模式下会默认抛出错误,在 release 模式下会默认正常。开发者可以通过标准库里的一些函数来强制定义函数行为,具体请见[0xFF]部分的“处理溢出” [1-2]...
Pwn - Format String Summary
总结一下格式化字符串漏洞,便于后续调用 原理 & 工具原理 本质是利用 printf(string) 任意地址读写 记录一下常用的格式 123456fmt : 标准作用 || 常用方式——————————————————————————————————————————————————————————————%p : 输出栈上的内容 | (读) 找偏移\pie_base\canary%s : 输出地址指向的内容 || (读) 泄露libc_base%hhn : 修改地址指向的byte | (写) 任意地址写%hn/%n : 修改地址指向的2/4bytes | (写) 任意地址写 工具: Pwntools - fmtstr_payloadPwntools - class fmtstr 源码见上述链接或文章末尾的 Appendix fmtstr是一个类,我们只需要用其中的 fmtstr_payload 来构造我们的...
2023CCS-Acquirer 算法复杂性漏洞论文阅读笔记
在做项目,记录一篇论文的阅读笔记 摘要JAVA程序中的AC漏洞 一. 引言 一些AC漏洞例子Decompression Bombs: https://en.wikipedia.org/wiki/Zip_bombBilion Laughs Attach: https://en.wikipedia.org/wiki/Billion_laughs_attackReDoS: https://en.wikipedia.org/wiki/ReDoSHash-table DoS Attack: https://fahrplan.events.ccc.de/congress/2011/Fahrplan/events/4680.en.htmlZip Bomb: https://www.theregister.com/2001/07/23/dos_risk_from_zip/ 目前存在的一些问题state...
comp - 2023HwsSDU专场CTF-wp
HWS!PWN+RE+CRYPTO RERe 这个题本来打好逆向后的包准备写 wp 的,结果重新加载的时候给覆盖了…就不配图了,函数顺序按照反汇编从上到下来分析的。 拿到这个题看到有反调试,没 patch ,直接静态分析了 - 1st important function第一个重要函数里有一个 flag{} 的判断,还有一个对于’-‘的判断,可以猜测 flag 的格式为 flag{uuid} 接下来的一个函数有花指令,把 E8 改成 90 以后重新反汇编,还是没有啥东西…为了不影响后面做题,还是回到一开始的地方把 jz 改成了 jnz ,然后动调发现这个带花的函数基本没啥用,好像就调用了个__chkesp函数,但我不太清楚这是干啥的,就直接忽略了 - 2nd important function第二个重要函数对我们输入的 flag...
IOT - 某路由器mips固件解密脚本复现
期中终于结束了😭复现一下b站Wker666的固件解密 第一次分析IOT固件,不当之处请指出😭 0xFF 前置知识 多数情况下,路由器固件解包以后我们会拿到一个类似于 Linux 文件系统的文件夹,这个文件系统会跑一些三环程序,而三环程序有非常多的系统调用,因此我们希望通过这些三环程序来提权。 现在很多厂商会认为,自己的路由器能被解包太不安全了,因此他们会通过加密,但是每次更新换代时,后一代的固件包都是通过前一代的固件中的某个解密算法来解密的。因此,我们在挖掘 IOT 漏洞时,会先找到比较老的一些版本,分析解密算法,进而自己写出解密脚本来解密新一代的固件包。 (建议看到0x01后再来阅读本条)我们在路由器的 web user 上发送一个更新请求的时候,客户端会先发给服务器一个 http 请求,然后被服务器的 httpd 二进制文件接收,httpd 会 fork 一个新的进程来启用二进制文件 cgibin ,并把环境变量和 http 的请求发给 cgi , cgi 完成处理以后,把内容输出到标准输出流之类的东西,并返回客户 IDA 反编译 Mips...
Angr Learning Note
迈向自动化的第二步—— 0xFF Reference1. Symbolic Execution Leaning Note (1) — Basis2. 2020年Angr-Api非官方介绍3. angr_ctf里介绍angr的ppt(讲的真的挺好的) 0x00 Recall-Symbolic Execution笔者水平有限,如有错误请指出 ;-) 我们先回顾一下什么是符号执行:我们在逆向一个程序、去找一个程序的漏洞时,我们会希望找到一个input,来触发我们需要的漏洞或者找到我们需要的flag,而符号执行的功能就是通过遍历程序所有可能的“状态(State)”,找到我们需要的State,进而通过约束求解器,求解出我们最后需要的input 宏观上看,符号执行可以分为三步 注入符号 分支 执行分支 我们用一个简单的函数来分别看一下这三步是什么123456789// demo funcLine1 void check_func(char* passwd)Line2 {Line3 if(passwd ==...
comp - 2023香山杯Pwn & RE-wp
香山杯!Pwn ak + RE 差几分钟就写完xxTEA啦😭 REurl从哪儿来 断点下在这,知道他会在buffer指向的地址生成一个文件,让程序跑完,能看到这个文件ida打开,因为它问url是什么,所以我们直接看szurl结果这个不是flag,看到url问我们是如何解密的,所以我们回到上面那一堆数据里面,我们看一下v13flag就在这 PwnMove栈迁移到bss段的skdd,泄露puts,libcsearcher查到puts的libc是2.27,glibc-all-in-one下一个出来,然后返回main函数在skdd里写system(“/bin/sh”),本来是想再栈迁移一遍,结果发现直接do_system了,稍微修改了一下就getshell了12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273# exp头...
Symbolic Execution Leaning Note (1) -- Basis
迈向自动化的第一步—— 0x00 基本模型 概述 1234561 void sum(a,b){2 int x = a;3 int y = b;4 int z = x + y;5 return z;6 } 调用$sum(1,2)$,学过C语言的都知道会发生什么事情但如果我调用$sum(a1,a2)$,并且我在这之前并未声明a1,a2呢?先不要用C语言的思路来考虑了,我们称这种情况为符号执行(Symbolic Execution),具体会发生什么我们接着往下看 基本思想 使用符号变量代替具体值作为程序或函数的参数,并模拟执行程序中的指令,各指令的操作都基于符号变量进行,其中操作数的值由符号和常量组成的表达式来表示 符号变量是什么? 读者可以将符号执行视为程序具体执行的自然扩展,符号变量使得程序执行变得不确定,当我们给一系列符号赋一个确定的值时,符号执行就成为了程序具体执行(i.e....