阅读本文大概需要3分钟,置顶公众号哟。
shellcode执行
前言今天看到一个比较好玩的东西,虽然原理很简单,但是使用golang来做还是挺新鲜,所以还是分享给大家。
第一节
PoC、Exp、Payload与Shellcode
首先说一下PoC、Exp、Payload与Shellcode这几个概念,这在渗透测试中非常常见。
PoC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。
Exp,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。
Payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令。
Shellcode,简单翻译“shell代码”,是Payload的一种,由于其建立正向/反向shell而得名。其实就是一段可以运行的二进制代码。
PoC是用来证明漏洞存在的,Exp是用来利用漏洞的,两者通常不是一类,或者说,PoC通常是无害的,Exp通常是有害的,有了PoC,才有Exp。
Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的Exp,也就是说不存在通用的Exp。
Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。
今天要讲的就是使用golang 加载并执行shellcode,玩一些极客的感觉。
第二节
windows版shellcode加载器
shellcode既然是一段二进制代码,那加载器的功能则是将二进制写到内存中,并将这段内存设置为可执行,最后从头到尾执行这段代码即可。来看代码:
1// shellcode_unix.go
2package linuxshellcode
3
4/*
5// shellcode_win.go
6package winshellcode
7
8import (
9 "syscall"
10 "