网络安全(Java语言)脚本 汇总(二)

文章目录

  • 目录遍历漏洞扫描器
    • 源代码
    • 思路
      • 一、核心功能
      • 二、依赖库
      • 三、核心流程
      • 四、关键方法
      • 五、数据结构
      • 六、输出信息

目录遍历漏洞扫描器

源代码

/*** @description : 目录遍历漏洞扫描器*  注意; 在输入URL时 要求必须保存 ?page=  的末尾  才能保证路径合成的有效性*//*** @description : 目录遍历漏洞扫描器*  注意; 在输入URL时 要求必须保存 ?page=  的末尾  才能保证路径合成的有效性*/import java.io.*;
import java.net.*;
import java.util.*;
//导入IO,网络,集合相关的标准库
public class DirectoryTraversalScanner {public static void main(String[] args) throws Exception {List<String> targets = new ArrayList<>();//存放要扫描的目标基础URL    创建了一个名为targets的空列表,用于存储字符串类型的数据//使用ArrayList可以根据实际输入的URL数量动态增长,允许用户连续输入多个URL地址,直到输入空行结束BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//System.in 键盘输入     InputStreamReader : 把键盘的输入转换为字符   BufferedReader 给这些字符加一个缓冲区,可以一行一行的读取System.out.println("请输入要扫描的URL(输入空行结束):");while (true) {String line = reader.readLine();if (line == null || line.trim().isEmpty()) {break;  // 输入空行则结束输入}targets.add(line.trim());}//通过while(true)创建一个循环,每次读取一行,如果读到null,或者空行则跳出循环,否则将首尾去空的添加到targets集合中if (targets.isEmpty()) {System.out.println("没有输入任何URL,程序退出。");return;}List<String> payloads = readLinesFromFile("payloads.txt");//readLinesFromFile()方法功能是从指定文件中读取所有行内容并返回一个字符串列表Map<String, List<String>> signatures = loadSignatures("signatures.txt");//从该文件中加载漏洞特征签名,该方法返回一个Map结构,其中键是签名类型,值是该类型下包含的特征字符串列表,这些签名用于后续检测HTTP响应中是否包含特定的漏洞特征for (String base : targets) {System.out.println("🔍 扫描目标: " + base);for (String payload : payloads) {String fullUrl = base + URLEncoder.encode(payload, "UTF-8");// 将目标URL与payload进行拼接,并且将payload进行编码try {String response = sendRequest(fullUrl);boolean found = false;for (Map.Entry<String, List<String>> entry : signatures.entrySet()) {for (String keyword : entry.getValue()) {if (response.contains(keyword)) {System.out.println("🚨 漏洞发现!URL: " + fullUrl);System.out.println("👉 关键字: " + keyword);found = true;break;//这个break语句跳出的是内层循环,当找到一个匹配的关键字时,就不再检查当前签名类型下的其他关键字了}}if (found) break;//这个break跳出的是外层循环,当找到匹配结果时,就不再匹配新的签名类型了}if (!found) {System.out.println("✅ 安全: " + fullUrl);}} catch (Exception e) {System.out.println("❌ 请求失败: " + fullUrl + " → " + e.getMessage());}System.out.println("-----------------------------");}}System.out.println("✅ 扫描完成。");}public static List<String> readLinesFromFile(String filename) throws IOException {List<String> lines = new ArrayList<>();BufferedReader br = new BufferedReader(new FileReader(filename));String line;while ((line = br.readLine()) != null) {if (!line.trim().isEmpty()) {lines.add(line.trim());}}br.close();return lines;}/*** 从指定文件加载签名信息到Map中* @param filename 包含签名信息的文件名* @return 包含签名信息的Map,键为签名类型,值为该类型下的特征字符串列表* @throws IOException 当文件读取出现问题时抛出*/public static Map<String, List<String>> loadSignatures(String filename) throws IOException {// 创建一个空的HashMap用于存储签名信息,键为字符串,值为字符串列表Map<String, List<String>> sigMap = new HashMap<>();// 创建文件读取器和缓冲读取器,用于逐行读取文件内容BufferedReader br = new BufferedReader(new FileReader(filename));String line;// 逐行读取文件内容,直到文件末尾while ((line = br.readLine()) != null) {// 如果当前行包含冒号,则认为是有效的签名行if (line.contains(":")) {// 按冒号分割行内容为两部分:冒号前为键,冒号后为值String[] parts = line.split(":");// 冒号前的部分作为Map的键String key = parts[0];// 冒号后的内容再按逗号分割成多个值,形成字符串列表List<String> values = Arrays.asList(parts[1].split(","));// 将键值对存入Map中sigMap.put(key, values);}}// 关闭文件读取器,释放资源br.close();// 返回包含所有签名信息的Mapreturn sigMap;}public static String sendRequest(String targetUrl) throws Exception {URL url = new URL(targetUrl);// 创建URL类型的对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 向URL建立连接conn.setConnectTimeout(3000);conn.setReadTimeout(3000);conn.setRequestMethod("GET");// 设置请求头int status = conn.getResponseCode();if (status != 200) throw new IOException("状态码: " + status);BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));// 获取响应体,通过InputStreamReader以字符形式读取,然后通过BufferedReader来提供高效的读取方式StringBuilder response = new StringBuilder();// StringBuilder是一个可变的字符序列,允许高效地拼接和修改字符串内容String inputLine;while ((inputLine = in.readLine()) != null)response.append(inputLine).append("\n");in.close();return response.toString();}
}

思路

一、核心功能

