(原创)对SQLMAP -g自动挖洞程序补充的后续配套代码及应用 仅用于学习和方法研究
前言
在这之前,我们发布了一篇《(原创)基于SQLMAP和Google实现自动挖洞 仅用于学习和方法研究》,今天开源的是其配套的后续程序,能够实现结果上传,并保存至数据库中,方便查看。
注意:下面的程序没有进行安全增强,可能会带来SQL注入问题,请在内网搭建使用即可。
摘要
在今天的博客中,我们将介绍两个PHP程序。第一个程序用于处理上传的ZIP文件,提取其中的CSV文件,并将CSV文件的内容保存到服务器上的指定目录。第二个程序用于将这些CSV文件中的数据插入到MySQL数据库中,以便进一步分析和管理。我们将详细解释这两个程序的功能和用法。
正文
第一个PHP程序:处理ZIP文件上传
这个PHP程序的主要功能是处理用户上传的ZIP文件,提取其中的CSV文件,并将符合特定命名规则的CSV文件保存到服务器上的指定目录。以下是该程序的主要部分
<?php $uploadDirectory = './results/'; $zipDirectory = './uploaded_zips/'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!empty($_FILES['zip']['name'])) { $zipFile = $_FILES['zip']['tmp_name']; // 检查文件是否是ZIP压缩包 if (is_uploaded_file($zipFile) && pathinfo($_FILES['zip']['name'], PATHINFO_EXTENSION) === 'zip') { // 创建目录以存放ZIP文件 if (!file_exists($zipDirectory)) { mkdir($zipDirectory, 0755, true); } $zipFilePath = $zipDirectory . $_FILES['zip']['name']; // 移动上传的ZIP文件到目标目录 if (move_uploaded_file($zipFile, $zipFilePath)) { $zip = new ZipArchive(); // 打开ZIP文件 if ($zip->open($zipFilePath) === true) { $csvCount = 0; // 计数CSV文件数 $csvsWithResultsPrefix = 0; // 计数以"results"开头的CSV文件数 // 遍历ZIP文件中的所有文件 for ($i = 0; $i < $zip->numFiles; $i++) { $fileInfo = $zip->statIndex($i); $csvFileName = $fileInfo['name']; // 检查文件是否是CSV文件 if (pathinfo($csvFileName, PATHINFO_EXTENSION) === 'csv') { $csvCount++; // 检查文件名是否以"results"开头 if (strpos($csvFileName, 'results') === 0) { $csvsWithResultsPrefix++; // 解压文件到目标目录 $csvFilePath = $uploadDirectory . $csvFileName; file_put_contents($csvFilePath, $zip->getFromIndex($i)); } } } $zip->close(); // 删除上传的ZIP文件 unlink($zipFilePath); if ($csvCount > 0 && $csvCount === $csvsWithResultsPrefix) { echo "所有CSV文件均以'results'开头并已保存至目标目录。"; } else { echo "已丢弃不符合要求的CSV文件和ZIP文件。"; } } else { echo "无法打开ZIP文件。"; } } else { echo "无法移动上传的ZIP文件。"; } } else { echo "请选择一个ZIP文件上传。"; } } else { echo "请选择一个ZIP文件上传。"; } } ?>
第二个PHP程序:将CSV数据插入MySQL数据库
这个PHP程序的主要功能是将CSV文件中的数据插入到MySQL数据库中,以便进一步分析和管理。以下是该程序的主要部分:
<?php // MySQL数据库连接信息,请根据实际情况填写 $host = '127.0.0.1'; $username = 'abc'; $password = 'abc'; $database = 'abc'; // 连接MySQL数据库 $conn = mysqli_connect($host, $username, $password, $database); // 检查连接是否成功 if (!$conn) { die("连接数据库失败: " . mysqli_connect_error()); } // 文件夹路径 $folderPath = './results'; // 请替换成实际的文件夹路径 // 扫描文件夹并处理CSV文件 $files = glob($folderPath . '/results*.csv'); foreach ($files as $file) { // 读取CSV文件 if (($handle = fopen($file, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // 跳过首行 if ($data[0] === 'Target URL') { continue; } // 提取数据 $targetURL = $data[0]; $place = $data[1]; $parameter = $data[2]; $technique = $data[3]; $note = $data[4]; // 使用参数化查询插入数据到MySQL数据库 $query = "INSERT INTO SQLVulnerabilityLibrary (TargetURL, Place, Parameter, Technique, Note) VALUES (?, ?, ?, ?, ?)"; $stmt = mysqli_prepare($conn, $query); mysqli_stmt_bind_param($stmt, "sssss", $targetURL, $place, $parameter, $technique, $note); if (mysqli_stmt_execute($stmt)) { echo "插入成功: $targetURL\n"; } else { echo "插入失败: " . mysqli_error($conn) . "\n"; } mysqli_stmt_close($stmt); } fclose($handle); } else { echo "无法打开文件: $file\n"; } } // 关闭数据库连接 mysqli_close($conn); ?>
联合应用
接下来,你可以自己设计一个php程序,或者任意语言的程序,链接数据库即可进行查询。当然,你也可以设计定时程序,对漏洞进行验证,也可以插入Mail功能。
这个查询的就不开源了,非常简单的一个数据库查值,没必要开放了。