利用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爬虫之爬虫编写全记录
Nov 06 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
Python文件的读写和异常代码示例
Oct 31 Python
python用户评论标签匹配的解决方法
May 31 Python
Python版名片管理系统
Nov 30 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
Python实现京东抢秒杀功能
Jan 25 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 Python
python前后端自定义分页器
Apr 13 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之第四天
2006/10/09 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
socket + select 完成伪并发操作的实例
2017/08/15 Python
解决python "No module named pip" 的问题
2018/10/13 Python
PyQt5响应回车事件的方法
2019/06/25 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
Keras实现DenseNet结构操作
2020/07/06 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
信用社员工先进事迹材料
2014/02/04 职场文书
党员干部承诺书
2014/03/25 职场文书
教师读书活动总结
2014/05/07 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
社区节水倡议书
2015/04/29 职场文书