网站标题权重吗,平潭建设局网站首页,淄博网站制作公司,西安网页设计培训班价格文章目录目录遍历漏洞扫描器源代码思路一、核心功能二、依赖库三、核心流程四、关键方法五、数据结构六、输出信息目录遍历漏洞扫描器
源代码
/*** description : 目录遍历漏洞扫描器* 注意; 在输入URL时 要求必须保存 ?page 的末尾 才能保证路径合成的有效性*//*** desc…
文章目录目录遍历漏洞扫描器源代码思路一、核心功能二、依赖库三、核心流程四、关键方法五、数据结构六、输出信息目录遍历漏洞扫描器
源代码
/*** 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 {ListString 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;}ListString payloads readLinesFromFile(payloads.txt);//readLinesFromFile()方法功能是从指定文件中读取所有行内容并返回一个字符串列表MapString, ListString 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.EntryString, ListString 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 ListString readLinesFromFile(String filename) throws IOException {ListString 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 MapString, ListString loadSignatures(String filename) throws IOException {// 创建一个空的HashMap用于存储签名信息键为字符串值为字符串列表MapString, ListString 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];// 冒号后的内容再按逗号分割成多个值形成字符串列表ListString 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.*集合框架列表、映射等
三、核心流程 目标输入 通过BufferedReader读取键盘输入存储URL到targets列表空行结束输入输入为空时程序退出 资源加载 从payloads.txt读取攻击载荷readLinesFromFile方法从signatures.txt加载漏洞特征loadSignatures方法 扫描逻辑 遍历所有目标URL拼接URL与编码后的payload发送HTTP请求sendRequest方法检测响应中是否包含漏洞特征输出扫描结果漏洞/安全/请求失败
四、关键方法 readLinesFromFile(String filename) 功能读取文件内容到字符串列表逻辑按行读取过滤空行返回非空行列表 loadSignatures(String filename) 功能加载漏洞特征到Map格式文件行需包含冒号键:值1,值2…结构Map签名类型, 特征字符串列表 sendRequest(String targetUrl) 功能发送HTTP GET请求并返回响应内容设置3秒连接超时3秒读取超时处理仅接收200状态码的响应拼接响应内容为字符串
五、数据结构
List targets存储目标URLList payloads存储攻击载荷MapString, List signatures存储漏洞特征键-特征类型值-关键词列表
六、输出信息
扫描目标提示 扫描目标: [URL]漏洞发现提示 漏洞发现URL: [完整URL] 关键字安全提示✅ 安全: [完整URL]请求失败提示❌ 请求失败: [完整URL] 错误信息扫描完成提示✅ 扫描完成。