zoukankan      html  css  js  c++  java
  • 我绕过验证的模拟登陆的崎岖倒流

    由于好奇一直想试试模拟登陆,然后就把目标定在某所大学的登录网站上

    大至样式就是这样的

    通过界面我们大致可以了解到请求可能会后username,password,验证码,记住用户

    接着使用burp进行抓包得:

    可以通过post请求知道dlm就是uesrname,hexMd5是加密后的password(加密手段应该是MD5),cookie就是记住用户

    ...等等,怎么没有验证码,真奇怪,算了待会再看验证码把

    通过浏览器中查看源码,得:

    我们看出来dlmm是原始密码,而hexMd5是通过md5加密后的值

    而后我的好奇心又回到了验证码上,源码显示:

    哈哈哈,验证码居然在明面上,那简直太简单了,抓一下试试,代码如下:

    1 import re
    2 def reg_html(html):
    3     parttern = re.compile(r'<input type="hid.*')    
    4     yzm = parttern.findall(html)
    5     return yzm

    但结果也大失所望,抓到的value值为空,可能是我对前端知识不太了解,愿意坚持看下去

    发现这个验证码调用了一个js的generateMixed函数

    找到这个函数 得:

    大致看明白了,别的还好说,关键这个random就让人没法弄啊。苦恼想放弃.....回家!

    在路上,我问了一个师哥,我说我的post请求里没有验证码这是什么情况,他告诉我两种情况:

    1 验证码在只是在前端作为一个check,可以绕过

    2 验证码可能和用户密码等参数分着发过去了

    我不解,回去用fiddler又做了一次抓包,post的数据中确实没有验证码,所以我猜想是第二种可能

    于是我写了个脚本进行验证 代码如下:

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 import re
     5 import requests
     6 from bs4 import BeautifulSoup
     7 import hashlib
     8 
     9 URL = 'http://xxxxx.xxxxxx.edu.cn/login.login.action'                    #login_url
    10 URL_p = 'http://xxxxx.xxxxxx.edu.cn/login.toStudentJsp.action?math=4636' #跳转url,可以通过js找到
    11 URL_p2 = 'http://xxxxxx.xxxxxx.edu.cn/stumiddle.jsp'                      #user_info_url
    12  
    13 def md5Encode(string):
    14     m = hashlib.md5()
    15     m.update(string)
    16     return m.hexdigest()
    17  
    18 def post_html(url,url2,url3):
    19     session = requests.Session()
    20     headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1581.2 Safari/537.36'}
    21     payload = {'dlm':'xxxxxxxxxxxxxxx',
    22                'hexMd5':'%s'%md5Encode('xxxxxxxxxxxxxx'),
    23                'cookie':'0'
    24                }
    25     session.post(url,data=payload,headers=headers)
    26     session.get(url2,headers=headers)
    27     text = session.get(url3,headers=headers).text
    28     return text
    29 
    30 def parser_html(html):
    31     soup = BeautifulSoup(html,'html.parser')
    32     return soup.prettify()
    33     
    34     
    35 if __name__ == '__main__':
    36     parser_html(post_html(URL,URL_p,URL_p2))

    其中URL_p可以通过fiddler抓包得到或者通过js的跳转代码也可以找到,其中math=4636,如果看到js源码,这个就是js随机生成的一个4位数,可能为了标记每次的用户信息页面不一样吧

    URL_p2通过fildder可以找到

    运行这个脚本,如果我们的username或者password有错误,会返回这个text

    但如果正确,则会get到正确页面,下图是上面脚本运行后,fiddler抓到的

    模拟登陆成功了!,完全绕过了页面的验证码环节。

    那么话说回来,既然有账号密码,我用的着这么麻烦,我个人认为有两方面原因

    一是为了练习一下模拟登陆

    二是可以 b r u t e  f o r c e 阿,但我有个不好的消息,这所大学的登录系统,如果5次尝试失败,会将username冻住30分钟。这真是杀敌一千自损八百啊,

    但如果你要真想让这个用户崩,你可以写一个30钟登录5次的模拟登陆脚本,让该用户始终上不了。

    haha,不聊了,看电视剧去了

  • 相关阅读:
    hard example mining(困难样本挖掘)
    Docker
    cmake使用教程
    CFENet: An Accurate and Efficient Single-Shot Object Detector for Autonomous Driving
    Week1
    To-Read List
    《人性的弱点》读书笔记及读后感
    总结计划:2018:上半年——毕业前
    TCP网路程序设计
    Linux 串口驱动设计二
  • 原文地址:https://www.cnblogs.com/fuzzier/p/6000548.html
Copyright © 2011-2022 走看看