欢迎光临
未来你我一起携手

nodejs-MITM,基于代理形式的中间人套件 NodeJs中间人

起源于一个朋友要求做一个虚假的报表,要求就是逼真。哈哈,对于本人来说就是专业造假30年,因为这里的报表返回是json.所以无疑就更方便了,现在这里简单介绍一下这款工具。在github上他的地址是:https://github.com/wuchangming/node-mitmproxy

上一张结果图

这里的安装比较轻便,但我这里给他做了一点提取操作。简化了一下这个包包。另外,这里需要的环境如下:

nodejs

nodejs-mitmproxy

另外这里是基于代理形式的,跟传统的ARP欺骗有些不同。先说说安装吧,你也可以照着官方文档来安装,也可以用我的方法来安装。当你装好nodejs以后。默认npm模块路径是C:\Users\Administrator\AppData\Roaming\npm\node_modules所以你把我的包解压到这里就可以了。目录树大致就是这样的。下载压缩包 下载例子

└─node-mitmproxy
    ├─lib
    │  ├─bin
    │  ├─common
    │  ├─middleware
    │  ├─mitmproxy
    │  └─tls
    └─node_modules
        ├─.bin
        ├─@types
        │  └─node
        ├─agentkeepalive
        │  └─lib
        ├─ansi-regex
        ├─ansi-styles
        ├─babel-code-frame
        │  └─lib
        ├─babel-core
        │  └─lib
        │      ├─api
        │      ├─helpers
        │      ├─tools
        │      └─transformation
        │          ├─file
        │          │  └─options
        │          └─internal-plugins
        ├─babel-generator
        │  └─lib
        │      ├─generators
        │      └─node
        ├─babel-helper-call-delegate
        │  └─lib
        ├─babel-helper-define-map
        │  └─lib
        ├─babel-helper-function-name
        │  └─lib
        ├─babel-helper-get-function-arity
        │  └─lib
        ├─babel-helper-hoist-variables
        │  └─lib
        ├─babel-helper-optimise-call-expression
        │  └─lib
        ├─babel-helper-regex
        │  └─lib
        ├─babel-helper-remap-async-to-generator
        │  └─lib
        ├─babel-helper-replace-supers
        │  └─lib
        ├─babel-helpers
        │  └─lib
        ├─babel-messages
        │  └─lib
        ├─babel-plugin-check-es2015-constants
        │  └─lib
        ├─babel-plugin-syntax-async-functions
        │  └─lib
        ├─babel-plugin-transform-async-to-generator
        │  └─lib
        ├─babel-plugin-transform-es2015-arrow-functions
        │  └─lib
        ├─babel-plugin-transform-es2015-block-scoped-functions
        │  └─lib
        ├─babel-plugin-transform-es2015-block-scoping
        │  └─lib
        ├─babel-plugin-transform-es2015-classes
        │  └─lib
        │      └─lib
        ├─babel-plugin-transform-es2015-computed-properties
        │  └─lib
        ├─babel-plugin-transform-es2015-destructuring
        │  └─lib
        ├─babel-plugin-transform-es2015-duplicate-keys
        │  └─lib
        ├─babel-plugin-transform-es2015-for-of
        │  └─lib
        ├─babel-plugin-transform-es2015-function-name
        │  └─lib
        ├─babel-plugin-transform-es2015-literals
        │  └─lib
        ├─babel-plugin-transform-es2015-modules-amd
        │  └─lib
        ├─babel-plugin-transform-es2015-modules-commonjs
        │  └─lib
        ├─babel-plugin-transform-es2015-modules-systemjs
        │  └─lib
        ├─babel-plugin-transform-es2015-modules-umd
        │  └─lib
        ├─babel-plugin-transform-es2015-object-super
        │  └─lib
        ├─babel-plugin-transform-es2015-parameters
        │  └─lib
        ├─babel-plugin-transform-es2015-shorthand-properties
        │  └─lib
        ├─babel-plugin-transform-es2015-spread
        │  └─lib
        ├─babel-plugin-transform-es2015-sticky-regex
        │  └─lib
        ├─babel-plugin-transform-es2015-template-literals
        │  └─lib
        ├─babel-plugin-transform-es2015-typeof-symbol
        │  └─lib
        ├─babel-plugin-transform-es2015-unicode-regex
        │  └─lib
        ├─babel-plugin-transform-regenerator
        │  └─lib
        ├─babel-plugin-transform-strict-mode
        │  └─lib
        ├─babel-polyfill
        │  ├─dist
        │  ├─lib
        │  ├─node_modules
        │  │  └─regenerator-runtime
        │  └─scripts
        ├─babel-preset-es2015
        │  └─lib
        ├─babel-register
        │  └─lib
        ├─babel-runtime
        │  ├─core-js
        │  │  ├─array
        │  │  ├─error
        │  │  ├─json
        │  │  ├─math
        │  │  ├─number
        │  │  ├─object
        │  │  ├─reflect
        │  │  ├─regexp
        │  │  ├─string
        │  │  ├─symbol
        │  │  └─system
        │  ├─helpers
        │  └─regenerator
        ├─babel-template
        │  └─lib
        ├─babel-traverse
        │  └─lib
        │      ├─path
        │      │  ├─inference
        │      │  └─lib
        │      └─scope
        │          └─lib
        ├─babel-types
        │  └─lib
        │      └─definitions
        ├─babylon
        │  ├─bin
        │  └─lib
        ├─balanced-match
        ├─brace-expansion
        ├─chalk
        ├─charset
        │  └─coverage
        │      └─lcov-report
        │          └─charset
        ├─colors
        │  ├─examples
        │  ├─lib
        │  │  ├─custom
        │  │  ├─maps
        │  │  └─system
        │  └─themes
        ├─commander
        ├─concat-map
        │  ├─example
        │  └─test
        ├─convert-source-map
        │  ├─example
        │  └─test
        │      └─fixtures
        ├─core-js
        │  ├─build
        │  ├─client
        │  ├─core
        │  ├─es5
        │  ├─es6
        │  ├─es7
        │  ├─fn
        │  │  ├─array
        │  │  │  └─virtual
        │  │  ├─date
        │  │  ├─dom-collections
        │  │  ├─error
        │  │  ├─function
        │  │  │  └─virtual
        │  │  ├─json
        │  │  ├─map
        │  │  ├─math
        │  │  ├─number
        │  │  │  └─virtual
        │  │  ├─object
        │  │  ├─promise
        │  │  ├─reflect
        │  │  ├─regexp
        │  │  ├─set
        │  │  ├─string
        │  │  │  └─virtual
        │  │  ├─symbol
        │  │  ├─system
        │  │  ├─typed
        │  │  ├─weak-map
        │  │  └─weak-set
        │  ├─library
        │  │  ├─core
        │  │  ├─es5
        │  │  ├─es6
        │  │  ├─es7
        │  │  ├─fn
        │  │  │  ├─array
        │  │  │  │  └─virtual
        │  │  │  ├─date
        │  │  │  ├─dom-collections
        │  │  │  ├─error
        │  │  │  ├─function
        │  │  │  │  └─virtual
        │  │  │  ├─json
        │  │  │  ├─map
        │  │  │  ├─math
        │  │  │  ├─number
        │  │  │  │  └─virtual
        │  │  │  ├─object
        │  │  │  ├─promise
        │  │  │  ├─reflect
        │  │  │  ├─regexp
        │  │  │  ├─set
        │  │  │  ├─string
        │  │  │  │  └─virtual
        │  │  │  ├─symbol
        │  │  │  ├─system
        │  │  │  ├─typed
        │  │  │  ├─weak-map
        │  │  │  └─weak-set
        │  │  ├─modules
        │  │  ├─stage
        │  │  └─web
        │  ├─modules
        │  │  └─library
        │  ├─stage
        │  └─web
        ├─core-util-is
        │  └─lib
        ├─debug
        │  └─src
        ├─detect-indent
        ├─escape-string-regexp
        ├─esutils
        │  └─lib
        ├─globals
        ├─has-ansi
        ├─home-or-tmp
        ├─iconv-lite
        │  ├─encodings
        │  │  └─tables
        │  └─lib
        ├─inherits
        ├─invariant
        ├─is-finite
        ├─isarray
        ├─js-tokens
        ├─jschardet
        │  ├─dist
        │  ├─src
        │  └─tests
        │      └─qunit
        ├─jsesc
        │  ├─bin
        │  └─man
        ├─json5
        │  └─lib
        ├─lodash
        │  └─fp
        ├─loose-envify
        ├─minimatch
        ├─minimist
        │  ├─example
        │  └─test
        ├─mkdirp
        │  ├─bin
        │  ├─examples
        │  └─test
        ├─ms
        ├─node-forge
        │  ├─js
        │  └─swf
        ├─number-is-nan
        ├─os-homedir
        ├─os-tmpdir
        ├─path-is-absolute
        ├─private
        ├─process-nextick-args
        ├─readable-stream
        │  ├─doc
        │  │  └─wg-meetings
        │  └─lib
        │      └─internal
        │          └─streams
        ├─regenerate
        ├─regenerator-runtime
        ├─regenerator-transform
        │  ├─lib
        │  └─src
        ├─regexpu-core
        │  └─data
        ├─regjsgen
        ├─regjsparser
        │  ├─bin
        │  └─node_modules
        │      ├─.bin
        │      └─jsesc
        │          ├─bin
        │          └─man
        ├─repeating
        ├─safe-buffer
        ├─slash
        ├─source-map
        │  ├─dist
        │  └─lib
        ├─source-map-support
        ├─string_decoder
        │  └─lib
        ├─strip-ansi
        ├─supports-color
        ├─through2
        ├─to-fast-properties
        ├─trim-right
        ├─tunnel-agent
        ├─util-deprecate
        └─xtend

