安全矩阵

 找回密码
 立即注册
搜索
查看: 6825|回复: 0

一招教你注入shellcode拿下女神的电脑

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-12-5 08:22:34 | 显示全部楼层 |阅读模式
原文链接:一招教你注入shellcode拿下女神的电脑

实现功能

在目标进程的源文件中写入shellcode,当软件启动/重启是触发shellcode。





知识储备

01  什么是硬编码?

Intel CPU的机器指令(硬编码)格式如下图所示:


也就是机器码,就是指令,他本身有自己的格式:



02  了解两个硬编码格式

E8后跟随的硬编码=要跳转的地址-E8所在的地址-E8所在指令的长度
E9后跟随的硬编码=要跳转的地址-E9所在的地址-E9所在指令的长度



E8后跟随的硬编码=MessAgeBoxA地址-E8所在地址-E8指令长度
E8 DD17D376=77D507EA-0101F008-5

E9后跟随的硬编码=
(PE.ImageBase+PE.AddressOfEntryPoint)-E9所在的地址-E9所在指令的长度
E9 6334FFFF=(PE.ImageBase+PE.AddressOfEntryPoint)-0101F00D - 5


03 什么是OEP

AddressOfEntryPoint

一个x86程序运行,并不是从0地址开始的,而是从ImageBase + OEP处开始运行。
ImageBase和OEP可以在链接器中调整。
ImageBase + OEP = 0x01000000 + 0x00012475  =  0x01012475





04  x86下PELoad

将一个exe文件按照内存对齐的格式写到内存中,再将shellcode复制到最后一个节的末尾处。




实现流程

  • 将一个待污染的文件读取到内存中:FileBuffer。

  • 将FileBuffer按照内存对齐的方式拉伸成ImageBuffer。
  • 调整E8、E9各自后面的4个字节
  • 将shellcode写到最后一个节表的末尾。
  • 将OEP调整为shellcode的起始地址。
  • 按照文件对齐的方式将ImageBuffer改为NewFilebuffer,并写到文件中。



实现过程



前二步:略

第三步:调整E8、E9数据
  1. int E8 = MsgADD - (pNt->OptionalHeader.ImageBase + pSec->VirtualAddress + pSec->Misc.VirtualSize + 8 + 5);
  2. int E9 = pNt->OptionalHeader.ImageBase + pNt->OptionalHeader.AddressOfEntryPoint - (pNt->OptionalHeader.ImageBase + pSec->VirtualAddress + pSec->Misc.VirtualSize + 8 + 0xa);
  3. //重写E8地址
  4. memcpy(imagebuffer + pSec->VirtualAddress + pSec->Misc.VirtualSize + 9, &E8, 4);
  5. //重写E9地址
复制代码

第四步:写入shellcode

将shellcode复制到文件中

  1. //copy shellcode
  2. memcpy(imagebuffer + pSec->VirtualAddress + pSec->Misc.VirtualSize, Shellcode, shellcode_len);
复制代码

第五步:调整OEP

将OEP调整为我们shellcode的地址。

  1. pNt->OptionalHeader.AddressOfEntryPoint = pSec->VirtualAddress + pSec->Misc.VirtualSize;
复制代码


第六步:略


OD流程分析


主要调整程序的入口执行我们的shellcode然后在跳转到原来的地址,保证程序的正常运行。

01 汇编代码
  1. push 0
  2. push 0
  3. push 0
  4. push 0
  5. call messageboxA
  6. jmp calc.01012475
复制代码
02  程序从指定的oep开始执行

​​
03 解析shellcode前八个字节

4个push 0 为MessageBoxA压参

04  调用messageboxA

call messageboxA



05  调整回程序原入口
jmp calc.01012475





注:
  • E8 转化为汇编指令就是 call。
  • E9 转化为汇编指令就是 jmp。
  • shellcode可以根据需要自行调整。
  • 注意写入地址是否可执行。













回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 15:31 , Processed in 0.014247 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表