python3 实现多域名批量访问特定目录(一)

渗透测试之批量处理同一框架CMS系统漏洞

当我们做多网站的渗透测试时,会发现很多站点采用的都是同类型的CMS框架,只要我们发现一个漏洞,那么我们可以批量处理这一类站点,高效测试,如果不知道该站点的框架时,也可以使用此脚本盲测。

具体实现代码如下

import time
import requests
import asyncio
import aiohttp

def open_file(file_name,status,url=None):   #打开检测的文件
    with open(file_name ,status) as f:
        if status == "r":
            url_list = f.readlines()
            return url_list
        else:
            f.write(url)
            f.write("\n")
# print(url_list)
def deal_url(url_list):   #拼接特定目录
    deal_url = []
    for url in url_list:
        url = url.strip()
        url += "/www.rar"    #输入检测的特定目录
        deal_url.append(url)
    return deal_url

async  def request_url(url):   #发起请求
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cache-Control": "max-age=0",
        "Connection": "keep-alive",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
    }    
    print(url)
    try:
        async with aiohttp.ClientSession() as session:
            async with session.get("http://" + url, headers=headers) as resp1:  ###aiohttp模块中ClientSession方法,这两句方法最稳妥,也有session=aiohttp.ClientSession(),resp=session.get(item['image_url']),但是可能会报错,如果不报错,可以使用这种方法,报错就使用上面的代码
                if resp1.status == 200:
                    open_file("test_V.txt", "a", url)
            async with session.get("https://" + url, headers=headers) as resp2:  ###aiohttp模块中ClientSession方法,这两句方法最稳妥,也有session=aiohttp.ClientSession(),resp=session.get(item['image_url']),但是可能会报错,如果不报错,可以使用这种方法,报错就使用上面的代码
                if resp2.status == 200:
                    open_file("test_V.txt", "a", url)  
    except Exception as e:
        print(e)

def main():
    url_list = open_file("test.txt","r")   #待检测的域名文件
    tasks = [asyncio.ensure_future(request_url(url)) for url in deal_url(url_list)]  # 开启协程多任务队列,该语句是列表推导式,列表的简写,与上面两句等效,但是该句是利用协程,多个队列一起进行
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))  # 将任务注册到事件循环,并启动任务

if __name__ == '__main__':
    s = time.time()
    main()
    print(time.time() - s)

小结:这个异步执行,时间还不是很快,后期学习了其它方法,进一步完善。

posted @ 2019-03-18 21:55  g7y12  阅读(293)  评论(0编辑  收藏  举报