内容简介:妖娆的代理工具shadowProxy – 神出鬼没的切换IP地址
前言
在渗透测试过程中,往往会遇到特别“小气”的目标,稍微碰一下就封IP。这种情况下,我们很自然的想到通过网上大量的免费代理进行IP隐匿。
那么问题来了,难道拿到哪些个代理,每用一次手动换下一个代理? 这太像火铳的工作方式了,想想就心累了。
so,小弟就来造一台机关枪,突突突突突… 想想就挺带感。
https://github.com/odboy/shadowProxy
功能实现
代理功能
主要使用 python 内建的http.server和http.client库实现。
http.server相关的代码解读可参考我前一篇文章 Python源码分析之从SocketServer到SimpleHTTPServer
主要代理功能代码:
def do_GET(self):
if self.path == 'http://shadow.proxy/':
self.send_cacert()
# print("%s download %s" % (self.client_address, self.cacert))
return
req = self
content_length = int(req.headers.get('Content-Length', 0))
req_body = self.rfile.read(content_length) if content_length else None
if req.path[0] == '/':
if isinstance(self.connection, ssl.SSLSocket): # ssl.SSLSocket or ssl.SSLContext
req.path = "https://%s%s" % (req.headers['Host'], req.path)
else:
req.path = "http://%s%s" % (req.headers['Host'], req.path)
u = urlparse(req.path)
scheme, netloc= u.scheme, u.netloc
assert scheme in ("http", "https")
if netloc:
req.headers['Host'] = netloc
setattr(req, 'headers', self.filter_headers(req.headers))
retryFlag = 0
while retryFlag < 10 :
try:
target = (scheme, netloc)
# 输入URL的协议和主机,返回可用的连接HTTP(S)Connection
proxy = proxyCoor.dispatchProxy(target)
if proxy is None:
print("未能获取到可用Proxy...(可能是Proxy耗尽...)")
self.send_error(502,"proxy resource RUN OUT!!!")
return
print("%s --> [ %d ] %s" % (proxy, retryFlag + 1, req.path))
if proxy.split("://")[0] == "http":
conn = http.client.HTTPConnection(proxy.split("://")[1], timeout=self.timeout)
elif proxy.split("://")[0] == "https":
conn = http.client.HTTPSConnection(proxy.split("://")[1], timeout=self.timeout)
conn.request(self.command, req.path, req_body, dict(req.headers))
res = conn.getresponse()
# res.response_version = 'HTTP/1.1' if res.version == 11 else 'HTTP/1.0'
res_body = res.read() # Transfer-Encoding并不需要特殊处理(除了Content-Length外)
except Exception as e:
retryFlag += 1
# self.send_error(502)
# return
else:
try:
if 'Content-Length' not in res.headers:
res.headers['Content-Length'] = str(len(res_body))
setattr(res, 'headers', self.filter_headers(res.headers))
self.send_response_only(res.status, res.reason)
for keyword in res.headers:
self.send_header(keyword, res.headers.get(keyword, ""))
self.end_headers()
self.wfile.write(res_body)
self.wfile.flush()
except:
pass
finally:
retryFlag = 9999 # 极大值,结束重试。
conn.close()
# 其他方法重用GET的方法。
do_HEAD = do_GET
do_POST = do_GET
do_PUT = do_GET
do_DELETE = do_GET
do_OPTIONS = do_GET
do_TRACE = do_GET
代理协调者
主要实现:
导入代理列表
验证代理的可用性和匿名性
维护目标站点、代理列表二维表
根据维护的二维表,反馈可用的代理地址。
另外,我用的代理列表是从kuaidaili.com上爬取的,但代理的质量比较差,很头大。之前还用过xicidaili,情况也差不多。
验证公网IP的网站有如下几个:
http://ip.chinaz.com/getip.aspx
https://ipv4bot.whatismyipaddress.com/
测试验证
验证代码
透过shadowProxy访问http://ip.chinaz.com/getip.aspx,从而直观查看代理效果。
import requests
import time
i = 0
while True:
try:
i += 1
r =requests.get("http://ip.chinaz.com/getip.aspx",proxies={"http":"http://127.0.0.1:8088"},timeout=10)
if r.status_code == 200:
msg = "第 %d 次请求 :white_check_mark:\t%s"%(i,r.text)
else:
msg = "第 %d 次请求 :o:\t%d"% (i, r.status_code)
time.sleep(2)
except KeyboardInterrupt:
print('\r***********************\n\t用户中断\t\n***********************')
break
except Exception as e:
msg = "第 %d 次请求 :exclamation:\t%s" % (i, e )
time.sleep(2)
finally:
print(msg)
效果展示
动图展示 : test_shadowProxy.gif
枪是好枪,但还是存在一些问题的。
缺弹少药- 通过 工具 爬取到的代理很多重复,很多不可用,只有百八十个。
弹药质量差- 获取到的代理,很多无法传输大数据包(中断),小包也不稳定。
机枪卡壳- 由于上述问题,所以工具容错能力/重试功能有待提升。(后续考虑提升的点)
PS:后续代码完善后,可以考虑开源发布。
2018-01-10 Update
目前代理加入了自动重试功能,使其能更稳定的进行查询。
同时,找了个还算不错的proxylist。 https://github.com/fate0/proxylist
目前便可以比较顺畅的使用了:
开源发布
https://github.com/odboy/shadowProxy
生成&安装证书
生成证书
shadowProxy git:(master) ✗ ll total 112 -rw-r--r-- 1 bingo staff 573B Jan 10 16:42 PCtest.py -rw-r--r-- 1 bingo staff 5.9K Jan 10 16:42 ProxyCoordinator.py -rw-r--r-- 1 bingo staff 14B Jan 10 16:42 README.md drwxr-xr-x 3 bingo staff 96B Jan 10 16:42 __pycache__ -rw-r--r-- 1 bingo staff 100B Jan 10 16:42 proxylist-4.txt -rw-r--r-- 1 bingo staff 19K Jan 10 16:42 proxylist.txt -rwxr-xr-x 1 bingo staff 302B Jan 10 16:42 setup_https_intercept.sh -rw-r--r-- 1 bingo staff 11K Jan 10 16:42 shadowProxy.py shadowProxy git:(master) ✗ ./setup_https_intercept.sh # 直接运行脚本,生成根证书 Generating RSA private key, 2048 bit long modulus ........................................................................................................................................+++ ..................................................................+++ e is 65537 (0x10001) Generating RSA private key, 2048 bit long modulus .....................................................................................................................................+++ ...................+++ e is 65537 (0x10001)
安装证书
在浏览器设置代理,指向 http://127.0.0.1:8088 , 然后访问 http://shadow.proxy/,即可弹出证书安装。(不同浏览器可能有所不同 )
安装后,可以访问https网站。
使用测试
➜ shadowProxy git:(master) ✗ python shadowProxy.py -h
.--.
|o_o | ------------------
|:_/ | < Author: Mr.Bingo >
// \ \ ------------------
(| | ) < oddboy.cn >
/'\_ _/`\ ------------------ \___)=(___/ usage: shadowProxy.py [-h] [--bind BIND] [--port PORT] [--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [--proxyListFile PROXYLISTFILE] optional arguments: -h, --help show this help message and exit --bind BIND Default: 0.0.0.0 --port PORT Default: 8088 --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL} Default: WARNING --proxyListFile PROXYLISTFILE 代理列表文件 ➜ shadowProxy git:(master) ✗ python shadowProxy.py .--. |o_o | ------------------ |:_/ | < Author: Mr.Bingo > // \ \ ------------------ (| | ) < oddboy.cn > /'\_ _/`\ ------------------
\___)=(___/
初始化代理池 本地IP :: 36.110.16.74
导入代理池::: proxylist.txt
成功导入 110 个代理
Serving HTTP on 0.0.0.0 port 8088 (http://0.0.0.0:8088/) ...
直接访问站点进行测试。
由于该工具主要基于网上免费的代理进行IP隐匿的,所以稳定性仍然不够好,所以只建议用于特定的请求包测试。 在使用过程中遇到什么问题,欢迎给我邮件,我会进行修复完善,如果可以,给我的GitHub点颗星星,谢谢!
本站文章均属原创,转载请注明出处!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Egret场景切换管理类切换和单例使用方法
- Spring项目中使用两种方法动态切换数据源,多数据源切换
- Pear Admin Ant 1.1.0.Release 正式发布,新增布局切换、主题切换、工作空间
- MySQL -- 主从切换
- Android自动切换夜间主题
- 动态切换数据源原理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design systems
Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!
Markdown 在线编辑器
Markdown 在线编辑器
RGB HSV 转换
RGB HSV 互转工具