利用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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
python实现从ftp服务器下载文件的方法
Apr 30 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
Python中的pack和unpack的使用
Mar 12 Python
解决python报错MemoryError的问题
Jun 26 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
Pyqt5实现英文学习词典
Jun 24 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 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实现仿写CodeIgniter的购物车类
2015/07/29 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
javascript &&和||运算法的另类使用技巧
2009/11/28 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
python运行时间的几种方法
2016/06/17 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
解析python的局部变量和全局变量
2019/08/15 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
竞选班干部演讲稿
2014/04/24 职场文书
保护动物的标语
2014/06/11 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
2014年秘书工作总结
2014/11/25 职场文书
艺术节开幕词
2015/01/28 职场文书
如何写辞职信
2015/05/13 职场文书
Nginx四层负载均衡的配置指南
2021/06/11 Servers
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