代码审计
PHP
前期准备
SQL注入篇
文件操作函数汇总
命令执行篇
XML实体注入篇
前端漏洞篇
反序列化篇
小技巧篇
其它资料
本文档使用 MrDoc 发布
-
+
首页
前端漏洞篇
# 前端漏洞篇 - 前端漏洞一般可以通过一些FUZZ发现,代码审计没必要着重挖掘。 - 白盒审计中我们可能会遇到哪些前端相关漏洞? - 前端漏洞类型 - XSS漏洞 - CSRF漏洞 - Jsonp劫持漏洞(前三个重点关注) - URL跳转漏洞 - 点击劫持漏洞 ## 如何在白盒测试中寻找XSS漏洞 - 自动化FUZZ -> 寻找输出函数(echo、print、printf、var_dump等) - **富文本XSS挖掘** - 富文本XSS - 什么是富文本 - word这一类就属于富文本,可以加图片、超链接;所见即所得。rtf格式是又叫富文本格式或者多文本格式,RTF是Rich Text Format的缩写,意即丰富的文本格式。在rtf文档中可以嵌入图像等文件,RTF是word为了与其他字处理软件兼容而能够保存的文档格式,类似DOC格式(Word文档)的文件,有很好的兼容性。 - 纯文本就像markdown,格式都是用标记符写出来得。 - 常见富文本过滤方法 - 黑名单过滤(不允许svg,iframe,script) - 白名单过滤(只允许strong,p,h1,h2,div,span,img,a) - 找到过滤的方法,然后绕过 - XSS 过滤 ```php <?php $name = $_GET['name']; echo htmlspecialchars($name); // 最常见最有效的方法,将用户输入转义成html实体字符,这时绝对没有XSS。 echo strip_tags($name); // 从字符串中去除HTML和PHP标签。可能会影响业务。 // 富文本过滤,上面两个方法处理用户输入的内容,要么转移掉,要么处理掉,会影响业务。 // 富文本过滤主要作用是将用户输入的恶意标签,或则恶意属性内容去掉。 // 富文本常见标签:strong,p,h1,h2,div,span ?> \<img onerror = "prompt(1)"> 处理后变成 <img> 或 <img onerror=""> \<svd onload="alert(1)"> 处理后变成 xx \<iframe> 这些一般都会去掉,不允许在富文本标签里 ``` ### Roundcude 邮件体 XSS 漏洞 ```php <?php else if ($key == 'style' && ($style = $this->wash_style($value))) { // 判断中间有双引号,如果有外层使用单引号包裹。如果没有则使用单引号包裹。但是这里没有考虑里面有双引号也有单引号的情况。 // 如果双引号存在则会使用单引号包裹。 $quot = strpos($style, '"') !== false ? "'" : '"'; $t .= ' style=' . $quot . $style . $quot; } ``` - 用DOM对换入的HTML做解析,取出所有标签、相应属性的键和值。 - 利用白名单,只保留允许存在的标签和属性。 - 根据保留下来的标签、属性键和值,拼接成过滤后的HTML,输出。 - 实际上,从这个过程就看到了安全隐患。视频教程作者曾经写过一个富文本类,类的前两点过程和这个类相同,但第三点,我是将结果同样保存为DOM对象,再转换成HTML进行输出。 - 二者有什么差别?很大一点不同就是,roundcube对HTML进行拼接,拼接的过程中如果处理不好引号,很容易导致属性“值”越出引号范围,变成一个新的“属性”,比如onerror。 - 错误原因: - 单双引号混用+HTML属性拼接 == 用户输入溢出属性范围 - payload: <img src="data:xxxl" style=aaa:'"/onerror=alert(1)//'> ### 挖掘代码中的富文本XSS漏洞 - 黑名单 OR 白名单? - 黑名单:找到不存在名单中的关键词(标签,属性) - 白名单 - 白名单中是否有已利用的标签,属性? - 代码逻辑是否有问题?(如用户输入的内容溢出属性外成为一个新属性) - 收集、积累前端XSS - 浅析白盒安全审计中的XSS fliter。 - [【附件】浅析白盒审计中的xss fliter.rar](/media/attachment/2024/10/%E6%B5%85%E6%9E%90%E7%99%BD%E7%9B%92%E5%AE%A1%E8%AE%A1%E4%B8%AD%E7%9A%84xss_fliter.rar) ## CSRF漏洞 - 如何在白盒测试中挖掘CSRF漏洞 - 确定目标防御CSRF漏洞的方法 - 检查Referer:来自自己或者可信域名 - 检查Token - 寻找Referer检查缺陷 - URL技巧,见下例 - 检查Token:寻找跨域漏洞 - Flash,见下例 - Jsonp - CORS - Referer检查缺陷举例 ```php <?php $url = $_SERVER['HTTP_REFERER']; $domain = parse_url($url,...); if (preg_match('/discuz\.net/',$domain)); ... ?> // http://discuz.net.evil.com 这种方式可以用URL技巧进行绕过。 // 正则改成discuz\.net$也有问题,我们可以注册一个域名testdiscuz.net进行绕过 ``` - 寻找跨域漏洞举例 ``` // discuz中有一个crossdomain.xml,这个是flash跨域请求网站内容时 // 会先请求网站下有没有这个文件。然后根据XML内容的具体信息来认证用户是否允许发送跨站请求 // discuz中的这个文件没有限制究竟是哪个域名向discuz发送跨站请求。 ``` ## Jsonp劫持漏洞 - Jsonp劫持漏洞介绍 - Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即**跨域读取数据**。 - Jsonp实际上就是一个可以执行的JavaScript,目标网站将用户信息放到这个JavaScript进行传递,恶意网站加载这个jsonp就可以获取到用户的敏感信息。 - 如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B 便存在JSONP 漏洞,网站A 利用JSONP漏洞能够获取用户在网站B上的数据。 - Jsonp劫持漏洞常见位置 - **有些Web框架默认支持ajax+jsonp方式请求,开发者平时没注意到,使用这个方式就能得到结果。** - 程序员主动开发需要支持jsonp的应用 - Jsonp劫持防御绕过 - Referer/Token检查可被绕过,大部分情况下就是Referer。 - SOME攻击 ### 案例 - fanwe O2O用户密码可劫持(通用/开源软件jsonp劫持案例) > https://bugs.leavesongs.com/%E5%89%8D%E7%AB%AF%E5%AE%89%E5%85%A8/fanwe-o2o%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81%E5%8F%AF%E5%8A%AB%E6%8C%81%EF%BC%88%E9%80%9A%E7%94%A8-%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6jsonp%E5%8A%AB%E6%8C%81%E6%A1%88%E4%BE%8B%EF%BC%89/ ```php /** * 输出接口数据 * @param unknown_type $data 返回的接口数据 * @param unknown_type $status 当前状态 0/1 * @param unknown_type $info 当前消息 可选,为空时由客户端取默认提示(默认提示包含成功的默认提示与失败的默认提示) */ // r_type 是用户传入的,传入3就进入的jsonp function output($data,$status=1,$info="") { header("Content-Type:text/html; charset=utf-8"); $r_type = intval($_REQUEST['r_type']);//返回数据格式类型; 0:base64;1;json_encode;2:array 3:jsonp $data[CTL] = MODULE_NAME; $data[ACT] = ACTION_NAME; $data['status'] = $status; $data['info'] = $info; $data['city_name'] = $GLOBALS['city']['name']; $data['return'] = 1; //弃用该返回,统一返回1 $data['sess_id'] = $GLOBALS['sess_id']; if ($r_type == 0) { echo base64_encode(json_encode($data)); } else if ($r_type == 1) { echo(json_encode($data)); } else if ($r_type == 2) { print_r($data); } else if($r_type == 3) { $json = json_encode($data); echo $_GET['callback']."(".$json.")"; } exit; } ```
别卷了
2024年10月10日 14:55
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码