最新消息:

用一个脚本来发现网站可能的访问链接

代码编写 pang0lin 70浏览 0评论

有时候我们经常遇到这样一种状况,在收集目标的相关站点的时候。可能会有某些站点直接访问时一个空白页面。也就是我们不知道网站的目录结构。

这个时候最简单的做法是用google搜索,看一下可能泄露的链接地址

然后再进一步的做法是打开御剑之类的后台爆破软件,看能不能运气很好的爆出一点有用的信息。

但是一般后台爆破类的软件,能爆破的字典大多是针对后台地址的,然而我们目前来说只是想找到更多能够让我们访问的链接。所以,我根据自己平时的编程习惯,合理猜测基本上程序员在写代码的时候对于文件和目录的命名方式都是基于一个常见的英文单词来构造的。

计算机编程中常见的英文单词有哪些呢?https://www.shanbay.com/wordbook/104791/

从网上找一个,然后把所有的单词趴下来之后,组成一个字典。wordlist

然后再基于该字典,编写一个自动发现网站目录和文件的工具

#!/usr/bin/python
# coding=utf-8

import requests
from multiprocessing.dummy import Pool

base_url = "http://x.com/"

results = []
words = []
handler = open("wordlist.txt", "r")
while True:
    line = handler.readline().strip()
    if line == "":
        break
    if line not in words:
        words.append(line)

def record(url):
    handler = open("results1.txt", "a")
    handler.write(url + "\n")
    handler.close()

def isAliveUrl(url):
    global results
    print "Trying Url:" + url
    try:
        res = requests.get(url, allow_redirects=True, verify=False, timeout=2)
        if res.status_code == 200 and len(res.content) > 5:
            record(url)
            print "Found:" + url
            results.append(url)
            return True
        else:
            print "Not Found!!!"
    except:
        pass
    return False

def isAliveDir(url):
    global results
    print "Trying Dir:" + url
    try:
        res = requests.get(url, allow_redirects=False, verify=False, timeout=2)
        if res.status_code == 403:
            record(url)
            print "Found:" + url
            getDirFile(url)
            results.append(url)
            return True
        else:
            print "Not Found!!!"
    except:
        pass
    return False

def getDirFile(url):
    global results
    # 获取当前url下面所有可能存在的目录
    pool1 = Pool(50)
    for word in words:
        try:
            t_url = url + word + "/"
            pool1.apply_async(isAliveDir, (t_url,))
        except:
            pass
    # 获取当前url下面所有可能存在的文件
    pool2 = Pool(50)
    for word in words:
        exts = [".php", ".jsp", ".html", ".htm"]
        for ext in exts:
            t_url = url + word + ext
            pool2.apply_async(isAliveUrl, (t_url,))
    pool2.close()
    pool2.join()

getDirFile(base_url)

print results

递归的爆破方式,无限制的多线程(可能会线程数撑得很高,我实际用的过程中到4000多线程)

转载请注明:我是穿山甲,小弟穿山乙 » 用一个脚本来发现网站可能的访问链接

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址