WebCrack:网站后台弱口令批量检测工具

经过这么长时间的测试终于算是可以上线了,写篇文章跟大家分享一下自己的开发思路吧 >注:本工具借鉴吸收了TideSec的web_pwd_common_crack很多优秀的思路,在此基础上增加了很多拓展功能使其更加强大,在这里给TideSec的大佬点个赞!

前言

在做安全测试的时候,随着资产的增多,经常会遇到需要快速检测大量网站后台弱口令的问题。

然而市面上并没有一个比较好的解决方案,能够支持对各种网站后台的通用检测。

所以WebCrack就应运而生。

工具简介

WebCrack是一款web后台弱口令/万能密码批量爆破、检测工具。

不仅支持如discuz,织梦,phpmyadmin等主流CMS

并且对于绝大多数小众CMS甚至个人开发网站后台都有效果

在工具中导入后台地址即可进行自动化检测。

实现思路

大家想一下自己平常是怎么用burpsuite的intruder模块来爆破指定目标后台的

1
抓包 -> send to intruder -> 标注出要爆破的参数 -> 发送payload爆破 -> 查看返回结果

找出返回包长度大小不同的那一个,基本上就是所需要的答案。

那么WebCrack就是模拟这个过程

但是就要解决两个问题

  • 如何自动识别出要爆破的参数
  • 如何自动判断是否登录成功

识别爆破参数

对于这个问题采用了web_pwd_common_crack的解决办法

就是根据提取表单中 user pass 等关键字,来判断用户名跟密码参数的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if parameter:
if not user_key:
for z in [ ‘user’, ‘name’,‘zhanghao’, ‘yonghu’, ‘email’, ‘account’]:
if z in parameter.lower():
value = ‘{user_name}’
user_key = parameter
ok_flag = 1
break
if not ok_flag:
for y in [‘pass’, ‘pw’, ‘mima’]:
if y in parameter.lower():
value = ‘{pass_word}’
pass_key = parameter
ok_flag = 1
break

但是在测试中还发现,有些前端程序员用拼音甚至拼音缩写来给变量命名

什么yonghu , zhanghao , yhm(用户名), mima 等

虽然看起来很捉急,但是也只能把它们全部加进关键字判断名单里。

如何判断登录成功

这个可以说是最头疼的问题

如果对于一种管理系统还好说,只要找到规律,判断是否存在登录成功的特征就可以

但是作为通用爆破脚本来说,世界上的网站各种各样,不可能去一个个找特征,也不可能一个个去正则匹配。

经过借鉴web_pwd_common_crack的思路,与大量测试

总结出来了以下一套比较有效的判断方式。

判断是否动态返回值并获取Error Length

在这里插入图片描述

先发送两次肯定错误的密码如length_test

获取两次返回值并比较

如果两次的值不同,则说明此管理系统面对相同的数据包返回却返回不同的长度,此时脚本无法判断,退出爆破。

如果相同,则记录下此值,作为判断的基准。

然而实际中会先请求一次,因为发现有些管理系统在第一次登录时会在响应头部增加标记。如果去掉此项可能会导致判断失误。

判断用户名跟密码的键名是否存在在跳转后的页面中

这个不用过多解释,如果存在的话说明没登录成功又退回到登录页面了。

有人会问为什么不直接判断两个页面是否相等呢

因为测试中发现有些CMS会给你在登录页面弹个登录失败的框,所以直接判断是否相等并不准确。

还有一种计算页面哈希的办法,然后判断两者的相似程度。

但是觉得并没有那个必要,因为有不同的系统难以用统一的阈值来判断,故舍弃。

关键字黑名单检测

黑名单关键字列表

1
2
3
['密码错误', '重试', '不正确', '密码有误','不成功', '重新输入', 'history.back', '不存在', '登录失败',
'登陆失败','出错','已被锁定','history.go','安全拦截','还可以尝试','无效','攻击行为','创宇盾', '非法',
'百度加速','安全威胁','防火墙','黑客', '不合法','warning.asp?msg=','Denied']

本来还设置了白名单检测机制

就是如果有“登录成功”的字样出现肯定就是爆破成功

但是后来发现并没有黑名单来的必要。

因为首先不可能把所有CMS的登录成功的正则样本都放进去

其次在测试的过程中,发现在其他检测机制的加持后,白名单的判断变得尤其鸡肋,故舍弃。

黑名单就相比而言好的多

如果弹出来"密码错误",就不用再往下判断了

然而实际测试中发现有些用js来判断登录的情况的时候,会同时出现“登录成功“,跟“登录失败”的字眼

此时就只能通过其他方式判断了。

Recheck环节

为了提高准确度,防止误报。

借鉴了web_pwd_common_crack的思路增加recheck环节。

就是再次把crack出的账号密码给发包一次,并且与重新发送的error_length作比对

如果不同则为正确密码。

在这里没有沿用上一个error_length,是因为在实际测试中发现由于waf或者其他因素会导致返回包长度值变化。

框架拓展

用上面几种办法组合起来已经可以做到基本的判断算法了

但是为了使WebCrack更加强大,我又添加了以下三个模块

动态字典

实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def gen_dynam_dic(url):
dynam_pass_dic = []
tmp_dic = []
suffix_dic = ['', '123', '888', '666', '123456']
list1 = url.split('/')
host = list1[2].split(":")[0]
compile_ip = re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
if compile_ip.match(host):
check_ip = 1
else:
check_ip = 0
if not check_ip:
list2 = host.split(".")
i = len(list2)
for u in range(i):
list3 = list2[u:]
part = '.'.join(list3)
if (len(part) < 5):
continue
dynam_pass_dic.append(part)
for u in range(i):
list3 = list2[u]
if len(list3) < 5:
continue
tmp_dic.append(list3)
for i in tmp_dic:
for suffix in suffix_dic:
u = i + suffix
dynam_pass_dic.append(u)
return dynam_pass_dic
else:
return ''

假如域名是

1
webcrack.yzddmr6.com

那么就会生成以下动态字典列表

1
2
3
4
5
6
7
8
9
10
11
12
webcrack.yzddmr6.com
yzddmr6.com
webcrack
webcrack123
webcrack888
webcrack666
webcrack123456
yzddmr6
yzddmr6123
yzddmr6888
yzddmr6666
yzddmr6123456

假如正则匹配到传来的是一个IP而不是域名的话就会返回一个空列表。

万能密码检测

后台的漏洞除了弱口令还有一大部分是出在万能密码上

在WebCrack中也添加了一些常用的payload

1
2
3
4
5
admin' or 'a'='a
'or'='or'
admin' or '1'='1' or 1=1
')or('a'='a
'or 1=1--

但是同时带来个问题会被各大WAF拦截

这时候就可以把WAF拦截的关键字写到检测黑名单里,从而大大减少误报。

小插曲

用webcrack检测目标资产进入到了recheck环节

在这里插入图片描述

但是webcrack却提示爆破失败。

手工测试了一下检测出的万能密码

在这里插入图片描述
发现出现了sql错误信息

意识到可能存在后台post注入
在这里插入图片描述

发现了sa注入点

这也反应了对于后台sql注入,webcrack的正则匹配还做的不够完善,下一个版本改一下。

自定义爆破规则

有了上面这些机制已经可以爆破大部分网站后台了

然而还是有一些特(sha)殊(diao)网站,并不符合上面的一套检测算法

于是webcrack就可以让大家自定义爆破规则。

自定义规则的配置文件放在同目录cms.json文件里

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"name":"这里是cms名称",
"keywords":"这里是cms后台页面的关键字,是识别cms的关键",
"captcha":"1为后台有验证码,0为没有。因为此版本并没有处理验证码,所以为1则退出爆破",
"exp_able":"是否启用万能密码模块爆破",
"success_flag":"登录成功后的页面的关键字",
"fail_flag":"请谨慎填写此项。如果填写此项,遇到里面的关键字就会退出爆破,用于dz等对爆破次数有限制的cms",
"alert":"若为1则会打印下面note的内容",
"note":"请保证本文件是UTF-8格式,并且请勿删除此说明"
}
]

举个例子

1
2
3
4
5
6
7
8
9
10
{
"name":"discuz",
"keywords":"admin_questionid",
"captcha":0,
"exp_able":0,
"success_flag":"admin.php?action=logout",
"fail_flag":"密码错误次数过多",
"alert":0,
"note":"discuz论坛测试"
}

其实对于dz,dedecms,phpmyadmin等框架本身的逻辑已经可以处理

添加配置文件只是因为程序默认会开启万能密码爆破模块

然而万能密码检测会引起大多数WAF封你的IP

对于dz,dedecms这种不存在万能密码的管理系统如果开启的话不仅会影响效率,并且会被封IP

所以配置文件里提供了各种自定义参数,方便用户自己设置。

关于验证码

验证码识别算是个大难题吧

自己也写过一个带有验证码的demo,但是效果并不理想

简单的验证码虽然能够识别一些,但是遇到复杂的验证码就效率极低,拖慢爆破速度

并且你识别出来也不一定就有弱口令。。。

所以就去掉了这个功能

如果有大佬对这方面有好的想法,欢迎在github上留言或者邮箱 yzddmr6*@*gmail 联系我。

总流程图

一套流程下来大概是长这个亚子

在这里插入图片描述

对比测试

找了一批样本测试,跟tidesec的版本比较了一下

  • web_pwd_common_crack 跑出来11个

其中7个可以登录。4个是逻辑上的误报,跟waf拦截后的误报。

  • webcrack 跑出来19个

其中16个可以登录。2个是ecshop的误报,1个是小众cms逻辑的误报。

  • webcrack比web_pwd_common_crack多探测出来的9个中

有5个是万能密码漏洞,2个是发现的web_pwd_common_crack的漏报,2个是动态字典探测出来的弱口令。

最后

这个项目断断续续写了半年吧

主要是世界上奇奇怪怪的网站太多了,后台登录的样式五花八门。

有些是登录后给你重定向302到后台

有些是给你重定向到登录失败页面

有些是给你返回个登录成功,然后你要手动去点跳转后台

有些直接返回空数据包。。。

更神奇的是ecshop(不知道是不是所有版本都是这样)

假如说密码是yzddmr6

但是你输入admin888 与其他错误密码后的返回页面居然不一样。。。

因为加入了万能密码模块后经常有WAF拦截,需要测试各个WAF对各个系统的拦截特征以及关键字。

总的半年下来抓包抓了上万个都有了。。。。。。

因为通用型爆破,可能无法做到百分百准确,可以自己修改配置文件来让webcrack更符合你的需求。

项目地址

https://github.com/yzddmr6/WebCrack

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

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

相关文章

前端常见的安全性问题有哪些?

安全性 前端安全问题有哪些? XSS 跨站请求攻击XSRF 跨站请求伪造上边这两个问题,前端也只是辅助,主要还是靠后端XSS原理 在博客里可以写文章,同时偷偷插入一段<script>代码。发布博客,有人查看博客内容打开博客时,就会执行插入的js攻击代码在攻击代码中,获取cook…

(fofa信息收集骚操作)windows查看文件的md5值

1、winr 输入cmd进入控制界面 2、certutil -hashfile XXXX md5(XXXX为绝对路径) Linux下查看文件md5值&#xff1a; 进入文件目录&#xff0c;使用md5sum加文件名&#xff0c;例如md5sum test.txt 像fofa的语法里有可以查找js的md5值&#xff0c;这样就可以收集到更多信息了&…

二叉树性质及遍历

一、二叉树的定义 树的每个结点至多只有二棵子树(不存在度大于2的结点)&#xff0c;树的子树有左右之分&#xff0c;次序不能颠倒。 二、二叉树的性质 (1) 在非空二叉树中&#xff0c;第i层的结点总数不超过, i>1&#xff1b;(2) 深度为h的二叉树最多有个结点(h>1)&#…

利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

目标环境&#xff1a; 比如&#xff0c;目标存在一个上传的逻辑&#xff1a; <?php if(isset($_FILES[file])) {$name basename($_POST[name]);$ext pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, [php, php3, php4, php5, phtml, pht])) {exit(bad file);}mo…

将数据压缩到数据结构中

这个故事是关于我们最近在Plumbr进行的容量优化任务。 一切始于将无害的要求添加到现有组合中。 如您所知&#xff0c;Plumbr监视解决方案作为连接到服务器的Java代理分发。 只需少量添加即可跟踪一段时间内所有已连接的代理&#xff0c;以便可以实时回答以下问题&#xff1a;…

CVE-2017-15715漏洞复现

复现环境 docke apache 2.4.0到2.4.29即可 php5.5 复现过程 先在物理机上创建目录 mkdir -p /var/www/html 然后创建个容器&#xff0c;并关联物理机的/var/www/html目录 docker run -d -v /var/www/html:/var/www/html -p 8080:80 --name apache php:5.5-apache 再把物理机的/…

Linux网络流量实时监控ifstat iftop命令详解

ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstateth0 eth1 KB/s in KB/s out KB/s in KB/s out0.07 0.20 0.00 0.000.07 0.15 0.58 0.00 默认ifstat不监控回环接口&#xff0c;…

一种移动端自适应屏幕的方法

前端移动端开发的时候肯定是会面对不同型号的手机的页面展示问题的&#xff0c;今天给大家推出另外一种自适应不同移动端的方法&#xff0c;使用vw&#xff0c;vh单位。 vw和vh单位的大小是多少&#xff1f; vw和vh是根据设备的宽度和高度来决定的&#xff0c;设备的宽就是10…

Metasploit--后渗透(一些基本操作方法)

查看主机是否运行在虚拟机上 run post/windows/gather/checkvm关闭杀毒软件 拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件&#xff0c;通过命令 run killav获取目标主机的详细信息 run scraper它将目标机器上的常见信息收集起来然后下载保存在本地 Meterpre…

端到端测试_端到端测试的滥用–测试技术2

端到端测试我的上一个博客是有关测试代码方法的一系列博客中的第一篇&#xff0c;概述了使用一种非常常见的模式从数据库检索地址的简单方案&#xff1a; …并描述了一种非常通用的测试技术&#xff1a; 不编写测试 &#xff0c; 而是手动进行所有操作。 今天的博客涵盖了另一…

Metasploit 之生成木马(msfvenom)

msfvenom参数 相关参数介绍 -p, --payload <payload> 指定需要使用的payload(攻击荷载) -l, --list [module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all -n, --nopsled <length> 为payload预先指定一个NOP滑动长度 -f, --for…

自学前端的误区和痛点解决办法

网上有很多自学的方案路线&#xff0c;还有一些知道&#xff1b;但是我感觉他们很多人都是没有真实学习过的&#xff0c;很多人说的那些路线&#xff0c;真的是扯淡&#xff1b;肯定不是自己通过自学后的感悟&#xff0c;他们所谓的路线可能是结合培训班大纲和知乎的一些答案组…

指纹识别工具(CMSeek)

你喜欢上别人挺好的啊&#xff0c;不然我总觉得我们还有可能。。。 ---- 网易云热评 介绍&#xff1a;一款扫描CMS相关信息的软件&#xff0c;该软件可进行170多个CMS的基本检测&#xff0c;可检测Drupal版本信息&#xff0c;可扫描多个站点 下载地址&#xff08;软件作者&…

kafka监控工具kafkaOffsetMoniter的使用

简介 KafkaOffsetMonitor是由Kafka开源社区提供的一款Web管理界面&#xff0c;用来实时监控Kafka的Consumer以及Partition中的Offset&#xff0c;可以在web界面直观的看到每个Partition的Message的增长速度&#xff0c;是否消费&#xff0c;是否阻塞等。 使用 如果不想编译&…

前端开发攻城狮必须知道的开发环境和插件

前端开发&#xff0c;做到后面&#xff0c;是可以走很多方向的&#xff1b;但是要保证后期的平滑过度&#xff0c;前期还是要把一些必须的知识搞扎实的&#xff1b;下面是我根据自己学习的感悟&#xff0c;写的一些东西&#xff1b;一个网站的流程,由前端工程师 使用 HTMLCSSJa…

hibernate示例_通过示例Hibernate–第1部分(删除孤儿)

hibernate示例所以我想做一系列的冬眠例子&#xff0c;展示冬眠的各种特征。 在第一部分中&#xff0c;我想展示有关删除孤儿功能及其在故事情节中的使用方式。 因此&#xff0c;让我们开始:) 先决条件 &#xff1a; 为了尝试以下示例&#xff0c;您将需要以下提到的JAR文件&…

docker更换国内镜像源

国内下载docker镜像大部分都比较慢&#xff0c;下面给大家介绍2个镜像源。 一、阿里云的docker镜像源 注册一个阿里云用户,访问 https://cr.console.aliyun.com/#/accelerator 获取专属Docker加速器地址 使用的时候修改/etc/docker/daemon.json文件就可以了&#xff0c;修改保…

(转)搞定DC/DC电源转换方案设计,必看金律十一条

[导读] 搞嵌入式的工程师们往往把单片机、ARM、DSP、FPGA搞的得心应手&#xff0c;而一旦进行系统设计&#xff0c;到了给电源系统供电&#xff0c;虽然也能让其精心设计的程序运行起来&#xff0c;但对于新手来说&#xff0c;有时可能效率低下&#xff0c;往往还有供电电流不足…

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程代码执行漏洞 漏洞概述: ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。借鉴Struts框架的Action对象&#xff0c;同时也使用面向对象的开发结构和MVC模式。1月11日&#xff0c;ThinkPHP官方发布新版本5.0.24&#xff0c…

CSDN如何上传视频?

最近想在CSDN上面上传视频&#xff0c;发现找不到入口&#xff0c;包含APP和PC端的博客&#xff0c;无奈之下只能咨询客服&#xff0c; 这个是需要提前申请讲师资格&#xff0c;需要3年以上相关经验。 发布纯IT类视频&#xff0c;先申请讲师&#xff0c;讲师申请 按照提示信息…