怎么查询网站是否收录,营销策划书范文案例,qq网页版打开网页,做网站要钱的吗目录 Insecure CAPTCHA(不安全验证)low源码审计 medium源码审计 high源码审计 impossible源码审计 Insecure CAPTCHA(不安全验证)
Insecure CAPTCHA#xff08;不安全验证#xff09;漏洞指的是在实现 CAPTCHA#xff08;完全自动化公共图灵测试区分计算机和人类#xff0… 目录 Insecure CAPTCHA(不安全验证)low源码审计 medium源码审计 high源码审计 impossible源码审计 Insecure CAPTCHA(不安全验证)
Insecure CAPTCHA不安全验证漏洞指的是在实现 CAPTCHA完全自动化公共图灵测试区分计算机和人类机制时未能有效保护用户输入的验证信息从而使得攻击者能够绕过或破解该验证机制。这类漏洞通常出现在网络应用程序中目的是防止自动化脚本如机器人对网站进行滥用CAPTCHA全称为Completely Automated Public Turing Test to Tell Computers and Humans Apart中文名字是全自动区分计算机和人类的图灵测试
low
正常修改会报错 重新修改密码并抓包发送到重放器 将step1修改为step2发包 修改成功
源码审计
并没有什么过滤设置了step2才能修改使用**mysqli_real_escape_string**可能SQL注入使用了不安全的md5加密算法
?phpif (isset($_POST[Change]) ($_POST[step] 1)) { // Step 1: 用户提交了第一个表单并且是第一步$hide_form true; // 标识隐藏CAPTCHA表单// 获取用户输入的新密码和确认密码$pass_new $_POST[password_new];$pass_conf $_POST[password_conf];// 通过第三方服务检查CAPTCHA$resp recaptcha_check_answer($_DVWA[recaptcha_private_key],$_POST[g-recaptcha-response]);// CAPTCHA验证未通过if (!$resp) {$html . prebr /The CAPTCHA was incorrect. Please try again./pre;$hide_form false; // 如果错误不隐藏表单return;} else {// CAPTCHA验证通过检查两次输入的密码是否匹配if ($pass_new $pass_conf) {// 如果匹配让用户确认更改$html . prebr /You passed the CAPTCHA! Click the button to confirm your changes.br //preform action\#\ method\POST\input type\hidden\ name\step\ value\2\ /input type\hidden\ name\password_new\ value\{$pass_new}\ /input type\hidden\ name\password_conf\ value\{$pass_conf}\ /input type\submit\ name\Change\ value\Change\ //form;} else {// 两次输入的密码不匹配$html . preBoth passwords must match./pre;$hide_form false; // 不隐藏表单提示用户重新输入}}
}
if (isset($_POST[Change]) ($_POST[step] 2)) { // Step 2: 用户提交确认后的表单进行更改操作$hide_form true; // 隐藏CAPTCHA表单// 获取用户输入的新密码和确认密码$pass_new $_POST[password_new];$pass_conf $_POST[password_conf];// 确认两个密码匹配if ($pass_new $pass_conf) {// 对特殊字符进行转义防止SQL注入$pass_new ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $pass_new) : );// 将密码进行md5加密注md5已不再安全实际应用中应使用更安全的加密方式$pass_new md5($pass_new);// 更新数据库中当前用户的密码$insert UPDATE users SET password $pass_new WHERE user . dvwaCurrentUser() . ;;$result mysqli_query($GLOBALS[___mysqli_ston], $insert) or die(pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre);// 给用户反馈密码已更改$html . prePassword Changed./pre;} else {// 两次输入的密码不匹配$html . prePasswords did not match./pre;$hide_form false; // 提示错误不隐藏表单}// 关闭数据库连接((is_null($___mysqli_res mysqli_close($GLOBALS[___mysqli_ston]))) ? false : $___mysqli_res);
}
?medium
同样修改后抓包 这里查看源码可以发现设置了passed_captcha验证 将step1修改为step2并且添加passed_captchatrue 修改成功
源码审计
与low级别差不多多了一个设置passed_captchatrue才能正常修改
?phpif (isset($_POST[Change]) ($_POST[step] 1)) {// 第一步用户提交了表单且处于步骤1$hide_form true; // 标识隐藏CAPTCHA表单// 获取用户输入的新密码和确认密码$pass_new $_POST[password_new];$pass_conf $_POST[password_conf];// 从第三方验证CAPTCHA$resp recaptcha_check_answer($_DVWA[recaptcha_private_key],$_POST[g-recaptcha-response]);// CAPTCHA验证未通过if (!$resp) {$html . prebr /The CAPTCHA was incorrect. Please try again./pre;$hide_form false; // 如果错误不隐藏表单return;} else {// CAPTCHA验证通过检查两次输入的密码是否匹配if ($pass_new $pass_conf) {// 密码匹配显示下一步$html . prebr /You passed the CAPTCHA! Click the button to confirm your changes.br //preform action\#\ method\POST\input type\hidden\ name\step\ value\2\ /input type\hidden\ name\password_new\ value\{$pass_new}\ /input type\hidden\ name\password_conf\ value\{$pass_conf}\ /input type\hidden\ name\passed_captcha\ value\true\ /input type\submit\ name\Change\ value\Change\ //form;} else {// 两次输入的密码不匹配$html . preBoth passwords must match./pre;$hide_form false; // 不隐藏表单提示用户重新输入}}
}
if (isset($_POST[Change]) ($_POST[step] 2)) {// 第二步用户提交确认后的表单$hide_form true; // 隐藏CAPTCHA表单// 获取用户输入的新密码和确认密码$pass_new $_POST[password_new];$pass_conf $_POST[password_conf];// 确保用户完成了第一步if (!$_POST[passed_captcha]) {$html . prebr /You have not passed the CAPTCHA./pre;$hide_form false;return;}// 检查两次输入的密码是否匹配if ($pass_new $pass_conf) {// 匹配进行密码更新// 转义特殊字符防止SQL注入$pass_new ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $pass_new) : );// 使用md5加密密码注意md5不够安全实际应用中应使用更好的加密方法$pass_new md5($pass_new);// 更新数据库中的用户密码$insert UPDATE users SET password $pass_new WHERE user . dvwaCurrentUser() . ;;$result mysqli_query($GLOBALS[___mysqli_ston], $insert) or die(pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre);// 反馈用户密码已更改$html . prePassword Changed./pre;} else {// 两次输入的密码不匹配$html . prePasswords did not match./pre;$hide_form false;}// 关闭数据库连接((is_null($___mysqli_res mysqli_close($GLOBALS[___mysqli_ston]))) ? false : $___mysqli_res);
}
?high
定位登录框发现这么一处注释 **DEV NOTE** Response: hidd3n_valu3 User-Agent: reCAPTCHA **/DEV NOTE** 结合源码得知需要g-recaptcha-responsehidd3n_valu3 并且 User-Agent: ‘reCAPTCHA’ 同样修改后抓包 发送包并修改参数 修改成功
源码审计
设置了请求头reCAPTCHA g-recaptcha-response hidd3n_valu3以及token使会话更有安全性还利用CSRF令牌使的更安全
?phpif (isset($_POST[Change])) {// 用户提交了表单隐藏CAPTCHA表单$hide_form true;// 获取用户输入的新密码和确认密码$pass_new $_POST[password_new];$pass_conf $_POST[password_conf];// 验证CAPTCHA$resp recaptcha_check_answer($_DVWA[recaptcha_private_key],$_POST[g-recaptcha-response]);// 检查CAPTCHA验证是否通过或符合内置绕过条件if ($resp || ($_POST[g-recaptcha-response] hidd3n_valu3 $_SERVER[HTTP_USER_AGENT] reCAPTCHA)) {// CAPTCHA验证通过检查两次输入的密码是否匹配if ($pass_new $pass_conf) {// 转义输入以防止SQL注入攻击$pass_new ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $pass_new) : );// 使用md5加密密码注意不推荐在生产环境中使用$pass_new md5($pass_new);// 更新数据库用户密码$insert UPDATE users SET password $pass_new WHERE user . dvwaCurrentUser() . LIMIT 1;;$result mysqli_query($GLOBALS[___mysqli_ston], $insert) or die(pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre);// 返回用户的反馈信息$html . prePassword Changed./pre;} else {// 如果密码不匹配$html . preBoth passwords must match./pre;$hide_form false;}} else {// CAPTCHA输入错误时的响应$html . prebr /The CAPTCHA was incorrect. Please try again./pre;$hide_form false;return;}// 关闭数据库连接((is_null($___mysqli_res mysqli_close($GLOBALS[___mysqli_ston]))) ? false : $___mysqli_res);
}// 生成反CSRF攻击的令牌
generateSessionToken();
?impossible
源码审计
结合反CSRF令牌和CAPTCHA提高安全性并且使用PDO和参数绑定防止SQL注入。
?php
if (isset($_POST[Change])) {// 检查反CSRF令牌确保请求的合法性checkToken($_REQUEST[user_token], $_SESSION[session_token], index.php);// 隐藏CAPTCHA表单$hide_form true;// 获取用户输入的新密码并移除转义字符$pass_new $_POST[password_new];$pass_new stripslashes($pass_new);$pass_new ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $pass_new) : );$pass_new md5($pass_new); // 对新密码进行MD5加密// 获取用户输入的确认密码并移除转义字符$pass_conf $_POST[password_conf];$pass_conf stripslashes($pass_conf);$pass_conf ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $pass_conf) : );$pass_conf md5($pass_conf); // 对确认密码进行MD5加密// 获取用户输入的当前密码并移除转义字符$pass_curr $_POST[password_current];$pass_curr stripslashes($pass_curr);$pass_curr ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $pass_curr) : );$pass_curr md5($pass_curr); // 对当前密码进行MD5加密// 使用第三方功能验证CAPTCHA$resp recaptcha_check_answer($_DVWA[recaptcha_private_key],$_POST[g-recaptcha-response]);// 如果CAPTCHA验证失败if (!$resp) {// 反馈信息CAPTCHA错误$html . prebr /The CAPTCHA was incorrect. Please try again./pre;$hide_form false;} else {// 检查当前密码是否正确$data $db-prepare(SELECT password FROM users WHERE user (:user) AND password (:password) LIMIT 1;);$data-bindParam(:user, dvwaCurrentUser(), PDO::PARAM_STR);$data-bindParam(:password, $pass_curr, PDO::PARAM_STR);$data-execute();// 检查新密码是否匹配且当前密码是否正确if (($pass_new $pass_conf) ($data-rowCount() 1)) {// 更新数据库中的用户密码$data $db-prepare(UPDATE users SET password (:password) WHERE user (:user););$data-bindParam(:password, $pass_new, PDO::PARAM_STR);$data-bindParam(:user, dvwaCurrentUser(), PDO::PARAM_STR);$data-execute();// 用户反馈成功$html . prePassword Changed./pre;} else {// 用户反馈失败$html . preEither your current password is incorrect or the new passwords did not match.br /Please try again./pre;$hide_form false;}}
}// 生成反CSRF攻击的令牌
generateSessionToken();
?$data-execute();// 用户反馈成功$html . prePassword Changed./pre;} else {// 用户反馈失败$html . preEither your current password is incorrect or the new passwords did not match.br /Please try again./pre;$hide_form false;}
}}
// 生成反CSRF攻击的令牌 generateSessionToken(); ?