0
点赞
收藏
分享

微信扫一扫

mitmdump抓包分析selenium隐身浏览器特征检测

DT_M 2022-05-19 阅读 165

在利用selenium进行隐身模拟登录或者爬虫的时候,会被目标网站检测出selenium的特征值,从而被进行反爬了。


模拟浏览器的隐身模式和显示模式,就是是否添加headless属性值,options.add_argument('headless')。现在对这两种方式常规登录检测一下。


检测代码


from selenium import webdriver
url = 'https://intoli.com/blog/making-chrome-headless-undetectable/chrome-headless-test.html'
options = webdriver.ChromeOptions()
# options.add_argument('headless')
driver = webdriver.Chrome(options=options)
driver.get(url)
driver.save_screenshot('1.png')

显示模式浏览器特征



mitmdump抓包分析selenium隐身浏览器特征检测_显示模式


隐藏模式浏览器特征


取消上面headless的注释,然后发现ua和length出现飘红,说明这两项值需要进行修改。


mitmdump抓包分析selenium隐身浏览器特征检测_chrome_02


利用mitmdump对浏览器指纹进行修改检测,首先创建监听mitmdump文件,编写driver_check.py文件。


这里我就简单检测了一下,将useragent进行修改,然后检测后,没有无头浏览器标识


def request(flow):
for info in flow.request.headers:
if info == 'User-Agent' and info == 'User-Agent'.lower() :
value = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
flow.request.headers[info] = value

运行测试sele.py文件


from selenium import webdriver
from selenium.webdriver.chrome.options import Options


options = Options()
options.add_argument('--proxy-server=http://127.0.0.1:6666')
# options.add_argument('headless')
driver = webdriver.Chrome(options=options)
url = 'https://intoli.com/blog/making-chrome-headless-undetectable/chrome-headless-test.html'


driver.get(url)


webdriver = driver.execute_script("return window.navigator.webdriver")
print(webdriver)


language =driver.execute_script("return window.navigator.languages")
print(language)


plugins = driver.execute_script("return window.navigator.plugins")
print(plugins)
driver.save_screenshot('1.png')
# driver.close()

运行cmd命令,输入mitmdump -p 666 -s driver_check.py文件进行监听


mitmdump抓包分析selenium隐身浏览器特征检测_显示模式_03


在显示浏览器模式下,ua值是正常的


mitmdump抓包分析selenium隐身浏览器特征检测_显示模式_04


在隐身浏览器模式下,ua值是由无头标识的


mitmdump抓包分析selenium隐身浏览器特征检测_html_05


接下来在drier_check文件中注入js代码


import re


EXE_JS = 'Object.defineProperties(navigator,{webdriver:{get:() => false}});Object.defineProperty(navigator, "plugins", {get: () => new Array(Math.floor(Math.random() * 6) + 1),});Object.defineProperty(navigator, "languages", {get: function() {return ["en", "es"];}});Object.defineProperty(HTMLDivElement.prototype, "offsetHeight", {get: function() {if (this.id === "modernizr") {return 1;}return elementDescriptor.get.apply(this);},});'


def response(flow):
match = re.search(r'\.js$', flow.request.url)
if match:
# 屏蔽selenium检测
# print(flow.response.text)
flow.response.text = EXE_JS + flow.response.text
# print(flow.response.text)

输入检测结果,可以看到webdriver属性、plugins属性值等都被修改为正常值


mitmdump抓包分析selenium隐身浏览器特征检测_html_06

mitmdump抓包分析selenium隐身浏览器特征检测_html_07


发现检测值都被成功修改,修改完之后,我们在运行代码中加入正常的js注入方法就行。


mitmdump抓包分析selenium隐身浏览器特征检测_html_08


通过mitmdump我们可以对隐身浏览器进行监测,并对某些值进行修改,修改完可以对其进行检查,在检查无误后,就可以对selenium浏览器进行js注入,通过mitmdump进行抓包分析,可以轻松的对浏览器进行检查



举报

相关推荐

0 条评论