首页
社区
课程
招聘
[原创] 抛砖引玉之gcc生成可可携带字符串的shellcode
发表于: 2018-10-5 16:19 6351

[原创] 抛砖引玉之gcc生成可可携带字符串的shellcode

2018-10-5 16:19
6351
原理:
通过linker script实现自定义section链接,将代码段和只读数据段链接到一起,生成一个dll,再用objcopy生成binary。

要求:
windows10,装上debian或者ubuntu应用
也可以直接用linux
mingw-w64(gcc for windows gcc的一个发行版,用于编译出exe dll sys等)

步骤:
1,在linux shell中运行以下命令安装mingw-w64
sudo apt-get install mingw-w64
2,解压附件,并在shell中cd到附件目录,执行以下命令编译
make all
3,运行例子
./exec.exe

效果:

shellcode的hexdump:

附件:

entry_x86_64.S  入口汇编代码,用于获取PEB,并调用c代码。编译得出entry.o。链接的时候此文件需要放在前面,这样使代码放在shellcode头部。其中用到的偏移量随着各个操作系统版本的不同也有所变化,需要注意。

sc.c  shellcode的c代码部分,这里只拿kernel32.dll的handle,并进一步得到其他相关的数据。然后调用MessageBoxA。需要注意的是,c代码部分不能有全局变量,否则会出错。

winapi.h windows的一些api的声明。

sc.lds 链接脚本,将text代码段和rdata只读数据段直接拼接在一起。传入到ld命令。

exec.c shellcode的测试程序,allocate一处读写执行的内存,拷贝shellcode到此内存,然后直接调用。

Makefile 编译脚本,


后记:

这里只是介绍gcc生成shellcode,其中有些细节也是可以展开的但是时间有限这里就不展开了,况且论坛里已经有帖子讨论相关的内容了。另外关于编译脚本,不懂Makefile的也要进行一定的学习才能基于本例继续开发。


这个例子也是从我另一个弄着自己玩的pubg项目里抽取出来的,别的部分是黑科技,就不放出来了。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-6-12 16:00 被malokch编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/10/05
最新回复 (4)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
赞一下wsl
2018-10-5 17:34
0
雪    币: 12848
活跃值: (9108)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
几行整齐的48 8b xx这个特征太明显了
2018-10-6 11:15
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
hzqst 几行整齐的48 8b xx这个特征太明显了
RCE的话确实很要紧,但是本地就无所谓了,可以无视。
2018-10-6 13:07
0
雪    币: 153
活跃值: (260)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
mark
2018-10-14 23:17
0
游客
登录 | 注册 方可回帖
返回
//