由于之前在做渗透测试的时候,发现使用的工具较多,切换起来较麻烦,便萌生了开发一个包含各种渗透测试工具的小程序,包括敏感目录扫描、端口查询、子域名挖掘、旁站查询、密码暴力破解、SQL注入等功能。这一篇主要介绍敏感目录扫描部分的原理和设计,软件的整体效果如下图所示。
网上有许多这方面的教程,这里简单介绍一下操作步骤。
如上图,选择Windows窗体应用,修改名称、位置、所用框架,最后点击确定。
在“button_Click”这一触发的事件当中,编写代码,实现域名的解析。
在渗透测试过程中,通过目录扫描,有可能会扫描出一些敏感目录或者文件,比如说后台登录页面,保存账户和密码的文件等,再通过暴力破解,SQL注入等方式,可以登录到后台、获取PHP版本信息、网站指纹等信息。
# conding=utf-8
import sys
import math # 向上取整 math.ceil()
import threading
import requests
# 给每个线程分任务(字典中大列表分成小列表)
def muti_scan(url, threads, dic):
with open(dic, "r") as f:
# 读取字典文件
dic_list = f.readlines()
# 确定每个线程读取的行数向上取整
thread_read_line_num = math.ceil(len(dic_list) / int(threads))
# 制作每一个线程读取的字典列表[[t1],[t2],[t3]]
i = 0
result_list = []
temp_list = []
for line in dic_list:
i = i + 1
# 每一次读取到取余为零就是一个新线程任务的开始
if i % thread_read_line_num == 0:
temp_list.append(line.strip())
result_list.append(temp_list)
temp_list = []
else:
temp_list.append(line.strip())
# 线程执行
threads_list = []
for i in result_list:
# 创建thread类
# 传入的参数是大列表result_list中的每一个小列表
threads_list.append(threading.Thread(target=scan, args=(url, i)))
# 所有线程运行
for t in threads_list:
t.start()
# 线程代码:扫描实现 发送get请求查看状态码
def scan(url, dic):
r = requests.get(url)
for line in dic:
r = requests.get(url + '/' + line)
if r.status_code == 200:
print(r.url + " : " + str(r.status_code))
muti_scan(sys.argv[1], sys.argv[2], sys.argv[3])
首先需要安装python的环境
创建按钮按下事件button1_Click,运行“调用python脚本”函数runPythonP()
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
runPythonP();//运行python函数
label5.Text = "开始扫描…";
}
实例化一个python进程 调用.py 脚本
void runPythonP()
{
string th = comboBox1.Text;
string url = textBox1.Text;
p = new Process();
string path = "test.py";//待处理python文件的路径,本例中放在debug文件夹下
string sArguments = path;
ArrayList arrayList = new ArrayList();
arrayList.Add(url);//需要渗透的网站
arrayList.Add(th);//线程数
arrayList.Add("ASPX.txt");//调用字典
foreach (var param in arrayList)//拼接参数
{
sArguments += " " + param;
}
p.StartInfo.FileName = @"D:\Anaconda\python.exe"; //没有配环境变量的话,可以写"xx\xx\python.exe"的绝对路径。如果配了,直接写"python"即可
p.StartInfo.Arguments = sArguments;//python命令的参数
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();//启动进程
//MessageBox.Show("启动成功");
p.BeginOutputReadLine();
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
Console.ReadLine();
//p.WaitForExit();
}
输出接收事件函数
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
var printedStr = e.Data;
Action at = new Action(delegate ()
{
//接受.py进程打印的字符信息到文本显示框
richTextBox1.AppendText(printedStr + "\n");
label5.Text = "扫描结束";
});
Invoke(at);
}
使用虚拟机搭建测试环境,开启Web服务,在软件中输入网址,点击“开始扫描”,一段时间后,显示出扫描结果。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章