Good in study, attitude and health

  • Hidden Alternative Data Streams的进阶利用技巧

    0x00 前言 在渗透测试中,ADS(供选数据流/ alternate data stream)通常用于在文件中隐藏payload,这种方式最大的优点是不影响文件大小,普通用户很难察觉 为此,微软提供了"dir /r"操作,可用来查看文件的ADS,同时,Win XP以后的系统禁止用户从ADS里直接执行程序,限制了ADS的利用 然而,通过一些特殊用法和技巧,我们能够更好的隐藏ADS,并且能够从ADS里直接执行程序 :) 说明: 写本文的初衷是偶然看到了一篇有趣的文章,作者:lex Inführ,地址如下: http://insert-script.blogspot.co.at/2012/11/hidden-alternative-data-streams.html 该文章介绍了一些绕过ADS检测工具的技巧,并给出了通过wmi执行ADS的方法 本文将基于lex Inführ的文章,结合我的研究心得,对ADS的利用技巧作扩充,分享如何清除这些特殊的ADS,帮助大家提升对ADS的认识 0x01 简介 本文将要介绍以下内容: ADS常规利用方法 ADS常规检测工具 特殊ADS对检测工具的绕过 特殊ADS的清除 防御建议 0x02 常规利用 ADS: 适用于NTFS文件系统,基础知识可参考如下文章: http://www.freebuf.com/articles/73270.html 创建ADS: 对文件,命令行: echo test1 > test.txt:ThisIsAnADS 创建成功后,test.txt文件大小不变 对文件夹,命令行: echo test1 > c:\test\ads\1:ThisIsAnADS 注: 需要绝对路径 查看文件中的ADS: 命令行: dir /r 如图...

  • NSA DanderSpiritz测试指南——木马生成与测试

    0x00 前言 DanderSpritz是NSA的一款界面化的远控工具,基于FuzzBunch框架,执行Start.jar即可启动 在实际测试过程中,由于缺少说明文档,遇到的问题有很多,同时一些细节也值得深入研究 所以本文将要帮助大家答疑解惑,分享测试心得,结合木马特点分析防御思路 0x01 简介 本文将要介绍以下内容: 执行pc_prep无法获得回显的原因及解决方法 Pc同Pc2.2的区别 level3和level4木马代表的含义及如何使用 各类型木马区别 dll木马利用方式 Windows单条日志删除功能 木马查杀思路 0x02 实际测试 测试环境: Win7 x86 安装如下工具: python2.6 pywin32 jdk 1、下载fuzzbunch 参考链接: https://github.com/3gstudent/fuzzbunch 注: 我fork了公开的fuzzbunch项目(https://github.com/fuzzbunch/fuzzbunch),并添加了部分内容,解决了一个bug,具体内容会在后面介绍 2、直接运行Start.jar 如图 设置启动参数,Log Directory需要设置成固定格式:c:\logs\xxx(xxx任意名称) 否则,会出现报错,如下图 注: 网上的部分分析文章认为应该先用fb.py生成一个日志文件,接着Start.jar指向该目录,其实不需要,只要路径格式正确即可 3、执行pc_prep配置木马 输入pc_prep获得回显,如下图 注: 有很多人在测试的时候发现输入pc_prep无法获得回显,如下图 原因: fuzzbunch工程下载自如下链接: https://github.com/x0rz/EQGRP_Lost_in_Translation 文件缺失,导致该错误 正确的下载位置: https://github.com/fuzzbunch/fuzzbunch 但是,下载后还需要补全缺失的文件,才能完全正常使用 我fork了上述工程,并补全了缺失文件,下载我的github即可解决上述问题,地址如下: https://github.com/3gstudent/fuzzbunch 补充:...

  • 内网安全——利用NSA Smbtouch批量检测内网

    0x00 前言 最近,NSA渗透工具被曝光,其中包含多个Windows远程漏洞利用工具,影响很大 本文不会具体介绍这些远程漏洞工具的使用方法,而是站在防御者的角度,介绍如何利用这些工具,更好的去保护自己的内网 0x01 简介 本文将要介绍以下内容: FuzzBunch使用流程 Smbtouch功能介绍 编写python脚本实现批量检测内网是否存在可被SMB和NBT协议攻击的漏洞 根据日志掌握内网主机信息 检测的SMB和NBT远程提权漏漏洞列表如下: ETERNALBLUE ETERNALCHAMPION ETERNALROMANCE ETERNALSYNERGY 注: 个人认为,以上四个漏洞危害最大,尤其适用于内网工作组环境 0x02 FuzzBunch FuzzBunch框架,类似于metasploit,包含探测、攻击、利用等各种功能(仅根据目前泄露的资料) 下载地址: https://github.com/fuzzbunch/fuzzbunch 注: fuzzbunch提取自https://github.com/x0rz/EQGRP_Lost_in_Translation 1. 配置环境 安装python2.6,参考下载地址: http://dl.nexiao.com/file.html?url=http%3A//b9.gpxz.net/201402/python-2_gpxz.6_gpxz.6_gpxz.rar 安装pywin32,参考下载地址: https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win32-py2.6.exe/download 2. 添加环境变量 c:\python26 3. 执行fb.py进入命令行操作模式 报错 原因: 泄露的资料里缺少listeningposts文件夹 解决办法: 在shadowbroker-master\windows\下创建个listeningposts文件夹 或者修改fb.py,修改好的文件可在如下链接下载: https://raw.githubusercontent.com/3gstudent/test/master/fb.py 再次执行fb.py,成功 如图 注: 执行start_lp.py可进入界面操作模式,如下图,此处不再过多介绍 4. 设置启动参数如下: [?]...

  • 利用globalAPIhooks在Win7系统下隐藏进程

    0x00 前言 在之前的文章《Powershell tricks::Hide Process by kd.exe》介绍过通过kd.exe隐藏进程的技巧,最大的缺点是需要开启Local kernel debugging模式,等待重启才能生效 这次介绍另外一个隐藏进程的方法——利用global API hooks 优点是即时生效,不需要等待系统重启 0x01 简介 本文将要参照Sergey Podobry的文章,对该方法进行介绍,分析实际测试中需要注意的细节,并补全在64位下具体的参数设置 参考链接: https://www.codeproject.com/articles/49319/easy-way-to-set-up-global-api-hooks?display=print https://github.com/subTee/AppInitGlobalHooks-Mimikatz 0x02 原理 在用户层,通过global API hooks将测试dll注入到系统的所有进程,实现对指定进程的隐藏 hook方式 修改注册表键值AppInit_DLLs 位置: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 参数说明: LoadAppInit_DLLs: (REG_DWORD) Value that globally enables or disables AppInit_DLLs. 0x0 – AppInit_DLLs are disabled. 0x1 – AppInit_DLLs are enabled....

  • 通过APC实现Dll注入——绕过Sysmon监控

    0x00 前言 要对指定进程进行远程注入,通常使用Windows提供的API CreateRemoteThread创建一个远程线程,进而注入dll或是执行shellcode Sysmon可用来监控和记录系统活动,可记录CreateRemoteThread操作 注入的方法不只有CreateRemoteThread,能否通过其他注入方式绕过Sysmon的监控呢? Casey Smith@subTee在他的文章中给出了答案: Shellcode Injection via QueueUserAPC - Hiding From Sysmon 地址如下: http://subt0x10.blogspot.com/2017/01/shellcode-injection-via-queueuserapc.html 0x01 简介 本文将要介绍如下内容: Sysmon配置测试,监控CreateRemoteThread操作 c++实现通过APC对Dll注入 绕过Sysmon测试 Casey Smith@subTee分享的C#实现代码和用途 Sysmon: 可用来监控和记录系统活动,并记录到windows事件日志,包含如下事件: Event ID 1: Process creation Event ID 2: A process changed a file creation time Event ID 3: Network connection Event ID...

  • 渗透测试中的Application Verifier(DoubleAgent利用介绍)

    0x00 前言 近日,Cybellum Technologies LTD公开了一个0-day漏洞的POC,对其命名为“DoubleAgent”,可用于控制主流的杀毒软件 不同于以往的绕过思路,这次使用的是一种直接攻击并劫持的方式 本文将要介绍该方式的原理,分享利用思路、攻击条件和防御方法 Cybellum的博客链接如下: https://cybellum.com/doubleagent-taking-full-control-antivirus/ https://cybellum.com/doubleagentzero-day-code-injection-and-persistence-technique/ POC: https://github.com/Cybellum/DoubleAgent 0x01 简介 该方式主要是对微软系统自带的Application Verifier(应用程序检验器)进行利用 利用过程如下: 编写自定义Verifier provider DLL 通过Application Verifier进行安装 注入到目标进程执行payload 每当目标进程启动,均会执行payload,相当于一个自启动的方式 Application Verifier支持系统: WinXP-Win10 理论上,该利用方式支持WinXP-Win10,但是POC提供的dll在部分操作系统下会报错,修复方法暂略,本文仅挑选一个默认成功的系统进行测试——Win8.1 x86 0x02 application verifier 是针对非托管代码的运行时验证工具,它有助于找到细小的编程错误、安全问题和受限的用户帐户特权问题,使用常规的应用程序测试技术很难识别出这些错误和问题 注: 类似于Application Compatibility Shims,可以理解为一种补丁机制 关于Application Compatibility Shims在渗透测试中的利用技巧可参照: https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B8%AD%E7%9A%84Application-Compatibility-Shims/ 更多基础概念可参考微软官方文档,地址如下: https://msdn.microsoft.com/zh-cn/library/aa480483.aspx 测试系统: Win8.1 x86(默认支持application verifier) cmd输入(管理员权限): appverif 进入控制界面,通过面板查看配置验证器...

  • Study Notes of using sdclt.exe to bypass UAC

    0x00 前言 Matt Nelson‏ @enigma0x3在最近的文章中公开了一个绕过Win10 UAC的技巧,通过修改HKCU下的注册表键值实现对UAC的绕过,文章地址如下: https://enigma0x3.net/2017/03/14/bypassing-uac-using-app-paths/ https://enigma0x3.net/2017/03/17/fileless-uac-bypass-using-sdclt-exe/ 0x01 简介 本文将对其进行测试,分享测试心得,整理该方法的攻防技巧 0x02 原理 Sigcheck 可用来查看exe文件的清单(manifest) 下载地址: https://technet.microsoft.com/en-us/sysinternals/bb897441.aspx 在Win10环境下,cmd下运行: sigcheck.exe -m c:\windows\system32\sdclt.exe 如图 level=”requireAdministrator” true代表可自动提升权限 在Win7环境下,同样使用Sigcheck查看sdclt.exe 如图 level=”asInvoker”表示不会提升权限,这也就是不支持Win7的原因 接下来,使用ProcessMonitor监控sdclt.exe的启动过程,查找是否会调用其他程序 0x03 实际测试 测试环境: Win 10 x64 注: 该方法只在Win10下测试成功 cmd下输入: sdclt.exe 正常启动,如图 使用ProcessMonitor查看启动过程 如图 启动sdclt.exe的过程中会以High权限查找注册表键值HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe 如果手动修改该注册表键值,填入参数,那么就能够实现UAC的绕过 绕过方法如下: 新建注册表键值: HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe 并将默认值设置为cmd.exe 如图...

  • Windows Shellcode学习笔记——利用VirtualAlloc绕过DEP

    0x00 前言 接着介绍DEP绕过的另一种方法——利用VirtualAlloc绕过DEP。通过VirtualAlloc函数可以申请一段具有可执行属性的内存,相比于VirtualProtect,传入VirtualAlloc的四个参数不需要先读取再赋值,可在shellcode中直接指定,结构更简单。当然,利用Immunity Debugger的mona插件可自动构造利用VirtualAlloc绕过DEP的ROP链。 0x01 简介 本文将要介绍以下内容: 调用VirtualAlloc函数时的Bug及修复 选择合适的替代指令,修改mona自动生成的rop链,实现利用 利用VirtualAlloc绕过DEP时需要考虑的细节,如对shellcode的长度要求 0x02 相关概念 VirtualAlloc: LPVOID WINAPI VirtualAlloc( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect ) lpAddress:申请内存区域的地址 dwSize:申请内存区域的大小 flAllocationType:申请内存的类型 flProtect:申请内存的访问控制类型 申请成功时函数返回申请内存的起始地址,申请失败时返回NULL 0x03 实际测试 测试环境: 测试系统: Win 7 编译器: VS2012 build版本: Release 项目属性: 关闭GS 关闭优化 关闭SEH 打开DEP 关闭ASLR 禁用c++异常 禁用内部函数 注: 详细配置方法在上篇文章有说明...

  • Windows Shellcode学习笔记——通过VirtualProtect绕过DEP

    0x00 前言 在掌握了栈溢出的基本原理和利用方法后,接下来就要研究如何绕过Windows系统对栈溢出利用的重重防护,所以测试环境也从xp转到了Win7(相比xp,Win7的防护更全面)。本文将要介绍经典的DEP绕过方法——通过VirtualProtect绕过DEP 0x01 简介 本文将要介绍以下内容: VS2012的编译配置 利用Immunity Debugger的mona插件自动获取ROP链 对ROP链的分析调试 调用VirtualProtect函数时的Bug及修复 0x02 相关概念 DEP: 溢出攻击的根源在于计算机对数据和代码没有明确区分,如果将代码放置于数据段,那么系统就会去执行 为了弥补这一缺陷,微软从XP SP2开始支持数据执行保护(Data Exection Prevention) DEP保护原理: 数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,而有了DEP,此时CPU会抛出异常,而不是去执行指令 DEP四种工作状态: Optin Optout AlwaysOn AlwaysOff DEP绕过原理: 如果函数返回地址并不直接指向数据段,而是指向一个已存在的系统函数的入口地址,由于系统函数所在的页面权限是可执行的,这样就不会触发DEP 也就是说,可以在代码区找到替代指令实现shellcode的功能 但是可供利用的替代指令往往有限,无法完整的实现shellcode的功能 于是产生了一个折中方法:通过替代指令关闭DEP,再转入执行shellcode 内存页: x86系统一个内存页的大小为4kb,即0x00001000,4096 ROP: 面向返回的编程(Return-oriented Programming) VirtualProtect: BOOL VirtualProtect{ LPVOID lpAddress, DWORD dwsize, DWORD flNewProtect, PDWORD lpflOldProtect } lpAddress:内存起始地址 dwsize:内存区域大小...

  • Windows Shellcode学习笔记——栈溢出中对jmp esp的利用与优化

    0x00 前言 在《Windows Shellcode学习笔记——shellcode在栈溢出中的利用与优化》中对栈溢出的利用做了介绍。通过将返回地址覆盖为shellcode在内存中的起始地址,实现对栈溢出的利用 但是shellcode在内存中的起始地址往往不固定,导致漏洞利用不一定成功,本文将通过jmp esp的方式来解决这个问题 0x01 简介 函数代码在栈中保存顺序(直观理解,已省略其他细节): buffer 前栈帧EBP 返回地址 ESP ESP寄存器总是指向返回地址的下一地址 如果用jmp esp覆盖返回地址,那么在函数返回后会执行jmp esp,跳到esp,也就是返回地址的下一地址开始执行 因此,将shellcode放于返回地址之后,并将返回地址覆盖为jmp esp,就可以避免shellcode在内存中产生的移位问题 本文将要介绍使用jmp esp的具体细节,并分享如何优化我们自己生成的弹框实例shellcode,实现jmp esp利用,编写程序自动实现,解决shellcode在内存中的起始地址不固定的问题。 弹框实例shellcode下载地址: https://github.com/3gstudent/Shellcode-Generater/blob/master/shellcode.bin 0x01 jmp esp 获得jmp esp的机器码: 可通过搜索各个进程空间来获取,具体原理可参考《0day安全:软件漏洞分析技术》3.2.2节 为便于理解和测试,直接引用《0day安全:软件漏洞分析技术》3.2.2节中的代码,代码如下: #include <stdio.h> #include <windows.h> #define DLL_NAME "user32.dll" int main() { BYTE *ptr; int position,address; HINSTANCE handle; BOOL done_flag=FALSE; handle=LoadLibrary(DLL_NAME);...