  • 实现目录遍历漏洞扫描
  • 支持多URL目标输入
  • 基于payload和特征签名检测漏洞

二、依赖库

  • java.io.*:文件IO操作
  • java.net.*:网络请求处理
  • java.util.*:集合框架(列表、映射等)

三、核心流程

  1. 目标输入

    • 通过BufferedReader读取键盘输入
    • 存储URL到targets列表(空行结束输入)
    • 输入为空时程序退出
  2. 资源加载

    • 从payloads.txt读取攻击载荷(readLinesFromFile方法)
    • 从signatures.txt加载漏洞特征(loadSignatures方法)
  3. 扫描逻辑

    • 遍历所有目标URL
    • 拼接URL与编码后的payload
    • 发送HTTP请求(sendRequest方法)
    • 检测响应中是否包含漏洞特征
    • 输出扫描结果(漏洞/安全/请求失败)

四、关键方法

  1. readLinesFromFile(String filename)

    • 功能:读取文件内容到字符串列表
    • 逻辑:按行读取,过滤空行,返回非空行列表
  2. loadSignatures(String filename)

    • 功能:加载漏洞特征到Map
    • 格式:文件行需包含冒号(键:值1,值2…)
    • 结构:Map<签名类型, 特征字符串列表>
  3. sendRequest(String targetUrl)

    • 功能:发送HTTP GET请求并返回响应内容
    • 设置:3秒连接超时+3秒读取超时
    • 处理:仅接收200状态码的响应,拼接响应内容为字符串

五、数据结构

  • List targets:存储目标URL
  • List payloads:存储攻击载荷
  • Map<String, List> signatures:存储漏洞特征(键-特征类型,值-关键词列表)

六、输出信息

