shellcode编写与简单运行

admin 2024年1月13日22:18:51评论28 views字数 937阅读3分7秒阅读模式

本篇文章用于记录思路和步骤(为了考虑兼容性,我们使用的是x86,x64的PEB结构位置会有一些不同)

免责声明

     文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任

前言

首先shellcode为了要保证在任何地方都能跑起来,那么就要做到不依靠外部函数,整个代码功能全由自己实现,例如数据传输全部依靠寄存器,函数不靠编译器提供的函数调用等等。

思路

我们通过自实现函数功能,来获取需要的模块和函数地址。首先我们需要获取PEB里面的Ldr地址(Ldr中储存了当前进程载入了哪些dll以及dll的名字和地址),再从Ldr中获取我们需要的dll地址。获取到我们需要的dll地址以后,通过我们自实现的函数获取到user32.dll的地址(在这里值得注意的是,Ldr记录的dll中,没有我们需要dll(我们需要的是user32.dll),所以我们需要通过Krenrl32.dll),最后获取到loadlibraygetprocaddress函数的地址,通过这两个函数以及我们需要的dll地址,我们就可以获取所有我们需要的函数(例如:Messagebox)。

操作细节

我们需要修改vs的配置,操作如下:

1.将编译器修改为Release版本

2.取消代码优化,将运行库修改为MT或者MTd模式

3.取消SDL检查,禁用安全检查

4.将程序入口点改为我们设置的函数同时关闭名称粉碎

在这里我们需要导入PEB头文件,PEB.h里面存放了PEB的结构和Ldr的结构。最后我们将代码生成为.exe文件,使用x32dbg打开,将.text的数据拷贝为.bin文件并用winhex打开,将其复制出来,就是我们要的shellcode了。

实例图片:

shellcode编写与简单运行

成功生成.exe文件,接下来就是取出功能代码

shellcode编写与简单运行

通过x32dbg打开我们生成的.exe文件取出其中的可执行代码部分内存

shellcode编写与简单运行

shellcode编写与简单运行

然后我们再生成一个通过参数加载shellcode的.exe文件

shellcode编写与简单运行

通过这种方式运行就可以达到效果了(这里我们写的是使用messagebox去弹窗)

shellcode编写与简单运行

运行效果

shellcode编写与简单运行

关注公众号输入文章名获取代码PEB.H

原文始发于微信公众号(泾弦安全):shellcode编写与简单运行

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月13日22:18:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   shellcode编写与简单运行https://cn-sec.com/archives/2389608.html

发表评论

匿名网友 填写信息