Total Pageviews

Friday, 27 July 2018

wyproxy是一个Socks5代理服务器程序

HTTP/HTTPS, Socks5代理服务器, 并可以将网络请求记录保存到后台数据库.
帮助安全测试人员更加便捷的发现(客户端/APP/网页)中隐藏的接口或资源。
同时支持流量handle回放数据功能,
在HTTP Header中插入 移动/联通/电信 营业厅的免流量域名头, 实现免流量代理上网。

支持场景
  • iPhone App
  • iPad App
  • Mac OS X App
  • Android APP

帮助说明

$ python wyproxy.py -h
usage: wyproxy.py [-h] [-d] [-stop] [-restart] [-pid] [-p] [-m] [-us]

wyproxy v 1.0 ( Proxying And Recording HTTP/HTTPs and Socks5)

optional arguments:
  -h, --help           show this help message and exit
  -d, --daemon         start wyproxy with daemond
  -stop, --stop        stop wyproxy daemond
  -restart, --restart  restart wyproxy daemond
  -pid , --pidfile     wyproxy daemond pidfile name
  -p , --port          wyproxy bind port
  -m , --mode          wyproxy mode (HTTP/HTTPS, Socks5, Transparent)
  -us, --unsave        Do not save records to MySQL server
记录字段如下
github
  • method (HTTP/HTTPS/OPTIONS)
  • scheme (http/https/ftp)
  • host (www.wuyun.org)
  • port (80/8080)
  • url (https://www.wuyun.org/foo/bar.php?id=1)
  • path (/foo/bar.php)
  • extension (php)
  • query (id=1)
  • headers (response headers)
  • content (response contnet)
  • request_headers (reqeust client headers)
  • request_content (request data: liked post data)
  • status_code (200/404/403)
  • date_start (unix timestamp)
  • date_end (unix timestamp)

环境要求

  • CentOS 6.4
  • Python 2.7
  • Mysql Server

开发环境依赖

$ yum install python-devel libxml2-devel libxslt-devel libjpeg-turbo-devel libffi-devel mysql-devel

编译安装Python2.7环境

$ wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
$ tar zvxf Python-2.7.8.tgz
$ cd Python-2.7.8
$ ./configure
$ make
$ make install
$ mv /usr/bin/python /usr/bin/python2.6.6  
$ ln -s /usr/local/bin/python2.7 /usr/bin/python
重启bash终端, 就拥有新的Python2.7环境了

安装新的Python2.7环境下的pip

https://pip.pypa.io/en/latest/installing/
$ wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
$ python get-pip.py
yum在Python2.7环境下无法使用,需要让它使用python2.6.6的环境
$ vim /usr/bin/yum # 修改第一行的程序执行环境
#!/usr/bin/python   ->    #!/usr/bin/python2.6.6

获取代码

$ yum install git
$ mkdir src
$ cd ./src
$ git clone https://github.com/ring04h/wyproxy.git

安装python依赖库

$ pip install -r requirements.txt

安装MYSQL数据库

$ yum install mysql-server
$ service mysqld start
$ mysql -uroot -p < wyproxy.sql

性能优化

MYSQL配置调优, 有时候网页的content内容size大于1M,
需要修改MYSQL配置调优的全局配置文件max_allowed_packet, 允许插入的数据大小为64M.
$ vim /etc/my.cnf
[mysqld] # 位置
max_allowed_packet = 64M
Open Max file option:
$ echo ulimit -HSn 65536 >> /etc/rc.local
$ echo ulimit -HSn 65536 >> ~/.bash_profile

开发环境

或者你可以配置和启动一个virtualenv环境来独立运行wyproxy.
$ virtualenv --no-site-packages wyproxy
$ cd wyproxy
$ source bin/activate

启动wyproxy

如果不想将代理记录保存到数据库, 必须指定--unsave参数。
普通方式启动
$ python wyproxy.py -p 8080 -m socks5 --unsave
守护进程方式启动
$ python wyproxy.py -p 8080 -m socks5 --unsave -d

为了能打开HTTPS网站, 需要在客户端机器上,安装SSL证书

iPhone 移动端, 使用Safari浏览器打开

https://raw.githubusercontent.com/ring04h/wyproxy/master/ssl/mitmproxy-ca.pem
会有如下图片提示, 点击右上角安装, 使证书状态变为绿色,生效。
安装界面
install_pem
成功后的界面
install_pem_succ

Mac OS X上, 安装SSL证书 并信任:

$ wget https://raw.githubusercontent.com/ring04h/wyproxy/master/ssl/mitmproxy-ca.pem
在Finder中双击运行mitmproxy-ca.pem文件,
会打开keychain access工具, 选择mitmproxy的证书 key_manager
选择'始终信任该证书', 即可生效, 便能成功捕捉所有HTTPS网站的流量 .key_trust

iPhone配置全局Socks5代理支持

用代理自动配置文件pac给iPhone和iPad设备添加socks代理
首先启动wyproxy代理服务器, 设置代理类型为socks5
$ python wyproxy.py -p 8080 -m socks5 -d
找一台开启了HTTPD服务的服务器, 新建一个.pac文件, 内容如下
function FindProxyForURL(url, host)
{
    if (isInNet(host, "192.168.199.0", "255.255.255.0"))
        return "DIRECT";

    return "SOCKS 106.75.147.67:8080";
}
设置iPhone的无线配置, 代理处填上你的HTTPD服务器地址
http://s5.wuyun.org/s5.pac
enable_s5
这样iPhone上面, 所有的流量,全都会经过wyproxy的socks5代理了

使用技巧

在单服务器运行多个代理服务

运行socks5服务, 监听1080端口
$ python wyproxy.py -p 1080 -m socks5 -pid /tmp/1080.pid -d
wyproxy daemon starting...
wyProxy daemon started successfully 
2016-09-14 17:11:20,333 [INFO] wyproxy is starting...
2016-09-14 17:11:20,334 [INFO] Listening: 0.0.0.0:1080 socks5
2016-09-14 17:11:20,390 [INFO] wyproxy started successfully...
停止1080端口的服务
$ python wyproxy.py -stop -pid /tmp/1080.pid
wyproxy daemon stopping...
wyproxy daemon stopped successfully
运行socks5服务, 监听1081端口
$ python wyproxy.py -p 1081 -m socks5 -pid /tmp/1081.pid -d
wyproxy daemon starting...
wyProxy daemon started successfully 
2016-09-14 17:11:27,564 [INFO] wyproxy is starting...
2016-09-14 17:11:27,566 [INFO] Listening: 0.0.0.0:1081 socks5
2016-09-14 17:11:27,583 [INFO] wyproxy started successfully...
停止1081端口的服务
$ python wyproxy.py -stop -pid /tmp/1081.pid
wyproxy daemon stopping...
wyproxy daemon stopped successfully
 

设置iptables防火墙转发

$ iptables -t nat -A PREROUTING -s 10.8.0.0/24 -i ppp+ -p tcp -m multiport --dports 80,81,82,83,88,8000,8001,8002,8080,8081,8090 -j DNAT --to-destination 10.8.0.1:8080
$ iptables -t nat -A PREROUTING -s 10.8.0.0/24 -i ppp+ -p tcp -m multiport --dports 443,8443 -j DNAT --to-destination 10.8.0.1:8080
$ iptables-save > /etc/sysconfig/iptables
$ service iptables restart

参考

 
from  https://github.com/ring04h/wyproxy
-------

我的补充说明
 
如果你的linux vps的python环境有问题,可这样做:
mv /usr/bin/python /usr/bin/python-old
 
然后重新编译python-2.7.8:

wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
tar zvxf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=/usr/local/python-2.7.8
make && make install
echo 'export PATH=$PATH:/usr/local/python-2.7.8/bin' >> ~/.profile && source ~/.profile
 
root@umh:/usr/local/python-2.7.8# which python
/usr/local/python-2.7.8/bin/python
root@umh:/usr/local/python-2.7.8# wget https://bootstrap.pypa.io/get-pip.py
root@umh:/usr/local/python-2.7.8# 
root@umh:/usr/local/python-2.7.8# ls
bin  get-pip.py  include  lib  share
root@umh:/usr/local/python-2.7.8# ./bin/python get-pip.py
 
python-2.7.8环境安装完成。
cd ~
git clone https://github.com/ring04h/wyproxy 
cd wyproxy
/usr/local/python-2.7.8/bin/pip install -r requirements.txt
python wyproxy.py -p 38025 -m socks5 --unsave
稍后片刻,会显示:
2018-08-01 00:56:05,703 [INFO] wyproxy is starting...
2018-08-01 00:56:05,703 [INFO] Listening: 0.0.0.0:38025 socks5
2018-08-01 00:56:05,763 [INFO] wyproxy started successfully...
 
但是命令:python wyproxy.py -p 38025 -m socks5 --unsave 是运行在前台的,容易
退出,我们可利用systemd把该命令运行为service:
nano /etc/systemd/system/wyproxy.service 
内容为:
[Unit]
After=network.target

[Service]
WorkingDirectory=/root/wyproxy/
ExecStart=/usr/local/python-2.7.8/bin/python wyproxy.py -p 38025 -m socks5 --unsave
Restart=always

[Install]
WantedBy=multi-user.target
 
然后运行:
systemctl start wyproxy
systemctl enable wyproxy
服务器端搭建完成。
 
然后在mac机器上,按照上面的“Mac OS X上, 安装SSL证书并信任”那部分插图的说明, 
导入证书mitmproxy-ca.pem到mac系统里。
然后在chrome的switchyomega插件界面里,新建情景模式,命名为wyproxy,代理协议选择socks5,代理服务器栏填写vps的ip,代理端口填写38025. 然后点击界面左下角的“应用选项”。
选择情景模式wyproxy,chrome即可翻墙。
如果是访问www.youtube.com,需要刷新chrome 2-3次,才能看到youtube的页面。
----------

还有一个go版:https://github.com/ring04h/wyproxy2