品牌网站建设有什么作用,wordpress 定制 价钱,做网站运营需要培训吗,wordpress 仿煎蛋主题目录
第14关 链接注入
1.打开靶场
2.源码分析
3.渗透实战
#xff08;1#xff09;方法1#xff1a;跳转外部网页
#xff08;2#xff09;方法2#xff1a;获取cookie
4.漏洞防御 本文通过《webug靶场第14关 链接注入》来进行渗透实战。
第14关 链接注入
链接注…目录
第14关 链接注入
1.打开靶场
2.源码分析
3.渗透实战
1方法1跳转外部网页
2方法2获取cookie
4.漏洞防御 本文通过《webug靶场第14关 链接注入》来进行渗透实战。
第14关 链接注入
链接注入是修改站点内容的行为其方式为将外部站点的 URL 嵌入其中或将有易受攻击的站点中的脚本 的 URL 嵌入其中。将 URL 嵌入易受攻击的站点中攻击者便能够以它为平台来启动对其他站点的攻击以及攻击这个易受攻击的站点本身。链接注入漏洞常被低估但可能成为攻击链的关键环节。
XSS漏洞与链接注入漏洞的主要区别如下所示。
特性XSS注入漏洞链接注入漏洞本质注入恶意脚本代码注入恶意URL或链接执行方式浏览器直接执行脚本需要用户交互(点击/跳转)攻击目标当前页面/用户会话可能导向外部恶意站点漏洞利用复杂度中高需绕过过滤低至中依赖用户行为
链接注入漏洞的类型与特征如下表所示。
类型描述典型场景反射型链接注入恶意链接通过URL参数临时嵌入页面搜索结果、跳转链接存储型链接注入恶意链接被持久化存储在系统中用户评论、个人资料页DOM型链接注入前端JavaScript动态生成恶意链接SPA应用、AJAX加载内容
1.打开靶场
进入靶场的第14关链接注入关卡网址如下所示。
http://192.168.71.129:8006/control/xss/link_xss.php?id1 2.源码分析
对源代码进行代码审计如下所示。
if (!isset($_SESSION[user])) {header(Location:../login.php);
}
setcookie(flag, , time() - 1);
if (isset($_GET[id])) {if (!empty($_GET[id])) {$id strtolower($_GET[id]);$filter array(on, script);if (strstr($id, $filter)) {header(Content-type:text/html;charsetutf-8);echo scriptalert(请不要包含恶意函数)/script;exit();}}
}
require_once TPMELATE./xss_1.html;对代码进行完整注释如下所示。
// 检查会话中是否存在 user 变量
// 如果不存在说明用户未登录
if (!isset($_SESSION[user])) {// 将用户重定向到登录页面header(Location:../login.php);
}// 删除名为 flag 的 cookie
// 通过将过期时间设置为过去的时间来实现
setcookie(flag, , time() - 1);// 检查是否通过 GET 请求传递了 id 参数
if (isset($_GET[id])) {// 检查 id 参数是否不为空if (!empty($_GET[id])) {// 将 id 参数的值转换为小写$id strtolower($_GET[id]);// 定义一个包含敏感关键词的数组$filter array(on, script);// 检查 id 参数中是否包含敏感关键词if (strstr($id, $filter)) {// 设置响应的内容类型为 HTML字符编码为 UTF-8header(Content-type:text/html;charsetutf-8);// 弹出警告框提示用户不要包含恶意函数echo scriptalert(请不要包含恶意函数)/script;// 终止脚本执行exit();}}
} 这段 PHP 代码主要实现了两个功能。首先它会检查用户是否已登录如果会话中不存在 user 变量就会将用户重定向到登录页面。接着它会删除名为 flag 的 cookie。之后代码会检查是否通过 GET 请求传递了 id 参数如果传递了且不为空会将其转换为小写并检查其中是否包含 on 或 script 这些敏感关键词。若包含则会弹出警告框提示用户不要包含恶意函数并终止脚本执行。 代码存在XSS注入漏洞原因在于其过滤机制不够完善。代码仅简单地检查了 id 参数中是否包含 on 和 script 这两个关键词但攻击者可以采用多种方式绕过这种简单的过滤。例如攻击者可以使用变形的关键词、大小写混合、编码转换等方式或者使用其他未被过滤的恶意关键词和语句来实现注入攻击。此外代码没有对 id 参数进行全面的输入验证和安全处理使得攻击者有机会注入恶意代码。
3.渗透实战
1方法1跳转外部网页
构造注入语句
a hrefhttps://www.baidu.combaidu/a
当传入的链接注入语句 ida hrefhttps://www.baidu.combaidu/a 时该语句中不包含 on 和 script 这两个关键词所以无法被过滤机制拦截。 点击baidu链接如下所示跳转到百度网址渗透成功 当然这里我使用的是百度的链接如果是恶意链接地址会导致更严重的影响。
2方法2获取cookie
注入语句如下所示。
a hrefjavascript:alert(document.cookie)点击领奖/a
点击下图中的“点击领奖”弹出cookie的窗框漏洞渗透成功。 4.漏洞防御
对于链接注入漏洞防御方法如下表所示。
防御层面具体方法简要说明输入验证白名单验证确定合法链接规则仅放行白名单内链接正则表达式验证用正则验证链接格式确保合法输出编码HTML 实体编码输出到 HTML 时对特殊字符编码防解析为恶意代码URL 编码作 URL 参数传递时对链接编码