- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
加载验证码需要向Google申请验证码API。由于大陆地区访问不了Google,所以无法获取到验证码,所以需要耐心等待访问Google超时时间才能做本题。
可以看到,服务器将改密操作分成了两步,第一步检查用户输入的验证码,验证通过后,服务器返回表单,第二步客户端提交post请求,服务器完成更改密码的操作。但是,这其中存在明显的逻辑漏洞,服务器仅仅通过检查Change、step 参数来判断用户是否已经输入了正确的验证码。
查看源码关键判断点
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) )
发现服务器由step参数判断用户是否通过了验证码校验,所以可以直接修改发送的数据包修改step值,进而绕过验证码校验。
如图:
密码已经成功被修改
该漏洞可以配合CSRF来利用,原理都是一样的,这里不在赘述。
查看源码发现服务端要校验passed_captcha参数,step=2和passed_captcha为true才能修改密码,继续修改数据包来绕过验证
源码:
<?php
if( isset( $_POST[ 'Change' ] ) ) {
// Hide the CAPTCHA form
$hide_form = true;
// Get input
$pass_new = $_POST[ 'password_new' ];
$pass_conf = $_POST[ 'password_conf' ];
// Check CAPTCHA from 3rd party
$resp = recaptcha_check_answer(
$_DVWA[ 'recaptcha_private_key' ],
$_POST['g-recaptcha-response']
);
if (
$resp ||
(
$_POST[ 'g-recaptcha-response' ] == 'hidd3n_valu3'
&& $_SERVER[ 'HTTP_USER_AGENT' ] == 'reCAPTCHA'
)
){
// CAPTCHA was correct. Do both new passwords match?
if ($pass_new == $pass_conf) {
$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$pass_new = md5( $pass_new );
// Update database
$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>' );
// Feedback for user
echo "<pre>Password Changed.</pre>";
} else {
// Ops. Password mismatch
$html .= "<pre>Both passwords must match.</pre>";
$hide_form = false;
}
} else {
// What happens when the CAPTCHA was entered incorrectly
$html .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
$hide_form = false;
return;
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// Generate Anti-CSRF token
generateSessionToken();
?>
第18行要验证$resp的逻辑值,因为此参数由Google传递,所以不可控
第20行要验证g-recaptcha-response的值为hidd3n_valu3,可控
第21行要验证HTTP_USER_AGENT的值为reCAPTCHA,可控
修改HTTP_USER_AGENT的值和POST传递g-recaptcha-response的值即可绕过验证直接修改密码
首先抓取一个数据包
然后修改g-recaptcha-response参数以及User-Agent
再查看网站发现已经修改成功
查看源码发现加入了Check Anti-CSRF token 防御CSRF攻击
使用了PDO技术防御SQL注入
还必须输入就密码才能修改密码,所以本题暂无解决思路。
这个网址:https://slowapi.com 我找不到不安全的内容,Chrome 一直在提示, 有任何想法吗? 最佳答案 当要求 HTTPS 页面通过 HTTP 加载资源时,会出现“混合内容”警告
我对 chrome 进行了扩展。当我浏览到 https 下的网站时,我的链接仍在 http 下,我收到:“该站点使用 SSL,但 Google Chrome 检测到页面上存在高风险不安全内容或站点证书
Insecure CAPTCHA(不安全的验证码) 加载验证码需要向Google申请验证码API。由于大陆地区访问不了Google,所以无法获取到验证码,所以需要耐心等待访问Google超时时间才能做
JSLint 报告以下行的不安全“^”。这是为什么?还是只要我想否定一个字符类,它就会提示? // remove all non alphanumeric, comma and dash charac
我正在尝试使我的Javascript代码100%JSLint干净。 我有一个正则表达式: linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g; JSLint报告:
我有以下代码: using (FileStream fs = new FileStream(path_to_xml, FileMode.Open)) { using (XmlReader xr
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
runserver --insecure 时有没有办法提供媒体文件? 它只提供 css 和 js 以及图像,但我需要提供媒体文件...... They提到使用 cachefile 是不可能的,但没有关
这个问题已经有答案了: Open a new tab/window and write something to it? (3 个回答) 已关闭 9 年前。 我正在用 JavaScript 创建一个名
我有以下 html 元素 Edit 单击时,我想从 data-content 属性读取内容并填充相应的 html 元素。 这是我的尝试 $('.btn-modal').on('click', func
我必须使用输入类型文件(图片)更新数据,但是当用户没有更新图片时,会出现安全错误,我尝试用此 answer with 21 vote 来解决问题我在控制台中得到这个 There is an input
我有一个自定义的 FileArgument 类,我用它来存储有关上传文件的信息: export class FileArgument { name: string; path: string;
JSLint 报告以下行的不安全“^”。这是为什么?还是只要我想否定一个字符类,它就会提示? // remove all non alphanumeric, comma and dash charac
登录时使用自签名证书的私有(private)注册表说明: FATA[0005] Error response from daemon: v1 ping attempt failed with erro
在安装好Docker以后,想从公司搭建的私服Harbor上docker pull的时候碰上了x509问题,这个问题的原因是docker会验证网站的证书,私服没有相应的证书所以docker拒绝访问,但
Flutter 团队最近做了这个改变,现在不允许不安全的 http 连接。 https://flutter.dev/docs/release/breaking-changes/network-poli
当我以下一种方式将历史记录推送到浏览器时: window.history.pushState( { some_safe_data: data
当我尝试加载使用 cPickle 转储的内容时,我收到错误消息: ValueError: insecure string pickle 转储和加载工作都在同一台计算机上完成,因此使用相同的操作系统:U
我正在尝试向 jQuery Mobile 页面动态添加元数据 block 、链接和脚本。 脚本包含一个规则,我正在通过 javascript 添加到 CSS 样式表(不幸的是必须是这样)。 看起来像这
我在我的项目中使用了 html2canvas.js 将我的元素(主体)转换为 Canvas ,然后将 Canvas 转换为图像。我的元素包含从跨域加载的图像。从元素创建的 Canvas 工作正常,但是
我是一名优秀的程序员,十分优秀!