暴力破解之Token绕过

2023-10-21 11:23:00 浏览数 (2)

记录一下暴力破解时绕过Token的方法。

靶场环境搭建

源文件下载

代码语言:javascript复制
git clone https://github.com/zhuifengshaonianhanlu/pikachu.git

将下载的源文件放置在phpstudyWWW目录下,修改WWWpikachuinc目录下的config.inc.php

代码语言:javascript复制
define('DBHOST', '127.0.0.1');//将localhost或者127.0.0.1修改为数据库服务器的地址
define('DBUSER', 'root');//将root修改为连接mysql的用户名
define('DBPW', 'your password');//将root修改为连接mysql的密码,如果改了还是连接不上,请先手动连接下你的数据库,确保数据库服务没问题在说!
define('DBNAME', 'pikachu');//自定义,建议不修改
define('DBPORT', '3306');//将3306修改为mysql的连接端口,默认tcp3306

打开phpstudy,启动ApacheMySQL服务。

点击网站>>创建网站,根目录选择pikachu,点击确认,代开浏览器访问localhost:80即可。

Token防爆破?

进入靶场,查看源码,发现有一个token,每刷新一次网页就会改变值。

所以使用token来防止暴力破解是没有任何用处的,因为他已经在网页响应中可以查看到了

什么是Token

Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。

抓包

打开代理,用户名输入admin(其实用户名也需要暴力破解,这里就不赘述了,直接用admin),密码随便输入一串数字,用burp suite抓包。发现POST方式不仅传递了用户名和密码,还传递了一个token值,这个token值应该是我们访问这个页面时就已经存在了,所以我们需要得到每一个返回包中的token值,然后进行爆破。全选,点击右键,send to intruder

代码语言:javascript复制
POST /vul/burteforce/bf_token.php HTTP/1.1
Host: localhost:83
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 77
Origin: http://localhost:83
Connection: close
Referer: http://localhost:83/vul/burteforce/bf_token.php
Cookie: PHPSESSID=kltiqjun7dq9lh5bejeekoosnt
Upgrade-Insecure-Requests: 1

username=admin&password=123456&token=9542662f66eac423a8799183261&submit=Login

选中密码和token,点击添加payload位置,成功后密码和token的值两边会加上§符号。攻击模式选择pitchfork

一个密码对应一个token值。

构造payload

密码构造很简单,载入一个字典文件即可。

接下来构造tokenpayload。选择payload集为2。点击资源池,创建一个线程为1延迟2000的资源池。因为token是一对一的关系,当第二个token产生,第一个token就会消失,所以需要将线程调整至1。

进入选项(Option),在Grep-Extract模块中添加token

点击获取响应,然后在响应中搜索token,选中value,复制下来并点击OK

在重定向模块中选择always,回到payload界面。

选择payload类型递归匹配(Recursive grep)。再将刚才复制的第一个token值粘贴在下方的第一个请求的初始payload

爆破

开始爆破。发现密码为123456时的length与其他不同,所以密码为123456。用这个密码尝试登录,发现login success,就这样完成了绕过token的暴力破解。

总结

所以这里的token防爆破其实没有任何用。

如何有效的防范暴力破解?

  • 系统层面

  1. 验证码策略:设计安全的验证码(安全的流程 复杂可用的图形)
  2. 锁定策略:认证错误对提交次数给予限制,比如错误三次不可再登录2小时。
  3. 双因子认证:结合两种不同的认证因素对认证用户。如密码、身份证、安全令牌、指纹、面部识别、地理信息等。
  • 人为层面

  1. 提高密码的长度与复杂度。密码每增加一位,爆破的时间就会成指数地增长,加大对方爆破的成本。
  2. 避免使用字典单词。
  3. 避免使用个人非机密信息作为密码,例如电话号码、出生日期、名字缩写。

0 人点赞