没有网站怎么做cpa赚钱,保护wordpress图片,wordpress uehtml,国内视频网站域名目录标题 Open HTTP Redirectlow源码审计 medium源码审计 high源码审计 impossible源码审计 Open HTTP Redirect
HTTP 重定向#xff08;HTTP Redirect Attack#xff09;是一种网络#xff0c;利用 HTTP 协议中的重定向机制#xff0c;将用户引导至恶意网站或非法页面HTTP Redirect Attack是一种网络利用 HTTP 协议中的重定向机制将用户引导至恶意网站或非法页面进而进行钓鱼、恶意软件传播等恶意行为。攻击者通常通过操控重定向响应头或 URL 参数实现这种
HTTP 重定向基本原理
HTTP 重定向是一种用于通知客户端如浏览器请求的资源已被移动到另一个位置的机制通常由服务器发送 3xx 系列状态码响应。常见的重定向状态码包括 301 Moved Permanently永久重定向表示请求的资源已被永久移动到新的 URL。 302 Found临时重定向表示请求的资源临时在另一个 URL 上。 303 See Other建议客户端使用 GET 方法获取资源。 307 Temporary Redirect临时重定向保持请求方法不变。 308 Permanent Redirect永久重定向保持请求方法不变。
HTTP 重定向方式
HTTP 重定向主要利用了合法的重定向机制通过各种方式将用户重定向到恶意网站。常见的方式包括
开放重定向Open Redirect
通过操控网站的 URL 参数实现对重定向目标的控制。例如合法网站的 URL 参数 redirecthttp://example.com 被替换为 redirecthttp://malicious.com导致用户被重定向到恶意网站。
钓鱼Phishing
利用重定向将用户引导到伪装成合法网站的恶意网站诱骗用户输入敏感信息如登录凭证、银行账号。
恶意软件传播Malware Distribution
通过重定向将用户引导到托管恶意软件的网站诱骗用户下载和安装恶意软件。
low
随便点击一个链接发现url栏有传参点 定位源码查看发现重定向点 修改为source/low.php?redirecthttp://www.baidu.com 成功跳转
源码审计
没有存在过滤不安全
?php
// 检查URL中是否存在redirect参数并且该参数不为空。
if (array_key_exists(redirect, $_GET) $_GET[redirect] ! ) {// 如果存在redirect参数且不为空则进行重定向到指定的路径。header(location: . $_GET[redirect]);exit; // 终止脚本执行
}
// 如果redirect参数不存在或为空则返回HTTP 500状态码并显示缺少重定向目标的错误信息。
http_response_code(500);
?
pMissing redirect target./p
?php
exit; // 终止脚本执行
?medium
与low级别的方法没什么区别查看源码可以发现不同的地方在于禁用了http://https:// 字段
构造url绕过 source/low.php?redirectwww.baidu.com如果没有明确指定协议直接以 // 开头则表示使用和当前页面相同的协议便可以绕过了 源码审计
利用正则表达式检查是否含有http:// https:// 字段。如果有则过滤
?php
// 检查URL中是否存在redirect参数并且该参数不为空。
if (array_key_exists(redirect, $_GET) $_GET[redirect] ! ) {// 使用正则表达式检查redirect参数是否包含不安全的绝对URL。if (preg_match(/http:\/\/|https:\/\//i, $_GET[redirect])) {// 如果是绝对URL则返回HTTP 500状态码并显示错误信息。http_response_code(500);?pAbsolute URLs not allowed./p?phpexit; // 终止脚本执行} else {// 如果是相对路径则进行重定向到指定的路径。header(location: . $_GET[redirect]);exit; // 终止脚本执行}
}
// 如果redirect参数不存在则返回HTTP 500状态码并显示缺少重定向目标的错误信息。
http_response_code(500);
?
pMissing redirect target./p
?php
exit; // 终止脚本执行
?high
查看源码可以发现与上面两个级别不同的是检查是否有info.php字段如果没有则不能进行重定向
构造代码绕过source/low.php?redirecthttp://www.baidu.com?idinfo.php 成功绕过
源码审计
检查了url种是否含有info.php字段如果没有则会过滤
?php
// 检查URL中是否存在redirect参数并且该参数不为空。
if (array_key_exists(redirect, $_GET) $_GET[redirect] ! ) {// 检查redirect参数中是否包含info.php。if (strpos($_GET[redirect], info.php) ! false) {// 如果包含info.php则进行重定向。header(location: . $_GET[redirect]);exit; // 终止脚本执行} else {// 如果不包含info.php返回HTTP 500状态码和错误信息。http_response_code(500);?pYou can only redirect to the info page./p?phpexit; // 终止脚本执行}
}
// 如果redirect参数不存在或为空则返回HTTP 500状态码并显示缺少重定向目标的错误信息。
http_response_code(500);
?
pMissing redirect target./p
?php
exit; // 终止脚本执行
?impossible
源码审计
采用了更加符合现实情况的方法较为安全
?php
// 初始化目标URL为空字符串
$target ;
// 检查URL中是否存在redirect参数并且该参数是一个数字。
if (array_key_exists(redirect, $_GET) is_numeric($_GET[redirect])) {// 根据redirect参数的整数值选择不同的重定向目标。switch (intval($_GET[redirect])) {case 1:// 如果参数值为1设置目标为info.php?id1$target info.php?id1;break;case 2:// 如果参数值为2设置目标为info.php?id2$target info.php?id2;break;case 99:// 如果参数值为99设置目标为https://digi.ninja$target https://digi.ninja;break;}// 如果目标URL已被设置执行重定向。if ($target ! ) {header(location: . $target);exit; // 结束脚本执行} else {?Unknown redirect target. !-- 输出未知重定向目标的错误信息 --?phpexit; // 结束脚本执行}
}
?
Missing redirect target. !-- 输出缺少重定向目标的信息 --