利用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的Django框架的视图中使用Session的方法
Jul 23 Python
利用python代码写的12306订票代码
Dec 20 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
Apr 11 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
详解python 中in 的 用法
Dec 12 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
Python控制台实现交互式环境执行
Jun 09 Python
python中关于数据类型的学习笔记
Jul 19 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脚本的10个技巧(8)
2006/10/09 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php集成开发环境详解
2019/09/24 PHP
详细讲解JS节点知识
2010/01/31 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
Python网络编程详解
2017/10/31 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
浅析python连接数据库的重要事项
2021/02/22 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
《赠汪伦》教学反思
2014/04/12 职场文书
纠纷协议书
2014/04/16 职场文书
2014年社区工作总结
2014/11/18 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
2016七夕情人节感言
2015/12/09 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS