Python实现随机延迟WEB目录文件扫描

搬了一年的砖,手糙得不会写代码了。闲来无聊写了个WEB目录文件扫描的小py,实现延迟随机时间,单线程,有WAF时挂个字典随机延迟扫着就行。

后期准备持续完善功能,集成一些常用的测试项,代码多了改成OO。

功能单一,主要练手,欢迎指正,代码如下:

  1 # -*- coding: iso-8859-1 -*-
  2 __author__ = ‘BT‘
  3
  4 import urllib2
  5 import sys
  6 import getopt
  7 import time
  8 import random
  9
 10 global dic_file   #dictionary file
 11 global res_file   # result file
 12 global test_url   # test url
 13 global tar_lan    # target language
 14 global sca_delay   # scanner delay
 15 global sca_depth   # scanner depth
 16 global random_time_upper_limit    # upper limit of random delay
 17 global res_file_fp  # result file point
 18 dic_file = ‘‘
 19 res_file = ‘‘
 20 test_url = ‘‘
 21 tar_lan = ‘‘
 22 sca_delay = 0
 23 sca_depth = 1
 24 random_time_upper_limit = 0
 25 res_file_fp = None
 26
 27 def Logo():
 28     print
 29     print ‘  |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|‘
 30     print ‘  |                                          |‘
 31     print ‘  |    ====    @-**[email protected]                        |‘
 32     print ‘  |   ||   >>    ||      !        !          |‘
 33     print ‘  |   || *       ||      ! +   +  ! *   *    |‘
 34     print ‘  |   ||   >>    ||      ! +   +  ! *   *    |‘
 35     print ‘  |    ====       \  ___ \   * #  \   * $    |‘
 36     print ‘  |                                          |‘
 37     print ‘  |__________________________________________|‘
 38     print
 39
 40 def Usage():
 41     print ‘WebFucking.py usage\nVersion 1.0‘
 42     print ‘-h, --help: print help message‘
 43     print ‘-f, --file: choose dir file‘
 44     print ‘-o, --output: output the result to a file‘
 45     print ‘-u, --url: type test url‘
 46     print ‘-l, --lan: type the target site lan, such as php,asp,aspx,jsp ‘
 47     print ‘-d, --delay: scanner delay, x seconds‘
 48     print ‘-r, --random: upper limit of random delay‘
 49     print ‘-p, --dePth: scanner depth‘
 50
 51 def main(argv):
 52     global dic_file
 53     global res_file
 54     global test_url
 55     global tar_lan
 56     global sca_delay
 57     global sca_depth
 58     global random_time_upper_limit
 59     global res_file_fp
 60
 61     Logo()
 62
 63     try:
 64         opts, args = getopt.getopt(argv[1:], ‘hf:u:l:o:d:r:p:‘, [‘help‘, ‘file=‘, ‘url=‘, ‘lan=‘, ‘output=‘, ‘delay=‘, ‘random=‘, ‘depth=‘])
 65     except getopt.GetoptError, err:
 66         print str(err)
 67         Usage()
 68         sys.exit(2)
 69
 70     for o, a in opts:
 71         if o in (‘-h‘, ‘--help‘):
 72             Usage()
 73             sys.exit(1)
 74         elif o in (‘-f‘, ‘--file‘):
 75             dic_file = a
 76         elif o in (‘-o‘, ‘--output‘):
 77             res_file = a
 78             try:
 79                 res_file_fp = open(res_file, "a")
 80             except IOError:
 81                 print >> sys.stderr, "File could not be opened"
 82                 sys.exit(1)
 83         elif o in (‘-u‘, ‘--url‘):
 84             # 判断URL是否结尾为/
 85             if a[len(a)-1] != ‘/‘:
 86                 a += ‘/‘
 87             test_url = a
 88         elif o in (‘-l‘, ‘--lan‘):
 89             tar_lan = a
 90         elif o in (‘-d‘, ‘--delay‘):
 91             sca_delay = float(a)
 92         elif o in (‘-p‘, ‘--depth‘):
 93             sca_depth = int(a)
 94         elif o in (‘-r‘, ‘--random‘):
 95             random_time_upper_limit = float(a)
 96         else:
 97             print ‘unhandled option‘
 98             sys.exit(3)
 99
100     do_scanner(test_url, sca_depth)
101
102 def do_scanner(url = ‘‘, depth = 1):
103     ‘‘‘
104     the main method to scanner dir and file
105     :param url: final test url
106     :param depth: scanner depth
107     :return: no return
108     ‘‘‘
109     global res_file_fp
110     global tar_lan
111     if depth < 1:
112         return
113
114     # open file
115     try:
116         fp = open(dic_file, "r")
117     except IOError:
118         print >> sys.stderr, "File could not be opened"
119         sys.exit(1)
120     key = fp.readline()
121     while key:
122         if key[len(key)-1] == ‘\n‘: # 判斷最後一位是否爲回車
123             key = key[:len(key)-1]
124
125          # dir scanner
126         fin_url1 = url + key + ‘/‘
127         rsp_code1 = get_response_code(fin_url1)
128         print fin_url1 + ‘--------‘ + str(rsp_code1)
129         if res_file_fp != None:
130             res_file_fp.write(fin_url1 + ‘--------‘ + str(rsp_code1) + ‘\n‘)
131             res_file_fp.flush()
132         # file scanner
133         if tar_lan != ‘‘:
134             fin_url2 = url + key + ‘.‘ + tar_lan
135             rsp_code2 = get_response_code(fin_url2)
136             print fin_url2 + ‘--------‘ + str(rsp_code2)
137             if res_file_fp != None:
138                 res_file_fp.write(fin_url2 + ‘--------‘ + str(rsp_code2) + ‘\n‘)
139                 res_file_fp.flush()
140
141         # recursion the next scanner
142         if rsp_code1 != 404:    # when dir response code not equals 404
143             do_scanner(fin_url1, depth-1)
144
145         key = fp.readline()
146     fp.close()
147
148 def get_response_code(url = ‘‘):
149     ‘‘‘
150     input url, return response code, and delay x seconds
151     :param url: final test url
152     :return: response code
153     ‘‘‘
154     global  sca_delay
155     global random_time_upper_limit
156
157     # sleep random time
158     sleep_time = sca_delay + random.uniform(0,random_time_upper_limit)
159     time.sleep(sleep_time)
160
161     response = None
162     try:
163         response = urllib2.urlopen(url)
164     except urllib2.URLError as e:
165         if response:
166             response.close()
167         return e.code
168     if response:
169         response.close()
170     return 200
171
172 if __name__ == ‘__main__‘:
173     main(sys.argv)
时间: 2024-10-16 05:47:06

