python通过mitmproxy(中间人攻击)使selenium绕过屏蔽js文件检测

思路简介

使用selenium模拟访问网站时,一般大型网站会对此有检测,从而防止登陆,此方法是通过mitmproxy充当中间人对网站发送的js文件进行拦截,并修改从而达到屏蔽网站检测的目的。
总结一下整个过程填的坑吧。。。。。
首先所需要的东西,mitmproxy包,mitmproxy证书的获取,selenium的使用(之前已经学习过了)
一开始在云服务器上操作,按上去了,chrome,以及图形化桌面。。。。
以及安装mitmproxy,以及证书的安装。
如需要截获HTTPS请求,就需要配置相关证书:mitmProxy自身提供了一套ca证书,和常见的
中间人抓包工具fidder、charles一样,在客户端配置对mitmProxy证书的信任即可以通过
pip3 install mitmproxy安装包。
接下来获取证书时,要注意先用mitmdump运行一次,才会在根目录中产生.mitmproxy,否则是进不去的。
通过pip3 install mitmproxy进行安装
而在.mitmproxy中有很多证书,其中mitmproxy-ca-cert.pem是在linux虚拟机上的。
mitmproxy获取https的内容。

  1. 运行mitmdump命令,在root目录下的.mitmproxy查找相应的ca证书: mitmproxy-ca-cert.pem
  2. 将pem证书转换成.crt:
    openssl x509 -in mitmproxy-ca-cert.pem -inform PEM -out mitmproxy-ca-cert.crt
  3. 将ca证书添加到本地ca-trust存储来安装CA证书:
    cp mitmproxy-ca-cert.crt /etc/pki/ca-trust/source/anchors/
    update-ca-trust

感觉证书应该是一开始都安装好了,只不过因为后来的一些操作不当,导致一直没有成功。。。
通过该命令挂载py文件,mitmdump -s httpproxy.py -p 9090
而httpproxy.py 既是获取到js文件后对该文件进行的处理操作
第一个是网上搜索到的代码,第二个是ppt上的代码,因为PPT显示的不全,第一段就结合改了一下。

TARGET_URL = 'https://g.alicdn.com/secdev/sufei_data/3.6.11/index.js' #这个是淘宝的index.js文件的
INJECT_TEXT = 'Object.defineProperties(navigator,{webdriver:{get:() => false}});' #js执行文件

def response(flow):
        if flow.request.url.startswith(TARGET_URL):
            flow.response.text = INJECT_TEXT + flow.response.text
            print('注入成功')
        if 'um.js' in flow.request.url or '115.js' in flow.request.url:
            # 屏蔽selenium检测
            flow.response.text = flow.response.text + INJECT_TEXT
``

import re INJECT_TEXT = 'try{Object.defineProperties(navigator,{webdriver:{get:() => false 
def response(flow): 
match = re.search(r'\.js$',flow.request.url) if match: # 屏蔽selenium检测
flow.response.text = INJECT_TEXT + flow.response.text print('注入成功') 
#flow.response.text = flow.response.text + INJECT_TEXT

挂载了py文件之后,就相当于以及开始监控了,但是因为在linux上,就是用ctrl+z直接将mitmdump -s httpproxy.py -p 9090其结束了后。就开始运行selenium上的代码了也就是机器模拟登录。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--proxy-server=http://127.0.0.1:9090')#127.0.0.1本地登录
#chrome_options.add_argument('headless')
browser = webdriver.Chrome(executable_path="C:\\Users\\31114\\Downloads\\chromedriver_win32\\chromedriver.exe",chrome_options=chrome_options)
browser.get('https://aks.meituan.com/')
web = browser.execute_script("return window.navigator.webdriver")
print (web)
time.sleep(10)
browser.close()

然后就是。。找不到服务器。。。
之后为了不用ctrl+z结束,就再服务器上开启mitmproxy服务,从本地电脑上模拟登录,然后一直是找不到数据。。。
最后不通过云服务器了,在电脑上安装了mitmproxy,挂载后,模拟登录,成功了。
最后总结一下整个过程,其实就是mitmproxy在中间,当了一个中间人,所以mitmproxy很重要,
在这里再次使用云服务器实验了一下,,我突然想起来可以在开一个连接会话傻了。。。。。。。。。。一个用来运行mitmproxy挂载,一个用来执行模拟登录,成功。。所以一定要在那个服务器上挂载的注入程序,就在哪儿执行登录,不然会获取不到数据。。
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值