low
说是暴力破解,其实也有SQL注入,比如:
但是用暴破的方式怎么做呢?首先要有个好的字典,这就属于社会工程学了,可以自己平时收集一下好用的字典,不过这里通关演示的话就随便创建一个字典用burp暴就行了,没意思,过!(为啥不写具体过程呢,因为太晚了,还要打开虚拟机,由于种种原因我的burp装在虚拟机里了,所以等有时间再补全详细过程吧)
medium
看下源码吧,这里不是我自己写的,因为懒,而且人家写的挺好的,我自惭形秽。。。
<?php
//是否存在Login变量(标签里面的name),检查是否存在Login按钮
if( isset( $_GET[ 'Login' ] ) ) {
// Sanitise username input
//获取用户名,存入user变量里
$user = $_GET[ 'username' ];
//user中x00,n,r,,’,”,x1a转义,防SQL注入
$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)) ? "" : ""));
// Sanitise password input
$pass = $_GET[ 'password' ];
//pass中x00,n,r,,’,”,x1a转义,防SQL注入
$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 the database
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "<p>Welcome to the password protected area {$user}</p>";
echo "<img src=\"{$avatar}\" />";
}
else {
// Login failed
sleep( 2 );
echo "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
相比Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进行转义,基本上能够抵御sql注入攻击。同时,$pass做了MD5校验,杜绝了通过参数password进行sql注入的可能性。但是,依然没有加入有效的防爆破机制(sleep(2)实在算不上)。
剩下的就是用burp暴破了,和low一样,过!
high
这里开始麻烦起来了,加入了token,那就用burpsuit拿下吧!
步骤如下:
输入用户名admin,随便输入密码然后把包拦截下来如下,发到测试器里选上password和token,类型选Pitchfork:
然后在payload里1选简单清单,然后导入一个字典,注意这里为了做题,一定要包含正确密码。2选递归搜索,并把刚才的token值粘到下面这里:
之后在选项里找到Grep-Extract,点击添加,然后刷新一下获得当前请求的回复,找到token值并选中,之后点ok。
最后在请求引擎里把线程改为1,就可以开始攻击了。
看长度,就它没错了,搞渗透的话,从某某那里听到一句话,事出反常必有妖,密码就是1234,结束!
impossible
加入了账户锁定机制防暴破。