紧接着安装一下证书。如果你是默认安装,则使用以下命令

start %HOMEPATH%/node-mitmproxy/node-mitmproxy.ca.crt

你也可以用我包里的。然后添加到

这时候就不会出现证书错误了。紧接着你创建一个简单例子simpleConfig.js

module.exports = {
    sslConnectInterceptor: (req, cltSocket, head) => true,
    requestInterceptor: (rOptions, req, res, ssl, next) => {
		var url=rOptions.path;
		//console.log(rOptions.path);//link /?id=111
		//console.log('Visit:{rOptions.protocol}//${rOptions.hostname}:${rOptions.port}');
		//console.log('cookie:', rOptions.headers.cookie);
		if(url.indexOf("paopaoyang.com")>0)
		{
			console.log('target:'+url);
			//res.end("it's time to replace");
		}
        //res.end('hello node-mitmpoxy!');
        next();
    }
};

如此以来,当请求路径里包含paopaoyang.com的时候,就会输出target:和你请求的路径。

而这个res.end呢,就是不显示原有网页内容,直接显示你自己设定的内容。所以这里,对于我们伪造报表起到了关键性作用。我们可以判断这个请求,然后返回特定的json.就实现了伪造!关于更多nodejs的用法,你可以参考https://nodejs.org/api/fs.html

然后你就可以使用node-mitmproxy -c simpleConfig.js来启动你的套件了!下面是抄自官方说明,针对于MacOs下的方法:安装上都是一样的。导入证书这一块如下:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/node-mitmproxy/node-mitmproxy.ca.crt

具体请根据你的情况作微调。另外附上一张网页截图:

 

未经允许不得转载:卧栏听雨 » nodejs-MITM,基于代理形式的中间人套件
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址