Python实现随机延迟WEB目录文件扫描的相关文章

Web目录全能扫描工具DirBuster

Web目录全能扫描工具DirBuster Kali Linux提供的目录扫描工具DirBuster支持全部的Web目录扫描方式.它既支持网页爬虫方式扫描,也支持基于字典暴力扫描,还支持纯暴力扫描.该工具使用Java语言编写,提供命令行(Headless)和图形界面(GUI)两种模式.其中,图形界面模式功能更为强大.用户不仅可以指定纯暴力扫描的字符规则,还可以设置以URL模糊方式构建网页路径.同时,用户还对网页解析方式进行各种定制,提高网址解析效率.

linux web目录文件全备脚本

#!/bin/bash#文件全备脚本#删除7天以前的文件#调用方法#yxy #www.sql8.net#[email protected]#2014-08-20#请主意所有路径都为全整目录#sh filebak.sh  要备份的目标目录 备份文件存放路径 保留文件的天数  #sh filebak.sh  /home/wd/wd/wd /home/wd/wd/bakup 7#sh filebak.sh  /home/dd/dd/dd /home/dd/dd/bakup 7 #pathpath=$1

星外虚拟主机跨web目录文件读取漏洞

星外虚拟主机跨目录读取文件漏洞,需要一定条件. 问题发生在以下文件,这些文件都没有严格的设置执行权限,当前的IIS用户能够顺利的利用它们执行命令: c:\windows\7i24IISLOG.exe c:\windows\7i24IISLOG2.exe c:\windows\7i24IISLOG3.exe c:\windows\7i24IISLOG4.exe c:\windows\7i24tool.exe c:\windows\rsb.exe 这些文件貌似是星外处理日志.设置权限的,其中的7i2

[Python]处理windows下多级目录文件,上传到Linux服务器

#-*- coding: utf-8 -*- __author__ = 'tsbc' import sys reload(sys) sys.setdefaultencoding('utf-8') import paramiko import os import time class Upload(): """ 上传每天生成的测试报告到Linux的web服务器. paramiko 包需要安装 /result/ 下存放html文件 /result/image 截图文件 "

CentOS7.2下unison+inotify的Web目录同步方案

CentOS7.2下unison+inotify的Web目录同步方案 学习 unison CentOS7.2下unison+inotify的Web目录同步方案 1. 背景 2. Unison简介 3. 环境准备 4. 安装Objective Caml compiler 5. 安装unison 6. 安装inotify 7. 配置双机ssh信任 8. unison的使用 9. 配置双机web目录同步 10. 总结 1. 背景 最近需要上线一个公司展厅项目,项目中主要是后台图片管理.因此它基本不会出

常用的一些web目录扫描工具

0X00目录扫描工具的作用 网站目录和敏感文件扫描是网站测试中最基本的手段之一.如果通过该方法发现了网站后台,可以尝试暴库.SQL注入等方式进行安全测试:如果发现敏感目录或敏感文件,能帮我们获取如php环境变量.robots.txt.网站指纹等信息:如果扫描出了一些上传的文件,我们甚至可能通过上传功能(一句话恶意代码)获取网站的权限. 0X01目录扫描原理 通过请求返回的信息来判断当前目录或文件是否真实存在.网站后台扫描工具都是利用目录字典进行爆破扫描,字典越多,扫描到的结果也越多. 0X02工

wwwscan网站目录文件批量扫描工具

准备一个比赛样题里面给的一个扫描的工具: 不知道怎么用就上网百度了一下果然有关于这个软件的两篇介绍(感觉写的很好),第一篇介绍的应该和我的工具一样,也给了例子(现在Google不能访问了)和参数介绍,第二篇作者可能自己"升级"过软件也提供了下载地址.但是有个问题是:我机器上跑感觉那些多进程.端口和超时等参数都是虚设的,我试验的结果是我的软件只要输入ip或域名就可以运行扫描. ps:直接copy 文章来源:http://blog.chinaunix.net/uid-26726420-id

python之OS模块(对文件or目录操作)

OS模块 os,语义为操作系统,包含普遍的操作系统功能,与具体的平台无关.python编程时,处理文件和目录这些操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小-- os模块不受平台限制,也就是说:当我们要在linux中显示当前命令时就要用到pwd命令,而Windows中cmd命令行下就要用到这个,例如:这时候我们使用python中os模块的os.path.abspath(name)功能,甭管是linux或者Windows都可以获取当前的绝对路径. 常见函数列表 os.name

python 目录 文件操作大全

   目录操作  1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() >>> import os >>> os.getcwd() '/home/jack' 2.返回指定目录下的所有文件和目录名:os.listdir() >>> os.listdir('/home/jack') ['.profile', '.bashrc', 'test', '.bash_logout'] 3.函数用来删除一个文件:os.remove()