利用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简单实现基数排序算法
May 16 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
python 移除字符串尾部的数字方法
Jul 17 Python
python多个模块py文件的数据共享实例
Jan 11 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python中base64与xml取值结合问题
Dec 22 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Python制作动态字符画的源码
Aug 04 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
多文件上传的例子
2006/10/09 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
PHP代码优化的53个细节
2014/03/03 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
PHP实现简单日历类编写
2020/08/28 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python中字符串的格式化方法小结
2016/05/03 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
Python代码需要缩进吗
2020/07/01 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
高二英语教学反思
2014/01/19 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python