something about DVWA - brute force
DVWA
Brute Force(暴力破解)
Low
选取暴破点
GET /dvwa/vulnerabilities/brute/?username=admin&password=§p§&Login=Login HTTP/1.1中,
对password进行暴破。设置payload
Attact type选择Sniper,Payloads选择Runtime file, 既而选择密码 字典文件(2019_top100.txt),暴力破解即可。源码分析
直接从
request中获取参数1
$pass = $_GET[ 'password' ];
直接将参数以字符串的方式拼接入sql
1
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
Medium
选取暴破点
与
Low级别相同。设置payload
与
Low级别相同。源码分析
从
request中获取参数后,使用mysqli_real_escape_string函数对参数中可能干扰到sql查询的特殊字符进行删除。1
$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)) ? "" : ""));
High
选取暴破点
由于有
token检测,除了password暴破点外,还需要设置user_token暴破点。
GET /dvwa/vulnerabilities/brute/?username=admin&password=§pa§&Login=Login&user_token=§ad5031ef52b181892a11a845db6807b7§ HTTP/1.1设置Options
由于需要绕过
token检测,因此需要获取页面请求时返回的token值。由于需要先进行
页面请求,再进行暴破,因此需要用到重定向。Redirections中设置Follow redirections:为Always在
Options中,Grep - Extract中添加一条记录,捕获token值。
Refetch response后,选中token的value值,burpsuite会自动生成对应的捕获正则表达式, 添加即可在每次的页面请求response中捕获对应token值,用于payload中。由于绕过
token需要对每一次的页面请求response的token值进行捕获,因此不可以使用多线程。Resource Pool中自定义Max concurrent requests为1的规则。设置payload
Attact type设置为Pitchfork后对每个暴破点设置payload。password暴破点的payload正常设置。token的payload设置为Recursive grep,也即使用捕获的token值。源码分析
检测
token先进行
token的检测检测通过,再进行后续操作。1
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
stripslashes函数过滤参数从
request中获取参数后,先使用stripslashes函数去除参数中的\字符。1
$pass = stripslashes( $pass );
mysqli_real_escape_string函数过滤参数再使用
mysqli_real_escape_string函数对参数中可能干扰到sql查询的特殊字符进行删除。1
$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)) ? "" : ""));
Impossible
相比High级别,增加了尝试次数的限定,超过尝试次数后一段时间内禁止尝试。
1 | // Default values |