开始学习PHP代码审计,看网上大表哥推荐最好先审计一下DVWA,搞清楚这些漏洞的原理,然后再进行审计的深入学习和实战。
Brute Force
关于爆破我就只是简单说一下就可以了,感觉没啥好说的,而且他这个是没有验证码的,如果查询错误只会休眠一段时间
else {
// Login failed
sleep( 2 );
echo "<pre><br />Username and/or password incorrect.</pre>";
}
//Medium和High都只是休眠一段时间
在Impossible当中,登陆账号错误会进行计数,如果错误次数超过3次,就会进行账号登陆限制,经过一段时间过后才会解封。
大概代码是这样
//定义允许错误的次数
$total_failed_login = 3;
//如果登陆失败就会更新错误次数
SQL语句:UPDATE users SET failed_login = (failed_login + 1) WHERE user = (:user) LIMIT 1;
//如果错误次数超过3次,就冻结账号
if( ( $data->rowCount() == 1 ) && ( $row[ 'failed_login' ] >= $total_failed_login ) ) {
// User locked out. Note, using this method would allow for user enumeration!
//echo "<pre><br />This account has been locked due to too many incorrect logins.</pre>";
// Calculate when the user would be allowed to login again
$last_login = $row[ 'last_login' ];
$last_login = strtotime( $last_login );
$timeout = strtotime( "{$last_login} +{$lockout_time} minutes" );
$timenow = strtotime( "now" );
// Check to see if enough time has passed, if it hasn't locked the account
if( $timenow > $timeout )
$account_locked = true;
}
Command Injection
这个漏洞的原理就是满足条件之后就执行shell_exec()这个函数,可以执行系统命令
Windows下
&& 前一个命令执行成功才会执行后一个命令(如果前一个命令正确,后一个错误,则只执行前一个)
& 两条命令没有直接关系,互不影响
|| 只要其中一条命令正确即可执行,如果都正确,只执行前一条命令(在Windows命令行下是这样)
| 管道符,要两条命令同时都正确时才能执行,且只显示后一条命令的执行结果
Linux:
&& 第一条命令正确,才开始执行,执行并显示所有正确的命令
& 从后面的命令开始往前执行并显示正确命令的执行结果
|| 如果两条命令都正确,只执行第一条&#