0x00:简介

    在渗透测试的时候,很担心平时在扫WEB目录的时候,频繁的请求会容易被封IP.被封IP以后.要么等上一段时间,要么更换自己的IP.重新启动扫描器.这样的效率很低下,也很浪费自己的工作时间.

    此时,代理IP池进入了我的考虑范围.让代理+扫目录的脚本.自动化的去更新IP.不用再去担心IP是否被封.

    但是网上流传了N多的WEB目录扫描器.用别人的东西,心里都有那么点不自然,一个是担心有后门,一种是自己也想向大佬们学习.拥有自己的目录扫描器.

    本文的python脚本为纯自学后编写,如有不规范请大佬指点(望轻喷,感谢 !!!)


0x01:编写

1、代理IP采集地址

http://www.66ip.cn/

主要是免费,但是N多已经不能连接了

得自己去做验证,害!!

2、IP验证地址

https://ifconfig.me

它会显示你当前的所在IP

3、思路

首先爬取代理IP,并用正则规则给匹配出来所有IP

url="http://www.66ip.cn/nmtq.php?getnum=100"#爬取100个做例子
headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/12.0 Safari/1200.1.25'}
r=requests.get(url,headers=headers).text
ip_proxy=re.findall("((?:[0-9]{1,3}\.){3}[0-9]{1,3}:*[0-9]*)", r)#正则匹配IP
for i in ip_proxy:#用for循环取出IP并赋予i
  print (i)

    我们来继续看Python中proxies的编写规则

proxy={'协议':'ip:端口'}

继续

types=”https“
proxys={}
proxys[types.lower()]='%s'%i #把上面的i值拼接进去
print (proxys)#输出例子:{'https': '1.2.3.4:3308'}

继续来看扫描WEB的部分

r= requests.get (url,headers=headers,proxies=proxys,timeout=8).status_code #发送请求并确定状态码=200
if r==200:
  sys.stdout.write('[200] %s\n' %url)
elif r==301:
  sys.stdout.write('[--301--] %s\n' %url)
  #这里只是判断200的状态码跟301的状态码,后续可加!

思路差不多讲到这,来看成品

#/usr/bin/python3

import requests,sys,threading
from queue import Queue

#多线程实现扫描目录
class DirScan(threading.Thread):

  def __init__(self,queue):
    threading.Thread.__init__(self)
    self.queue=queue
    
  def run(self):
    #获取队列中的URL
    while not self.queue.empty():
      url=self.queue.get()

      with open('ok.txt','r') as file: list = [www.strip() for www in file.readlines()]
      headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/12.0 Safari/1200.1.25'}
      try:
        for www in list:
          tar=requests.get(url,headers=headers,proxies=eval(www),timeout=10,verify=False)
          if tar.status_code==200:#这里只显示200的状态码,需要可加其他状态码做筛选
            urls={url}
            print (list(urls))
      except Exception as e:
        pass
def start(url,count):
  queue=Queue()
  
  f=open ('dir.txt','r')
  for i in f:
    queue.put(url+i.rstrip('\n'))
#多线程  
  threads=[]
  thread_count=int(count)
  
  for i in range(thread_count):
    threads.append(DirScan(queue))
    
  for t in threads:
    t.start()
  for t in threads:
    t.join()
    
if __name__=="__main__":
  url=sys.argv[1]
  count=10
  start(url,count)

采用多线程去运行,不然单线程会很慢


注释:

需要在脚本的目录下存放WEB目录的文件,注意一点的是,路径不能有中文。

“dir.txt” 存放路径文件,例子如下

“ok.txt” 存放能用的代理IP,例子如下

运行例子

这里有个小弊端

就是用多少代理,就会出现匹配多少结果

如果你觉得不好看,可以自己加一个去重的参数


0x02:后话

一、声明:请勿做非法攻击任何网站的行为与任何未授权的行为.

后果请自行承担责任!!!

二、代码与思路有很多不足之处,请各位大佬不吝赐教,还请您优化优化.

鄙人将不断的改进,不断的的优化

© 版权声明
评论 抢沙发

请登录后发表评论