利用python实现对web服务器的目录探测的方法


Posted in Python onFebruary 26, 2019

一、python

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。

python 是一门简单易学的语言,并且功能强大也很灵活,在渗透测试中的应用广泛,让我们一起打造属于自己的渗透测试工具

二、web服务器的目录探测脚本打造

1、在渗透时如果能发现web服务器中的webshell,渗透是不是就可以变的简单一点尼

通常情况下御剑深受大家的喜爱,但是今天在测试的时候webshell不知道为什么御剑扫描不到

仔细查看是webshell有防爬功能,是检测User-Agent头,如果没有就回返回一个自己定义的404页面 

利用python实现对web服务器的目录探测的方法 

1、先来看看工具效果 

利用python实现对web服务器的目录探测的方法

2、利用python读取扫描的目录字典

def get_url(path):
    with open(path, "r", encoding='ISO-8859-1') as f:
        for url in f.readlines():
            url_list.append(url.strip())
        return url_list

3、利用 python 的 requests 库对web目标服务器进行目录探测

def Go_scan(url):
  while not queue.empty():
    url_path = queue.get(timeout=1)
    new_url = url + url_path
    res = requests.get(new_url, headers=headers, timeout=5)
    #print(res.status_code)
    status_code = "[" + str(res.status_code) + "]"
    if str(res.status_code) != "404":
      print(get_time(), status_code, new_url)

4、利用 python 的 threading 库对探测进行线程的设置

def thread(Number,url):
  threadlist = []
  for pwd in url_list:
    queue.put(pwd)
 
  for x in range(Number):
    t = threading.Thread(target=Go_scan, args=(url,))
    threadlist.append(t)
 
  for t in threadlist:
    t.start()

5、利用 python 的 argparse 库进行对自己的工具进行封装

def main():
  if len(sys.argv) == 1:
    print_banner()
    exit(1)
 
  parser = argparse.ArgumentParser(
    formatter_class=argparse.RawTextHelpFormatter,
    epilog='''\
use examples:
 python dir_scan.py -u [url]http://www.test.com[/url] -d /root/dir.txt
 python dir_scan.py -u [url]http://www.test.com[/url] -t 30 -d /root/dir.txt
 ''')
  parser.add_argument("-u","--url", help="scan target address", dest='url')
  parser.add_argument("-t","--thread", help="Number of threads", default="20", type=int, dest='thread')
  parser.add_argument("-d","--Dictionaries", help="Dictionary of Blasting Loading", 
    dest="Dictionaries")

总结

各位大哥有意见或者建议尽管提,文章哪里不对的话会改的,小弟定会虚心学习最后附上全部源码供大佬指教

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import requests
import threading
import argparse,sys
import time,os
from queue import Queue
 
url_list = []
queue = Queue()
 
headers = {
  'Connection':'keep-alive',
  'Accept':'*/*',
  'Accept-Language': 'zh-CN',
  'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0'
}
 
def print_banner():
  banner = r"""
  .___.__      __________________   _____  _______  
 __| _/|__|_______  /  _____/\_  ___ \  / _ \  \   \ 
 / __ | | |\_ __ \ \_____ \ /  \ \/ / /_\ \ /  |  \ 
/ /_/ | | | | | \/ /    \\   \____/  |  \/  |  \
\____ | |__| |__|  /_______ / \______ /\____|__ /\____|__ /
   \/           \/     \/     \/     \/ 
 
[*] Very fast directory scanning tool.
[*] try to use -h or --help show help message
  """
  print(banner)
 
def get_time():
  return '[' + time.strftime("%H:%M:%S", time.localtime()) + '] '
 
def get_url(path):
  with open(path, "r", encoding='ISO-8859-1') as f:
    for url in f.readlines():
      url_list.append(url.strip())
    return url_list
 
 
def Go_scan(url):
  while not queue.empty():
    url_path = queue.get(timeout=1)
    new_url = url + url_path
    res = requests.get(new_url, headers=headers, timeout=5)
    #print(res.status_code)
    status_code = "[" + str(res.status_code) + "]"
    if str(res.status_code) != "404":
      print(get_time(), status_code, new_url)
 
def thread(Number,url):
  threadlist = []
  for pwd in url_list:
    queue.put(pwd)
 
  for x in range(Number):
    t = threading.Thread(target=Go_scan, args=(url,))
    threadlist.append(t)
 
  for t in threadlist:
    t.start()
 
 
def main():
  if len(sys.argv) == 1:
    print_banner()
    exit(1)
 
  parser = argparse.ArgumentParser(
    formatter_class=argparse.RawTextHelpFormatter,
    epilog='''\
use examples:
 python dir_scan.py -u [url]http://www.test.com[/url] -d /root/dir.txt
 python dir_scan.py -u [url]http://www.test.com[/url] -t 30 -d /root/dir.txt
 ''')
  parser.add_argument("-u","--url", help="scan target address", dest='url')
  parser.add_argument("-t","--thread", help="Number of threads", default="20", type=int, dest='thread')
  parser.add_argument("-d","--Dictionaries", help="Dictionary of Blasting Loading", 
    dest="Dictionaries")
  args = parser.parse_args()
  Number =args.thread
  url = args.url
  url_path = args.Dictionaries
  print_banner()
  get_url(url_path)
  print(get_time(), "[INFO] Start scanning----\n")
  time.sleep(2)
  thread(Number,url)
 
if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python图算法实例分析
Aug 13 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Python实现两款计算器功能示例
Dec 19 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
python字符串与url编码的转换实例
May 10 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
jupyter notebook 增加kernel教程
Apr 10 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
python selenium 弹出框处理的实现
Feb 26 #Python
python实现学员管理系统
Feb 26 #Python
python实现电子产品商店
Feb 26 #Python
Python selenium根据class定位页面元素的方法
Feb 26 #Python
python实现诗歌游戏(类继承)
Feb 26 #Python
Python实现简单查找最长子串功能示例
Feb 26 #Python
基于Python实现用户管理系统
Feb 26 #Python
You might like
PHP错误处理函数
2016/04/03 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
python处理PHP数组文本文件实例
2014/09/18 Python
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python3 修改默认环境的方法
2019/02/16 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
平安建设工作方案
2014/06/02 职场文书
生物科学专业自荐书
2014/06/20 职场文书
2014年节能工作总结
2014/12/18 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Python实现生成bmp图像的方法
2021/06/13 Python