【Win Pwn】HEVD-内核栈溢出GS保护及绕过
HEVD中的栈溢出加上GS保护 还有一个知识点就是windows内核栈地址泄露 函数功能 在上三篇中讲的很清楚了,这里我关闭了KVAS 又是一段经典的栈溢出,但是有了内核的GS保护 编写exploit 这里就不得不提到Windows中一种Cannary的绕过方式了,通过try except的Handler进行绕过,很遗憾handler只在32位程序中才保存在栈上 查阅资料 https://paper.seebug.org/2017/#22 https://kristal-g.github.io/2021/02/07/HEVD_StackOverflowGS_Windows_10_RS5_x64.html cookie值是存储在_data段的第一个 函数检查的部分,有一个异或 1: kd> dqs rspffff8788`21979540 00000000`00000000ffff8788`21979548 ffffc186`261f98f0ffff8788`21979550 ffffc186`269c86b0ffff8788`21979558 00000...
【Win Pwn】HEVD-任意地址写
非预期方法,暂时不会放出来 HEVD练习-任意地址写 漏洞点 一点好玩的 传入一个结构体,得到结构体过后写入内容 结构体 typedef struct _WRITE_WHAT_WHERE{ unsigned int* What; unsigned int* Where;}arbitrary_write, *pArbitraryWrite; 这里我做一个比较有意思的事儿,比如修改某个变量的值 printf("[*] Start Exploit\n");pArbitraryWrite payload = (pArbitraryWrite)malloc(sizeof(arbitrary_write));if (payload == NULL) { printf("[!] Malloc payload failed\n"); return;}int vuln = 0x10000;int pay = 0xDEADBEEF;printf("[-] the vuln value is 0x%x\...
【内网】从PoC看JuicyPotato提权
从此认识到自己不是做win安全的料 个人认为JuictPotato的前身是著名的Rotten Potato 使用CoGetInstanceFromIStorage API 调用欺骗RPC,对代理进行身份验证.在此调用中指定了代理 IP/端口 RPC 向代理发送 NTLM 协商包 代理依赖的NTLM协商到RPC在端口135,被用作模板。同时,执行对AcceptSecurityContext的调用以强制进行本地身份验证 注:此包被修改为强制本地身份验证. & 5. RPC 135和AcceptSecurityContext用NTLM Challenge回复 将两个数据包的内容混合以匹配本地协商并转发到RPC RPC使用发送到AcceptSecurityContext(8.)的NLTM Auth包进行响应,并执行模拟 【PotatoAPI】创建COM监听器startCOMListenerThread 初始化WinSocket,创建非阻塞式socket,并监听-t端口。跳转到2,后面的就是监听循环中的 【LocalNegotiator】使用processN...
【内网】探索Windows内网的Kerberos协议
感恩学校扎实的密码学功底,分析起来也是很简单的 说白了就一张图 攻击方式 黄金票据 第三步中 使用 KDC 特定账户 Krbtgt 的 NTLM-Hash 时,如果我们有了该NTML-Hash那么就能做到伪造TGT 该方法由于需要DC的NTLM-Hash,所以用于留后门 假设我们拿到了DC上administrator权限的shell 抓取Hash CS使用的命令为:lsadump 相关项目:https://github.com/Xre0uS/MultiDump 获得管理员SID mimikatz一把梭 wmic useraccount get name,sid 切换到域内用户的普通权限,制作黄金票据 横向移动 先尝试访问文件夹 原因:https://support.microsoft.com/zh-cn/topic/ms16-101-windows-身份验证方法的安全更新程序说明-2016-年-8-月-9-日-be16a40d-d7e2-c4b2-d885-6a22cff3cb77 貌似是WinServer2012的硬伤了,虚拟机必须用一些补丁才...
【内网】环境搭建
Windows Server 2012 配置 怀念大学时光,在学网络配置的时候就是用的winserver 2012,最近想探究内网就翻出来学一学。 简单配置 vmware虚拟机安装就不多说了,主要是网络,我配置了两块网卡 NAT:连接到物理机网络 WinDC:构建vmware的虚拟局域网 关于vmtool安装 vmtool是通过DVD光盘的形式安装的,所以要开启自动检测;软盘也要相同的设置 装完了过后就很方便了 关闭防火墙 开启远程桌面 配置路由 添加角色和功能 里面选择 配置DHCP服务器(非必要) 添加角色和功能 里面选择 创建和激活作用域:工具->DHCP AD活动目录配置 AD和域控制器DC都在虚拟机上。 为了测试,安排一个Win7 局域网 Windows 7客户机 配置内网静态IP,设置DNS为域服务器IP 配置DC域控 提升为域控制器 密码:!234rewq 设置Administrator账户的密码为$321qwer 创建用户组织 用户组织可以用于委派等,是对组操作的最小单位 使用部门->个...
【内网】内网渗透测试-新手村
简单一层内网测试 去年的一篇,简单一层内网测试 入口点 http://xxx:16xx8 入口是个OA办公系统,使用某漏洞可以文件上传最后webshell实现RCE 扫描内网发现存活主机,同时上传cs大马 使用mimikatz抓取明文得到rdp密码后使用socks代理进入内网可以访问远程桌面 内网I 监控服务器 192.168.xx.50 该服务器存在ms17-010漏洞,但是有杀软,尝试使用psexec文件上传执行RCE失败,因为被杀软拦截了,可能修改横向移动方式能够绕过 也可以尝试使用command一句话+web_delivery上线 不过好在入口权限够高,192.168.xx.100时也扫出了RDP密码,也是直接上线了 内网II DHCP服务器 192.168.xx.250 一般来说DHCP服务器是域服务器,mimikatz没有抓到密码,不过还好有ms17-010漏洞,但是由于当时我没有使用正向payload所以使用的就是 web_delivery+command 上线,之后把msf的shell传递给cs来扫密码,得到密码后使用代理RDP上线 查看相关配置后基本可...
【Win Pwn】HEVD-内核栈溢出(下)
上:https://joe1sn.eu.org/2024/01/25/win-hevd-exp-stackoverflow-I/ 中:https://joe1sn.eu.org/2024/01/25/win-hevd-exp-stackoverflow-II/ 文章已在先知社区投稿:https://xz.aliyun.com/t/13365 本附录对第二章的以下几个遗留问题做出说明 user编程寻找ROPGadget shellcode编写 Token提权 KVAS user编程寻找ROPGadget ROP全称加返回导向性编程,比如这一章用到的Gadget pop rcxretmov cr4, rcxret 关于ret汇编本质上就是从栈帧中取出值,然后将ip寄存器设置为该值,等价于pop ip,这样就能完成函数调用的返回等等。 本章中当我们发生栈溢出时,就会把ret的位置设置为第一段gadget的位置 pop rcx就会将此时栈顶的值0x00000000002506f8存入rcx寄存器,然后ret又从栈顶取出地址mov_rc4_rcx_ret,然后rip寄存器就跳转...
【Win Pwn】HEVD-内核栈溢出(中)
在上一篇中了解了与内核的交互模式,这里就可以开始做HEVD了 文章已在先知社区投稿:https://xz.aliyun.com/t/13364 编写交互模块 A. 计算IO_CTL值 其实不用这步,但是可以当作更多的了解 在之前的交互中有这么一条定义功能号 #define IOCTL_MUL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x9888, METHOD_BUFFERED, FILE_ANY_ACCESS) 但是…HEVD逆向会发现是这样的 发现CTL_CODE也是个宏定义 #define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \) 其中,这里 DeviceType -> FILE_DEVICE_UNKNOWN = 0x22 Function -> = ...
【Win Pwn】HEVD-内核栈溢出(上)
开始做HEVD来熟悉windows的内核漏洞利用方式时,发现大多数的资料依旧基于windows7,但是目前主流的操作系统已经是win10,所以还是得更上时代潮流的 文章已在先知社区投稿:https://xz.aliyun.com/t/13363 0. 前置环境 更基础 WIndows10 Vmware虚拟机 Visual Studio 2019,有WDK Windbg Preview(我用单纯是觉得更好看) 最重要的HEVD项目:https://github.com/hacksysteam/HackSysExtremeVulnerableDriver,我直接下载的3.00 Release版 我使用的Windows版本是 I. 编程环境 如果你想快速搭建一个驱动开发环境可以参考B站上的一些资料,如:配置驱动开发环境 如果按照步骤vs没有KernelModDriver这一模板,找到vs目录的WDK.vsix双击即可 一段驱动的主要代码,在main.cpp中编写 #include <ntifs.h>#include "win10.h"#inc...
【漏洞挖掘】记一次痛苦的VxWorks路由器漏洞挖掘
问题多又多 记一次痛苦的VxWorks路由器漏洞挖掘 路由器很老了,是Mercury MW300R的某个版本,网上找不到固件,所以最开始想用uart进shell 拆开过后可以快速找到UART引脚 UART调试 I 打开UART 路由器断电,然后把万用表调到测接地,黑笔随便找一个电路板上的接口(我用的wifi天线的),红笔测口子,响的那个就是接地 接着路由器连上电源,万用表调到测电压,黑笔随便找一个电路板上的接口,红笔挨个测试接口 如果为3.3V左右,那么是电源线(3.3V) 如果为0V,为接地(GND) 如果为2.5V左右,为TXD(路由器的Write) 如果不断跳动,为RXD(路由器的Read) 然后第一点不寻常的就来了 我在测试的时候只能通过排除法筛选出了RXD,我的RXD一直为0V 这个时候通过 FT232: 3.3V -> 路由器: 3.3vFT232: GND -> 路由器: GNDFT232: RXD -> 路由器: TXDFT232: TXD -> 路由器: RXD 插上路由器电源线,但是不插插头,通过串口就能连上了...
【STM32】1.点灯大师
如何三小时之内,从0开始学会stm32点灯 (其实是想验证下发的芯片是不是好的) 准备工作 我是在JD上随便买的一家,有 STM32F103C8T6,面包板,USB转TTL,显示器… 缺啥少啥买配件就行了 1.软件 由于我们是小白,所以暂时不需要看电路啥的,直接先把软件装上。 STM32CubeIDE 这里我参考了:BV1HM411b78E 或者知乎的https://zhuanlan.zhihu.com/p/321845090 知乎的有一个模拟程序 驱动(因为我是USB转TTL):CH340-驱动,这个你可以找客服要,一般都会发给你的 烧录软件:FLYMCU 首先需要熟悉的就是STM32CubeIDE的使用,可以参考上面的B站视频后者知乎,这里还有:https://www.bilibili.com/video/BV13B4y1y7yk 2.硬件 这个是始终绕不开的(除非你用EDA) 1.面包板 有时间可以参考:https://www.bilibili.com/video/BV1gz4y1Z7N7 或者 导线就是这样连接的 2.STM32F103C8T6 显示...
【源码分析】AFL源代码分析
其实还是挺简单的 在一次期末报告里面做了这个报告 关于AFL的基本步骤 工作流程基本上可以用 5 个步骤来描述:预处理、输入构建、输入选择、评估、后模糊测试。 真正的内核处理是步骤 2 到 4 预处理 分析和获取有用信息,使用PIN,符号执行,污点检查 黑盒白盒 输入构建 从数据 S(种子)产生大量变异数据 I。 输入选择 过滤无效数据,优化模糊测试 评估 大多数关于模糊的研究集中在两个指标上:覆盖率和利用漏洞的平均时间 源码分析 编译插桩 afl-gcc 根据使用方法,首先是使用afl-gcc进行编译,在编译时就完成插桩 本就是是包裹的GCC盒CLANG int main(int argc, char** argv) { if (isatty(2) && !getenv("AFL_QUIET")) { SAYF(cCYA "afl-cc " cBRI VERSION cRST " by <[email protected]>\n"...
【漏洞挖掘】win-afl使用指北-中级篇
为什么不叫高级篇,因为高级的我也不会 主要讲一下更贴近实际的用法吧 !!!仅大标题1完成,全片未完待续!!! 对DLL进行Fuzz 理论测试 代码还是上一篇提到的代码,依旧是32位,只不过溢出部分写在DLL里面 dll.c #include <stdio.h>__declspec(dllexport) void vuln(char *FileDir){ char password[6] = "ABCDE"; char str[6]; FILE *fp; if(!(fp=fopen(FileDir,"r"))){ printf("Open Failed\n"); exit(0); } fgets(str, 0x1000, fp); str[5]='\0'; if(strcmp(str,password)==0) // fprintf(stderr,"OK.\n"); printf("OK.\n"); else...
【漏洞挖掘】win-afl使用指北-初级篇
在21年的时候曾经小小的使用了一点WinAFL,现在再回过头来做笔记 这里主要讲述WinAFL+DynamoRIO的Fuzz方法 简介 知道创宇这篇文章讲的已经很好了:https://paper.seebug.org/323/ 由于闭源特点,那么需要使用DynamoRIO进行插桩,检测指令块的转移 WinAFL主要特点就是将AFL中的函数使用WinAPI进行重写,然后调用DynamoRIO的API完成fuzz 编译 主要是参考了https://bbs.kanxue.com/thread-261323.htm和官方过程:https://dynamorio.org/page_building.html DynamoRIO 32位 1. 编译 软件下载一把梭 git clone https://github.com/DynamoRIO/dynamorio.gitcd dynamoriomkdir build_Win32mkdir build_x64 这里我使用的是x86 Native Tools Command Prompt命令行 cmake -G"Visual ...
【免杀】DLL注入小结
DLL 注入进化史 远程线程调用注入 这个是最简单的 这里我接受的是程序的进程PID和待注入DLL的路径szPath void DLLinjector::DllOnLoad() { if (!this->Check()){ wcout << "The Process or DLL file not found\n"; return; } //向目标进程写入DLL的路径 SIZE_T dwWriteSize = 0; HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, this->dwPid); LPVOID pAddress = VirtualAllocEx(hProcess, NULL, 0x100, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess, pAddress, this->szPath, wcslen(this->szPath)*2+2, &a...
【Win Pwn】基础栈溢出保护绕过
针对栈攻击的防护与绕过 GS GS本质上和Linux GCC中的canary很相似,他在栈帧的结尾(EBP之前)插入一给DWORD类型的值,其副本存在于.data中。 在编译的时候并不会存在GS保护有下面几种情况 函数不包含缓冲区 函数被定义为具有变量参数列表 函数使用无保护的关键字标记 函数在第一个语句中包含内嵌汇编代码 缓冲区不是 8 字节类型且大小不大于 4 个字节 不过仍然可以采用#pragma strict_gs_check 强制启用GS保护 #include "string.h"int vulfuction(char* str){ char arry[4]; strcpy(arry, str); return 1;}int main(){ char* str = "yeah,i have GS protection"; vulfuction(str); return 0;} 绕过方式要漏洞类型灵活选择 如果是可以泄露那么泄露后拼接再溢出 再C++中,struct和c...
【Win Pwn】基础栈溢出利用
[Win Pwn] 基础栈溢出利用 window下无保护的栈溢出加载shellcode 程序 #include <stdio.h>#include <string.h>#include <stdlib.h> void vuln(){ char password[6] = "ABCDE"; char str[6]; FILE *fp; if(!(fp=fopen("password.txt","r"))) exit(0); fscanf(fp,"%s",str); str[5]='\0'; if(strcmp(str,password)==0) // fprintf(stderr,"OK.\n"); printf("OK.\n"); else // fprintf(stderr,"NO.\n"); printf("NO.\n");}in...
【漏洞复现】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, ...












