利用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 getopt 参数处理小示例
Jun 09 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
为Python的web框架编写前端模版的教程
Apr 30 Python
Python Socket编程详细介绍
Mar 23 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
python安装scipy的方法步骤
Jun 26 Python
pandas DataFrame创建方法的方式
Aug 02 Python
Django中的用户身份验证示例详解
Aug 07 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
pytorch 如何使用amp进行混合精度训练
May 24 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中截取字符串支持utf-8
2007/01/18 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
全面理解闭包机制
2016/07/11 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
详解JS模块导入导出
2017/12/20 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
简单的Python的curses库使用教程
2015/04/11 Python
python计算文本文件行数的方法
2015/07/06 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
python3使用GUI统计代码量
2019/09/18 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
简历里的自我评价范文
2014/02/24 职场文书
工作作风建设心得体会
2014/10/22 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang