pikachu-BurteForce(暴力破解)

请原谅我,这篇文章是个远古巨坑,直到现在我也懒得写完,但是主体架构已经完成了,不要慌!

前言

本篇为系列教程主要面向小白以及刚入门的新手(对bp等渗透测试工具有一个较为简单的了解),从最底层的代码到漏洞原理再到漏洞的利用,希望可以用最简单的语言以及例子对常见的漏洞进行讲解。所以本系列文章不单单是某个靶场的WP,在进行测试的时候我们会更倾向于漏洞的原理进行解析而不仅仅是写一个过程。

暴力破解

Burte Force(暴力破解)概述:
简而言之就是使用自动化工具结合字典对后台等登录地址进行账户以及密码爆破
本篇文章将从最简单毫无防御等登录模块入手,对暴力破解攻击有一个基础的了解。后面我们将对错误配置的验证码模块以及token进行绕过。

高效的密码字典

至少需要包括

  1. 常见的弱口令表,例如常见用户名、弱口令TOP 100、500、1000,常见厂商的设备的默认账户密码等
  2. 用于生成指定形式的字典生成工具,例如生成纯数字(验证码) 或者指定开头结尾格式的密码字典等
  3. 遭到攻击被脱裤的账号密码库或者用户信息库等

基于表单的暴力破解

一个最简单的密码爆破案例

WP

  1. 将抓取到的登录流量发送至爆破模块

  2. 这里选择清除

  3. 对需要爆破的字段选择添加

    这里属于固定用户名对密码进行爆破,如果也需要爆破用户名选中用户名字段点击添加即可。

  1. 在payload页面载入我们事先准备好的字典
  1. 点击开始即可进行爆破攻击

  2. 如果回显状态码都一样 查看长度

  3. 使用之前爆破出的密码进行登录测试

以上就是最简单的爆破流程,下面我们来讲一下如何确认密码是否爆破成功。

区分是否爆破成功的方法

  1. 查看回显状态码

    例如:200允许访问、403是拒绝访问等

  2. 查看回显数据包长度

    通过回显的内容不同 数据包的长度也会不同
    比如:”login success” 与 “password error” 的包长度一定是不同的,详细可以参考我们第一个简单的案例

什么是验证码

再进行第一个验证码绕过之前 这里先来讲一下验证码的基本原理以及作用

验证码作用

  1. 防止暴力破解(从安全角度)
  2. 防止恶意注册
  3. 防止爬虫恶意爬取等(节省系统资源)

验证码认证流程

常见验证码种类

短信验证码:
通常是用户填好手机号码,单击获取验证码后,填写手机收到的短信内容即可。
字母验证码:
展现形式为,在页面的验证码输入框附近以图片的形式展示字母
图片验证码
展现形式为根据页面提示选择正确的图片,如谷歌reCAPTCHA、12306购票系统等

验证码绕过(on server)

在进行第一个验证码绕过的时候我们先来学一下什么是验证码

验证码不刷新问题

通过测试发现 虽然存在验证码模块但是如果账户密码存在错误验证码也不会进行更新

WP

Pastedimage20210330153429

源码分析

Pastedimage20210402131445

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
if(isset($_POST['submit'])) {
if (empty($_POST['username'])) {
$html .= "<p class='notice'>用户名不能为空</p>";
} else {
if (empty($_POST['password'])) {
$html .= "<p class='notice'>密码不能为空</p>";
} else {
if (empty($_POST['vcode'])) {
$html .= "<p class='notice'>验证码不能为空哦!</p>";
} else {
// 验证验证码是否正确
if (strtolower($_POST['vcode']) != strtolower($_SESSION['vcode'])) {
$html .= "<p class='notice'>验证码输入错误哦!</p>";
//应该在验证完成后,销毁该$_SESSION['vcode']
}else{

$username = $_POST['username'];
$password = $_POST['password'];
$vcode = $_POST['vcode'];

$sql = "select * from users where username=? and password=md5(?)";
$line_pre = $link->prepare($sql);

$line_pre->bind_param('ss',$username,$password);

if($line_pre->execute()){
$line_pre->store_result();
//虽然前面做了为空判断,但最后,却没有验证验证码!!!

验证码绕过(on client)

源码分析

通过阅读源码发现是在客户端进行生成的验证码,以下是生成验证码的js代码

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
33
34
35
36
37
<script language="javascript" type="text/javascript">
var code; //在全局 定义验证码
function createCode() {
code = "";
var codeLength = 5;//验证码的长度
var checkCode = document.getElementById("checkCode");
var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的

for (var i = 0; i < codeLength; i++) {
var charIndex = Math.floor(Math.random() * 36);
code += selectChar[charIndex];
}
//alert(code);
if (checkCode) {
checkCode.className = "code";
checkCode.value = code;
}
}

function validate() {
var inputCode = document.querySelector('#bf_client .vcode').value;
if (inputCode.length <= 0) {
alert("请输入验证码!");
return false;
} else if (inputCode != code) {
alert("验证码输入错误!");
createCode();//刷新验证码
return false;
}
else {
return true;
}
}


createCode();
</script>

WP

所以只需要禁用本地js代码即可绕过
浏览器禁用验证码插件:

禁用以后的效果:
xxxx图片!!!!!

Token防爆破?

  • 漏洞描述:开发人员希望用token+username+passwd 来防止暴力破解,但因为token是以 type='hide'的方式显示在前端,攻击者可以利用脚本或者工具直接获取到token值进行暴力破解

token验证的基本机制:
1、当客户端第一次请求时,发送用户信息至服务器(用户名、密码),服务器对用户信息使用HS256算法及密钥进行签名,再将这个签名和数据一起作为Token一起返回给客户端
2、服务器不保存Token,客户端保存Token(比如放在 Cookie 里或者 Local Storage 里)
3、当客户端再次发送请求时,在请求信息中将Token一起发给服务器
4、服务器用同样的HS256算法和同样的密钥,对数据再进行一次签名,和客户端返回的Token的签名进行比较,如果验证成功,就向客户端返回请求的数据

源码分析

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
if(isset($_POST['submit']) && $_POST['username'] && $_POST['password'] && $_POST['token']){

$username = $_POST['username'];
$password = $_POST['password'];
$token = $_POST['token'];

$sql = "select * from users where username=? and password=md5(?)";
$line_pre = $link->prepare($sql);


$line_pre->bind_param('ss',$username,$password);

if($token == $_SESSION['token']){

if($line_pre->execute()){
$line_pre->store_result();
if($line_pre->num_rows>0){
$html.= '<p> login success</p>';

} else{
$html.= '<p> username or password is not exists~</p>';
}

}else{
$html.= '<p>执行错误:'.$line_pre->errno.'错误信息:'.$line_pre->error.'</p>';
}


}else{
$html.= '<p> csrf token error</p>';
}

WP

1.

2.

3.

4.

5.

6.

7.


pikachu-BurteForce(暴力破解)
https://www.gasmaze.com/posts/6559c873.html
作者
GasMaze
发布于
2022年9月18日
许可协议