python目录扫描工具编写_3

1、目录扫描原理

原理就是将已知的后台目录拼接到需要扫描的URL后面,如果拼接的URL存在,或者是一个303的页面,后者是403被禁止的页面那么将其输出到页面,如果是303页面,则把跳转后的页面也输出出来

2、实现步骤

  • 字典的读取

文件读取一般用open方法进行读取,open函数的格式为open(filename,mode)
首先得给open函数一个文本读取对象,其次mode参数有三种:

mode 含义
r 读取文件
w 写入文件,但写操作会自动写入内容并且对之前的内容进行覆盖
a 对文件得后面进行追加写入,不会覆盖原有文件

读取文件得方式也有三种

函数 含义
readline() 每次读取一行
readlines() 全部读取到对应列表
read() 每次读取相应字节,可以通过f.read(5)说明读取5个字节

写入的方式也有两种,含义基本一样

方式 含义
with open(“1.txt”,“r”) as f: 此种方式不需要在最后加上f.close()关闭文件
f = open(“1.txt”,“r”) 此种方式需要代码后面加上f.close 关闭文件

这里对两种方法进行了运用,代码如下

with open('file/1.txt','r') as f :
    for line in f.readlines():
        line = line.strip() #删除读取的line字符串头尾指定的字符(默认为空格或换行符)或字符序列
        print(line + ' '+'with方式读取的文件')

f  = open('file/1.txt','r')
for line in f.readlines():
    line = line.strip()
    print(line + ' '+'f=open()方式读取的文件')
f.close()

HTTP发送请求

发送请求与前面文章已经讲述了大概步骤,这里主要实现的是将从字典里面读取出来的文件进行一个一个拼接到url后面
示例代码	
import  requests
url  = 'http://baidu.com/'
with open("file/1.txt","r") as f:
    for line in f.readlines():
        line  = line.strip()
        r = requests.get(url + line)
        print(r.url)

这里请求结果为
在这里插入图片描述

判断状态码,输出存在目录

此步骤就是只把存在的url显示到界面上,当不存在此url时,就是当状态码为404时,则不显示,当状态码为200或者303或者403则显示出来,这里只演示当状态码为200时的情况
import  requests
import sys
url = 'http://url/'

with open("file/PHP.txt","r") as f:
    for line in f.readlines():
        line  = line.strip()
        r = requests.get(url + line)
        if r.status_code == 200 :
            print(r.url + ' '+ str(r.status_code))

目录扫描结果
在这里插入图片描述
- 参数优化
这里参数优化有两个地方,一个是输入url的优化,另一种为user-agent的优化

1、优化url

 这里优化url是指当前输入可以直接在外面自定义输入需要扫描的url,这里就需要调用python的sys模块,使用到的函数为argv[] 
import  requests
import sys
url = sys.argv[1]
with open("file/PHP.txt","r") as f:
    for line in f.readlines():
        line  = line.strip()
        r = requests.get(url + line)
        if r.status_code == 200 or r.status_code == 300 :
            print(r.url + str(r.status_code))

注意:这里使用的是argv[1],而不是argv[0],这是因为在argv[0]中这里表示的是该python文件所处的绝对路径位置,从1开始才是你设定的参数

这里调用的方式是直接在终端调用格式为
python + 执行文件 +加参数

注意:这里有个坑需要注意,在终端运行时,你需要进入文件所在目录,不然找不到文件,则无法执行,此外,你也可以把字典设置为参数,这样就实现url与字典的自定义扫描

2、user-agent设置
前面文章讲到结合bp实现发送报文截断操作,这里显示的user-agent为脚本请求
在这里插入图片描述
这样的请求后台管理员查看日志则立马发现这是一个利用脚本的非法请求,这样就及其容易的被拦截
这里我们需要做的就是更换uesr-agent
示例代码

import  requests
url = 'http://www.baidu.com'
payload = {'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}

r = requests.get(url)
r1 = requests.get(url,headers = payload)
print(r.request.headers)
print(r1.request.headers)

输出结果
在这里插入图片描述
当然,最好是设置多个User-Agent,这样扫描一定数目了,更换User-Agent代理,这样扫描的就更加隐蔽

总结

扫描工具的原理基本就是这些,通过字典对目标url进行拼接,然后做出判断是否存在此url,学到这里,就可以自己动手写御剑了,御剑工具的原理基本就是这些,剩余的就是线程、绕过防护及其他的优化措施了,当然,一个好的扫描工具,不仅仅这些,要想写一个好的扫描工具学习这些还远远不够。

发布了7 篇原创文章 · 获赞 0 · 访问量 176

猜你喜欢

转载自blog.csdn.net/weixin_46022050/article/details/104119833
今日推荐