前言:大一快结束了,一直听说过 phppwn 但是没有学,最近其实挺累的,打了许多比赛结果被 AI 踹成路边一条,比赛题目也是有很多自己没有见过的,还是沉下心一点点学习吧。 一开始学 phppwn 有点迷,还好之前有一定的 web 基础,做过 web 的 php 代码审计的一类题目。phppwn 的 gdb 调试和普通 pwn 不太一样,需要利用 dockerfile 起一个 docker 环境,调试的时候也需要有对应的函数。 好吧还是想吐槽一下,最开始的时候利用 off-by-null 一直有点懵,再想为什么要重复申请这个堆块,后来看了很久才发现 off-by-null 修改了指针地址。之
前言:没有怎么接触过 KernelPWN 但是又不知道怎么学,在网上偶然发现有这么个学习内核基础利用的网站 也就十二道题目,并且利用链并不长,决定学习一下。其实也不想一上来就学习太难的东西打消自己的积极性,另外没有一个好的基础直接学攻击手法利用链什么的总觉得有点空中楼阁,经不起考验。<指的我自己~~~> 从一开始会非常详细,往后逐渐了解之后会着重点记录 \[^_^]\ 下载 pwn.college 附件:pwn.college 的 kernel 基础关卡在:https://pwn.college/system-security/kernel-security/ 首先在 Us
前言:差不多一个多月前接触了 kernelpwn,学习了一道 UAF 就没有下文了。话说这段时间还真是懈怠呢。 因此决定从今天开始重新拾起 kernelpwn(其实倒不如说重新认识) ^_^/// 阅读网上文章发现 ret2usr 的利用手法已经过时了,不过这应当是最基础的一类内核栈手法了吧,还是要学的。 由于本人基础薄弱,因此在文章中写了许多重要的不重要的,有用的没有用的东西,望见谅………… ret2usrret2usr(Return-to-user,返回用户态)是一种经典的内核(Kernel)漏洞利用手法。 简单来说,当操作系统内核空间存在函数指针覆盖或栈
这道题目的逻辑并不算难,一道新型编译器也算是拓展眼界了。wp 写得会比较长,实际上并没有那么难。 不过也有点难受,就是你要新认识一个编译器,并编写出相应的代码进行篡改攻击 emmmm…… 本质还是利用指针篡改 got 表 serve.py1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#!/usr/bin/env python3import osimport r
一道 protobuf 序列化的题目,打 setcontext 的方式也比较熟悉,或许打 environ 也可以,没尝试过。 程序分析:main 进到 main 函数,找到该程序反序列化的入口 sub_192D,该函数主要的作用是为了把读进来的原始字节按 protobuf 消息 pwn 解析成一个对象,进去看一看: sub_192D1234char *__fastcall sub_192D(_UNKNOWN **a1, unsigned __int64 n5, unsigned __int8 *s){ return sub_5090((__int64)&qword_
程序分析:main函数比较多,直接搜索 main 函数:目前看起来是比较正常的菜单题 12345678910111213141516171819202122232425262728293031323334int __fastcall main(int argc, const char **argv, const char **envp){ int v3; // edx int v4; // ecx int v5; // r8d int v6; // r9d welcome(argc, argv, envp); while ( 1 ) &#
前言:emmmm 最近有点道心破碎,京麒 2026CTF 遇到了一个 V8 的题目,之前没学过,就想着学习一下,结果发现自己配置环境配了两天还没有配好,又本来说是想要复现一个 webpwn 的,发现到最后需要时间盲注,自己不会写脚本,让 ai 帮忙写了一份,但总归不是自己写的,心里还是有点空虚,如果没有 ai 那不就还是相当于 0 吗。总而言之就是忙了很久没忙出来什么成果,于是还是复习几道题目巩固一下基础。 本题的难点我觉得在于打 Tcachebin 结构体和 setcontext 的那一块儿,主要是很多地址和堆块,很容易搞混。 不过其实这种题目逻辑性非常强,一个地址都不能写错。不过相比之下
这个题目和 2022 华东北赛区的 bigduck 题目打法很像,可以放在一起学习,都可以用 environ 或者 setcontext 可知开启 NX、PIE、Canary、Full RELEO、Glibc-2.35 程序分析:main简单逆向修改了一下函数名,目前看来是没有太大的逆向难度的,整个菜单算是比较规整的: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253void __fastcall __noreturn main(const
前言:感觉最近碰到了很多不会的知识,一时间有点手忙脚乱。高版本的堆攻击还不能熟练运用,house of 系列的高版本还有很多疏漏,写题的时候又碰见了 V8,LLVM,异构 PWN,内核,phppwn 等等等等之前没有接触过的难题,及时到现在还是没有学会上面说的这些东西,只能说感觉要学习的东西还有很多很多。 由于一时间碰见这么多要学习的东西,求学心切反而感觉导致自己有点浮躁和分心,因此决定沉下心来一个一个学习,虽然感觉栈的知识也很久没有复习过了 emmmm…….T_T// 有没有谁愿意带带我 …… LLVM PASS :LLVM 是 C++编写的构架编译器的框架系统,可用
第一次写 LLVM 的题目,感觉很难读懂,即使写完了也有一点懵懵的 runOnFunction函数位于虚表中的最后一个位置,比赛题的漏洞基本就是这个,所以在做LLVM Pass pwn的时候定位函数的位置可以从虚表入手:可以直接搜索虚表 vtable 的位置 sub_19D0是虚表中的最后一个,也就是我们常说的 runOnFunction 进入之后 F5 反编译一下: 坐牢,代码很长,这里不放出来了,一点一点分析吧: r0oDkc4B 本身是小端序的十六进制的数值,转换成字符串之后倒序一下就是 B4ckDo0r 不难看出是 backdoor 剩下的程序过于冗杂难以分析