Skip to content →

liwz11's blog Posts

Hot Potato本地提权

2016年1月中旬,来自FoxGlove Security安全团队的breenmachine在博客中介绍了一种被称为Hot Potato的漏洞利用技术(原文链接)。在默认配置下,Hot Potato能够利用Windows操作系统的已知缺陷来获取本地计算机的最高控制权限,受影响的操作系统包括 Windows 7/8/10 和 Windows Server 2008/2012 。 通过Hot Pota…

Comments closed

提取机器码并运行

构造shellcode,一般是使用高级语言编写一段程序然后编译,反汇编得到十六进制的操作码,或者直接写汇编然后从二进制文件中提取操作码,它们都需要借助反汇编工具或十六进制编辑工具。本文将介绍两段C++代码,其一用于提取机器码,其二用于运行机器码。 提取机器码 以下代码用于自动化提取机器码,只需将汇编代码嵌入TODO位置,然后编译运行即可。代码下载地址:getMachinecode.cpp #inc…

Comments closed

动态定位 Win32 API 的入口地址

shellcode是一段能够完成某种特定功能的二进制代码,可能是开启一个新的shell或者下载某个特定的程序或者向攻击者返回一个shell等等。在Windows中,完成这些特定功能需要调用某些API,其入口地址可由链接库的装载基地址和API在链接库中的偏移相加得到。早些时候,可以这样来获取API的入口地址:进入VC6.0安装目录下的Tools文件夹,其中Depends.exe工具可以用来查看PE文…

Comments closed

Linux系统调用

系统调用是用户态和内核态之间的一座桥梁,大多数操作系统都提供了许多核心函数以供应用程序访问,shellcode当然也需要调用这些函数来完成特定功能。Linux系统提供的核心函数可以方便的实现文件访问、命令执行、网络通信等功能,这些函数就被称为系统调用(System Call)。

为了标识每一个系统调用,在Linux中定义了系统调用号,具体可以到/usr/include/asm/unistd_32.h文件中进行查看;为了将系统调用号和相应的服务例程结合起来,在Linux中还定义了系统调用表sys_call_table,它是一个指针数组,每个元素都指向其下标对应的系统调用号的封装例程。

在linux-headers中也能找到它们的定义,以版本2.6.35为例:

系统调用一般都是通过软件中断实现的。在x86系统中,软件中断由int 0x80指令产生,128号异常处理程序就是系统调用处理程序system_call()。用户程序需要系统提供服务的时候,会产生一个int 0x80的软中断,并通过寄存器eax传递一个系统调用号,系统调用处理程序通过此号从系统调用表中找到相应的内核函数执行,最后返回。

下面的机器码通过系统调用实现了根用户shell提示符的获取。

Comments closed

PE文件格式

PE是Portable Executable的简写,意思是可移植的可执行文件。此文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器也都能识别和使用该文件格式。PE文件格式可以概括为: DOS MZ header | DOS stub | PE header | section table | section 1 | … | sectio…

Comments closed

TEB和PEB

PEB全称为Process Environment Block,即进程环境块,每个进程都有自己的PEB,用于存放进程信息,位于用户地址空间。TEB全称为Thread Environment Block,即线程环境块,进程中的每个线程都有自己的TEB,用于保存频繁使用的线程相关的数据,位于用户地址空间,在比 PEB 所在地址低的地方。 一、线程环境块TEB 一个进程的所有TEB都以堆栈的方式,存放在…

Comments closed

宏病毒的简单分析

Office是一款应用广泛的办公软件,它允许在文档中使用功能强大的可执行指令,也就是宏代码。然而,宏代码带来便利的同时,也使得病毒的制造与传播更加容易。正所谓想要瓦解敌人,一定要从内部开始,所以从Word宏病毒的实现入手,来分析其感染原理。 一、实验环境 实验目标:打开Word文档时,自动运行某个指定程序。 1. 启用所有宏 新建Word文档并打开,进入[选项]->[信任中心]->[信…

Comments closed

伪造CA颁发证书和签名

尽管在一台Windows机器上植入恶意代码和建立C&C信道的方式有多种,其共同的目标之一是防止payload被检测到,当需要考虑持久性的时候,这一点尤其重要。现在假设这样一个场景:已经获得了目标主机的Shell访问权,为了在机器重启之后C&C信道能够重建,需要在该主机上安装一个程序,尽可能躲过杀毒软件的检测。 较直接的方法是使程序看起来像一个Windows系统二进制文件。而数字签名…

Comments closed