  • 扫描目标提示(🔍 扫描目标: [URL])
  • 漏洞发现提示(🚨 漏洞发现!URL: [完整URL] + 关键字)
  • 安全提示(✅ 安全: [完整URL])
  • 请求失败提示(❌ 请求失败: [完整URL] + 错误信息)
  • 扫描完成提示(✅ 扫描完成。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919238.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 ArcFace/ArcMargin 损失函数的深度特征学习高性能人脸识别解决方案

要实现当前最先进的人脸识别系统,我们需要采用业界公认性能最佳的算法框架,主要包括基于 ArcFace/ArcMargin 损失函数的深度特征学习、MTCNN 人脸检测与对齐以及高效特征检索三大核心技术。以下是优化后的解决方案: 核心优化点说明 算法选择:采用 ArcFace(Additive Angul…

Sql server 查询每个表大小

在SQL Server中&#xff0c;你可以通过查询系统视图和系统表来获取数据库中每个表的大小。这可以通过几种不同的方式来实现&#xff0c;下面是一些常用的方法&#xff1a;方法1&#xff1a;使用sp_spaceused存储过程sp_spaceused是一个内置的存储过程&#xff0c;可以用来显示数…

react 错误边界

注意点&#xff1a; 类组件是可以和函数式组件混合写的&#xff01;&#xff01;&#xff01;getDerivedStateFromError是静态的&#xff0c;避免副作用&#xff0c;如果想将错误上报到服务器&#xff0c;则去componentDidCatch里去处理。getDerivedStateFromError直接返回{ ha…

自定义 VSCode 标题栏以区分不同版本

自定义 VSCode 标题栏以区分不同版本 当您在同一台计算机上使用多个 Visual Studio Code 版本时&#xff0c;自定义窗口标题栏是一个有效的方法&#xff0c;可以帮助您快速区分它们。 为何需要区分多个 VSCode 版本&#xff1f; 在同一台电脑上安装和使用多个 VSCode 实例是很常…

失败存储:查看未成功的内容

作者&#xff1a;来自 Elastic James Baiera 及 Graham Hudgins 了解失败存储&#xff0c;这是 Elastic Stack 的一项新功能&#xff0c;用于捕获和索引之前丢失的事件。 想获得 Elastic 认证吗&#xff1f;看看下一期 Elasticsearch Engineer 培训什么时候开始&#xff01; E…

基于Spring Boot+Vue的莱元元电商数据分析系统 销售数据分析 天猫电商订单系统

&#x1f525;作者&#xff1a;it毕设实战小研&#x1f525; &#x1f496;简介&#xff1a;java、微信小程序、安卓&#xff1b;定制开发&#xff0c;远程调试 代码讲解&#xff0c;文档指导&#xff0c;ppt制作&#x1f496; 精彩专栏推荐订阅&#xff1a;在下方专栏&#x1…

Node.js/Python 实战:封装淘宝商品详情 API 客户端库(SDK)

在开发电商相关应用时&#xff0c;我们经常需要与淘宝 API 交互获取商品数据。直接在业务代码中处理 API 调用逻辑会导致代码冗余且难以维护。本文将实战演示如何使用 Node.js 和 Python 封装一个高质量的淘宝商品详情 API 客户端库&#xff08;SDK&#xff09;&#xff0c;使开…

【Docker】关于hub.docker.com,无法打开,国内使用dockers.xuanyuan.me搜索容器镜像、查看容器镜像的使用文档

&#x1f527; 一、国内镜像搜索替代方案 国内镜像源网站 毫秒镜像&#xff1a;支持镜像搜索&#xff08;如 https://dockers.xuanyuan.me&#xff09;&#xff0c;提供中文文档服务&#xff08;https://dockerdocs.xuanyuan.me&#xff09;&#xff0c;可直接搜索镜像名称并…

2025盛夏AI热浪:八大技术浪潮重构数字未来

——从大模型革命到物理智能&#xff0c;AI如何重塑产业与人机关系&#x1f31f; 引言&#xff1a;AI从“技术爆炸”迈向“应用深水区」代码示例&#xff1a;AI商业化闭环验证模型# 验证AI商业化闭环的飞轮效应 def validate_ai_flywheel(compute_invest, app_adoption): re…

从希格斯玻色子到 QPU:C++ 的跨维度征服

一、引言&#xff1a;粒子物理与量子计算的交汇点在当代物理学和计算机科学的前沿领域&#xff0c;希格斯玻色子研究与量子计算技术的交汇正形成一个激动人心的跨学科研究方向。希格斯玻色子作为标准模型中最后被发现的基本粒子&#xff0c;其性质和行为对我们理解物质质量的起…

Elasticsearch:如何使用 Qwen3 来做向量搜索

在这篇文章中&#xff0c;我们将使用 Qwen3 来针对数据进行向量搜索。我们将对数据使用 qwen3 嵌入模型来进行向量化&#xff0c;并使用 Qwen3 来对它进行推理。在阅读这篇文章之前&#xff0c;请阅读之前的文章 “如何使用 Ollama 在本地设置并运行 Qwen3”。 安装 Elasticsea…

Mybatis实现页面增删改查

一、改变路由警告 二、实现新增数据 1.UserMapper.xml 2.Controller层 注意:前端传的是json对象,所以后台也需要使用JSON 3.设置提交的表单 <el-dialog title"信息" v-model"data.formVisible" width"30%" destroy-on-close><el-form…

Rabbitmq+STS+discovery_k8s +localpv部署排坑详解

#作者&#xff1a;朱雷 文章目录一、部署排坑1.1. configmap配置文件1.2. pv文件1.3. sc文件1.4. serviceAccount文件1.5. headless-service文件1.6. sts文件二、RabbitMQ集群部署关键问题总结一、部署排坑 1.1. configmap配置文件 编辑cm.yaml 文件 apiVersion: v1 kind: C…

8.14 模拟

lc658. deque 定长滑窗class Solution { public:vector<int> findClosestElements(vector<int>& arr, int k, int x) {int n arr.size();int l 0, r 0;deque<int> dq;while (r < n) {dq.push_back(arr[r]);if (dq.size() > k) {// 核心&#xf…

JavaScript 核心语法与实战笔记:从基础到面试高频题

一、面试高频:apply 与 call 调用模式的区别 apply 和 call 的核心作用一致——改变函数内 this 的指向并立即执行函数,唯一区别是参数传递方式不同: apply:第二个参数需以数组形式传入,格式为 函数名.apply(this指向, [参数1, 参数2, ...]) 示例:test.apply(param, [1,…

自动驾驶系统“测试”的“要求”与“规范体系”

让数据真正闭环的&#xff0c;L4级自动驾驶仿真工具链-杭州千岑智能科技有限公司&#xff1a;RSim。 自动驾驶系统测试的要求与规范体系 自动驾驶技术作为汽车产业智能化转型的核心领域&#xff0c;其测试验证环节直接关系到技术的安全性和可靠性。随着自动驾驶等级的提高&…

人工智能——CNN基础:卷积和池化

一、CNN入门介绍1、卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称 CNN&#xff09;是一种专门为处理具有网格结构数据&#xff08;如图像、音频&#xff09;而设计的深度学习模型。在传统的全连接神经网络&#xff08;FNN&#xff09;中&#xff0c;输…

适用监测农作物长势和病虫害的高光谱/多光谱相机有哪些?

面对农作物长势分析和病虫害监测&#xff0c;光谱技术在农业中得到了有效的应用。本篇文章给大家介绍下适合监测农作物长势和病虫害的高光谱/多光谱相机。农作物在遭受病虫害侵袭时&#xff0c;其叶片的细胞结构、水分含量、色素组成会发生变化&#xff0c;从而导致农作物对不同…

深度学习——03 神经网络(4)-正则化方法价格分类案例

4 正则化 4.1 概述模型拟合的3种状态左边&#xff08;Underfitting 欠拟合&#xff09;&#xff1a;模型太简单&#xff0c;没抓住数据规律。比如用直线硬套弯曲的数据&#xff0c;预测效果差&#xff0c;训练误差和测试误差都大&#xff1b;中间&#xff08;Just right 拟合合…

java16学习笔记

Java16是一个重要的特性发布&#xff0c;它为JAVA带来了许多JVM特定的更改和语言特定的更改。它遵循了自JavaJava10以来引入的Java发布步调&#xff0c;并于2021年3月发布&#xff0c;仅在Java15发布后的六个月内发布。 Java 16是一个非LTS版本。 338:Vector API (Incubator)…