freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

ShellcodeTemplate:一款针对Windows X86架构的Shellcode模版工具
Alpha_h4ck 2022-03-31 23:34:33 215283
所属地 广西

关于ShellcodeTemplate

ShellcodeTemplate是一款易于修改的针对Windows x64/x86的Shellcode模版工具,该工具基于TitanLdr开发,能够帮助广大研究人员将项目代码编译成一个PE可执行程序,并提取.text字段。

Shellcode百科

Shellcode是一段用于利用软件漏洞而执行的代码,实际上是十六进制形式的机器语言,大家知道机器语言是二进制的,CPU只认识二进制,因为要被直接注入到内存中,没办法编译了,所以希望CPU可以执行,那就只能用机器代码了,一般用汇编语言写出程序,在从目标代码中提取出来。

Shellcode可以按照攻击者执行的位置分为本地Shellcode和远程Shellcode。本地运行的Shellcode经常用于利用软件漏洞提升权限,比如在Linux下由普通权限提升至root权限等。而远程Shellcode指的是利用软件漏洞获得特定的Shellcode,再经由C或Python编写远程攻击程序,进而取得对方电脑的root权限。

工具下载

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/Cracked5pider/ShellcodeTemplate.git

接下来,我们需要在makefile中修改项目名称,将“ShellcodeTemplate”修改为你想要的名字,然后使用make来编译项目源码:

make        // to compile x64 and x86

make x64    // to compile only x64

make x86    // to compile only x86

工具使用样例

Shellocde的入口点如下所示,当然了,我们也可以根据自己的需要来进行修改。

首先,我们需要使用自定义的GetModuleHandle和GetProcAddress来初始化我们要用到的库和函数:

SEC( text, B ) VOID Entry( VOID )

{

    INSTANCE Instance = { };

 

    Instance.Modules.Kernel32   = TGetModuleHandle( HASH_KERNEL32 );

    Instance.Modules.Ntdll      = TGetModuleHandle( HASH_NTDLL );

 

    if ( Instance.Modules.Kernel32 != NULL )

    {

        // Load needed functions

        Instance.Win32.LoadLibraryA = TGetProcAddr( Instance.Modules.Kernel32, 0xb7072fdb );

 

        // Load needed Libraries

        Instance.Modules.User*32     = Instance.Win32.LoadLibraryA( GET_SYMBOL( "User*32" ) );

 

        if ( Instance.Modules.User*32 != NULL )

        {

            Instance.Win32.MessageBoxA = TGetProcAddr( Instance.Modules.User*32, 0xb303ebb4 );

        }

    }

    

    // ------ Code ------

    Instance.Win32.MessageBoxA( NULL, GET_SYMBOL( "Hello World" ), GET_SYMBOL( "MessageBox Title" ), MB_OK );

}

值得注意的是,正如大家所看到的那样,我们可以直接在我们的Shellcode中使用常规字符串,这是因为我们在链接的时候向我们的Shellcode中引入了.rdata字段,GET_SYMBOL将通过GetRIP()的偏移量获取到函数或字符串的指针。

项目地址

ShellcodeTemplate:GitHub传送门

参考资料

https://twitter.com/ilove2pwn_

https://github.com/SecIdiot/TitanLdr

# shellcode # shellcode工具
本文为 Alpha_h4ck 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
渗透实战优质工具
Alpha_h4ck LV.10
好好学习,天天向上
  • 2359 文章数
  • 1023 关注者
Tetragon:一款基于eBPF的运行时环境安全监控工具
2025-01-21
DroneXtract:一款针对无人机的网络安全数字取证工具
2025-01-21
CNAPPgoat:一款针对云环境的安全实践靶场
2025-01-21
文章目录