Pwn - Shellcode Summary
 Shellcode 也是十分核心的技术🤔
 
 
 Manual
 linux
 系统调用号表
 manual:
 pwntools.shellcraft
 [0] 目录
 
 编写 shellcode
 
 shellcode 板子
 现有工具
 板子
 
 shellcode
 restrictions & bypass (限制与绕过)
 
 Length restrictions
 (长度约束)
 seccomp 禁用
 alphanumeric
 shellcode (字母+数字构成)
 
 例题
 参考资料
 
 [1] 编写 shellcode
 [1-1] shellcode 板子
 
 exploit-db
 Shellcodes
 database for study cases(已停止更新)
 
 这个虽然停更了但是挺好用的,很适合找一些 length restrictions 的
 shellcode
 
 
 [1-2] 现有工具
 [1-2-1] Pwntools
 [1-2-1-1] shellcraft
 
 Manual
 速成...
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...
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}...
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_payload
 Pwntools -
 class fmtstr
 
 源码见上述链接或文章末尾的 Appendix
 
 fmtstr是一个类,我们只需要用其中的...
2023CCS-Acquirer 算法复杂性漏洞论文阅读笔记
 在做项目,记录一篇论文的阅读笔记
 
 
 摘要
 JAVA程序中的AC漏洞
 一. 引言
 
 一些AC漏洞例子 Decompression Bombs:
 https://en.wikipedia.org/wiki/Zip_bomb Bilion Laughs Attach:
 https://en.wikipedia.org/wiki/Billion_laughs_attack ReDoS:
 https://en.wikipedia.org/wiki/ReDoS Hash-table DoS Attack:
 https://fahrplan.events.ccc.de/congress/2011/Fahrplan/events/4680.en.html
 Zip Bomb:
 https://www.theregister.com/2001/07/23/dos_risk_from_zip/
 目前存在的一些问题 state...
comp - 2023HwsSDU专场CTF-wp
 HWS!PWN+RE+CRYPTO
 
 
 RE
 Re
 
 这个题本来打好逆向后的包准备写 wp
 的,结果重新加载的时候给覆盖了...就不配图了,函数顺序按照反汇编从上到下来分析的。
 
 拿到这个题看到有反调试,没 patch ,直接静态分析了
 - 1st important function
 第一个重要函数里有一个 flag{} 的判断,还有一个对于'-'的判断,可以猜测
 flag 的格式为 flag{uuid}
 接下来的一个函数有花指令,把 E8 改成 90
 以后重新反汇编,还是没有啥东西...为了不影响后面做题,还是回到一开始的地方把
 jz 改成了 jnz
 ,然后动调发现这个带花的函数基本没啥用,好像就调用了个__chkesp函数,但我不太清楚这是干啥的,就直接忽略了
 - 2nd important function
 第二个重要函数对我们输入的...
IOT - 某路由器mips固件解密脚本复现
 期中终于结束了😭复现一下b站Wker666的固件解密
 
 
 
 第一次分析IOT固件,不当之处请指出😭
 
 0xFF 前置知识
 
 多数情况下,路由器固件解包以后我们会拿到一个类似于 Linux
 文件系统的文件夹,这个文件系统会跑一些三环程序,而三环程序有非常多的系统调用,因此我们希望通过这些三环程序来提权。
 现在很多厂商会认为,自己的路由器能被解包太不安全了,因此他们会通过加密,但是每次更新换代时,后一代的固件包都是通过前一代的固件中的某个解密算法来解密的。因此,我们在挖掘
 IOT
 漏洞时,会先找到比较老的一些版本,分析解密算法,进而自己写出解密脚本来解密新一代的固件包。
 (建议看到0x01后再来阅读本条)我们在路由器的 web user
 上发送一个更新请求的时候,客户端会先发给服务器一个 http
 请求,然后被服务器的 httpd 二进制文件接收,httpd 会 fork
 一个新的进程来启用二进制文件 cgibin ,并把环境变量和 http 的请求发给 cgi
 ,...
Angr Learning Note
 迈向自动化的第二步——
 
 
 0xFF Reference
 1. Symbolic
 Execution Leaning Note (1) -- Basis
 2.
 2020年Angr-Api非官方介绍
 3.
 angr_ctf里介绍angr的ppt(讲的真的挺好的)
 0x00 Recall-Symbolic
 Execution
 笔者水平有限,如有错误请指出 ;-)
 我们先回顾一下什么是符号执行:
 我们在逆向一个程序、去找一个程序的漏洞时,我们会希望找到一个input,来触发我们需要的漏洞或者找到我们需要的flag,而符号执行的功能就是通过遍历程序所有可能的“状态(State)”,找到我们需要的State,进而通过约束求解器,求解出我们最后需要的input
 宏观上看,符号执行可以分为三步
 1. 注入符号 2. 分支 3. 执行分支
 我们用一个简单的函数来分别看一下这三步是什么 123456789// demo funcLine1  void check_func(char* passwd)Line2  {Line3     ...
comp - 2023香山杯Pwn & RE-wp
 香山杯!Pwn ak + RE 差几分钟就写完xxTEA啦😭
 
 
 RE
 url从哪儿来
 
 断点下在这,知道他会在buffer指向的地址生成一个文件,让程序跑完,能看到这个文件
 
 ida打开,因为它问url是什么,所以我们直接看szurl 
 结果这个不是flag,看到url问我们是如何解密的,所以我们回到上面那一堆数据里面,我们看一下v13
  flag就在这...






