zoukankan      html  css  js  c++  java
  • 黑板客 -- 爬虫闯关 -- 关卡04

    爬虫闯关链接:


    1.  http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/


    2.  http://www.heibanke.com/accounts/login


    知识点:cookie & session , csrf , Web编程,多线程密码枚举


    提示:和第三题一样,看清楚,题目在http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/登录后显示,而不是URL链接2的登录界面。从URL 1 或URL 2中获取Cookie(CSRFTOKEN)登录,然后得到一个提示密码很长的页面。随便输入帐号密码,会跳出一个页面让你找密码,密码文档页面加载非常慢,是由于后端人为限制时间,密码位置随机生成,从页数与行数可知密码一共100位。为了加快猜测时间,我们要为每一个密码页面开一个线程(多线程处理),提高枚举密码的速度。


    参考代码:


    #!/usr/bin/env python
    # encoding: utf-8
    
    import requests
    import sys
    import re
    import threading
    reload(sys)
    
    sys.setdefaultencoding("utf-8")
    
    csrf = ""
    username = "Peter"
    password = "112233"
    final_password = ""
    
    payload_login = {
    	"username":username,
    	"password":password,
    	"csrfmiddlewaretoken":csrf
    }
    
    dict = {}
    thread = []
    
    website_signUp = "http://www.heibanke.com/accounts/login"
    website_login = "http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/"
    website_PWlist = "http://www.heibanke.com/lesson/crawler_ex03/pw_list/?page=%s"
    
    s = requests.Session()
    s.get(website_signUp)
    csrf = s.cookies["csrftoken"]
    payload_login["csrfmiddlewaretoken"] = csrf
    s.post(website_login,data=payload_login)
    csrf = s.cookies["csrftoken"]
    
    
    def GetPassword(page):
    	global dict
    	while True:
    		resp = s.get(website_PWlist%page)
    		word_pos = re.findall('<td data-toggle="tooltip" data-placement="left" title="password_pos">(d+)</td>', resp.content)
    		word_val = re.findall('<td data-toggle="tooltip" data-placement="left" title="password_val">(d+)</td>', resp.content)
    		for i in range(len(word_pos)):
    			dict[int(word_pos[i])] = word_val[i]
    			print word_pos[i]+" -- "+word_val[i]
    		if len(dict)==100:
    			break
    
    def main():
    	global dict
    	global final_password
    	for i in range(1,14):
    		t = threading.Thread(target=GetPassword,args=(i,))
    		thread.append(t)
    	for i in thread:
    		i.start()
    		print "Thread Runing"
    	for i in thread:
    		i.join()
    		print "Thread Join"
    	if len(dict)==100:
    		k = dict.keys()
    		k.sort()
    		for i in range(len(dict)):
    			final_password += dict[k[i]]
    		print "[+]FOUND:" + final_password
    
    
    
    if __name__ == '__main__':
    	main()
    


  • 相关阅读:
    C#获取类以及类下的方法(用于Asp.Net MVC)
    ES6学习笔记
    在nuget上发布自己的程序集教程
    C#创建IIS站点及相应的应用程序池,支持IIS6.0+Windows Server 2003. 使用Builder设计模式
    ASP.Net Mvc实现自定义User Identity用户身份识别系统(2)
    ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)
    C#实现.ini文件读写操作
    C#实现注册表 LocalMachine 目录下CURD工具类
    博客园打赏功能(未申请下js权限使用二维码打赏功能)
    WebServeice 动态代理类
  • 原文地址:https://www.cnblogs.com/csnd/p/12897056.html
Copyright © 2011-2022 走看看