Posts List

让你的SQL盲注快起来

本文首发于 Freebuf 平台,https://www.freebuf.com/articles/web/231741.html SQL 注入是当前 web安全中最常见的安全问题之一,其危害性也比较大,众多白帽子在渗透测试过程中往往会首先着重进行 SQL 注入的测试。盲注是 SQL 注入的重要的技术之一,在现实中的 SQL 注入案例中,往往很难将注入的结果直接回显出来。因此,盲注也就成为了 SQL 注入必不可少的手段之一。本文想分享一个如何大大提升盲注效率的技巧。 与或运算 与或运算,操作符分别为 & 以及 |,大多数人应该会在实际开发过程中很少使用到与或运算。如果你之前学过计算机组成原理,里面讲了很多关于补码、反码以及各种运算。当然,我们这里不需要理解那么多知识,这里我们只需要理解与或运算就可以了。 与运算 运算规则: 0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1 即:两位同时为“1”,结果才为“1”,否则为0 或运算 运算规则:0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1 即:参加运算的两个对象只要有一个为1,其值为1 假设参与运算的2个数据,一个数据是1,那么另外一个的值就可以确定了,假设另外一个值为 x: 1 & x = 0, x = 0

PWK 以及 OSCP 最常见的问题

OSCP 最近在安全圈子越来越受到认知,Offsec 最近更新了一篇博文,关于 PWK 以及 OSCP 最常见的问题。本文挑一些重点讲一下: 什么是 PWK 以及 OSCP PWK 是为信息安全专业人员设计的渗透测试培训课程,是 OffSec 的基础课程。考虑参加 PWK的 学生应具有 TCP/IP 网络,Linux 和 Bash 脚本编写的一些经验。具备 Python 或Perl 的基本知识。OSCP 则是 PWK 对应的考试,OffSec 一般都是课程对应考试,比如 AWAE 对应相应的考试 OSWE。 官方还推荐完成 OSCP 后还可以考虑以下课程: CTP 中的渗透测试技术以及漏洞利用开发功能, AWAE 中的 Web 应用程序安全技能 WIFU 中的无线安全技能 如何以及在哪参加 PWK PWK 可以在世界各地参加,只要你能联网。不过中国的网络,你懂得。官方的 PWK 课程仅由 OffSec 提供,所以不要被一些培训机构骗了。 如何注册 PWK 以及 OSCP 考试 一般来说个体只要有护照应该就可以报名了。如果你已经是学生了,你可以在你最开始购买时收到的邮件里面购买其他可能或者更多的 lab 时间。如果要注册 OSCP 考试,可以使用课程报名的欢迎邮件。 前提条件 除了上述建议的先决条件外,我们还要求学生至少 18 岁才能上课,当然也有列外,之前国外好像就有一个16岁的学生通过了考试。对于硬件,我们建议至少安装 4 GB 的 RAM,至少要有一个双核 CPU 和 20GB 的可用硬盘空间。与实验室的连接是通过使用 Kali Linux 的 OpenVPN 完成的,要使用稳定的网络,当然对于中国的学生来说非常难。

GMail XSS 漏洞分析

原文:XSS in GMail’s AMP4Email via DOM Clobbering 译者:neal1991 welcome to star my articles-translator, providing you advanced articles translation. Any suggestion, please issue or contact me LICENSE: MIT 这篇文章是我在2019年8月通过 Google 漏洞奖励计划报告的 AMP4Email 中已经修复的 XSS 的文章。该 XSS 是对著名浏览器问题 DOM Clobbering 的真实利用案例。 什么是 AMP4Email AMP4Email(也称为动态邮件)是 Gmail 的一项新功能,可以让电子邮件包含动态 HTML 内容。尽管撰写包含 HTML 标签的电子邮件已经很多年了,但通常认为 HTML 仅包含静态内容,即某种格式,图像等,没有任何脚本或表单。 AMP4Email 打算更进一步,允许电子邮件中包含动态内容。 在 Google 官方 G Suite 官方博客中的帖子中,对动态邮件的使用案例进行了很好的总结 通过动态邮件,你可以轻松地直接从消息本身直接操作,例如对事件进行快速回复,填写问卷,浏览目录或回复评论。 以在 Google 文档中进行评论为例。现在,你将不再在有人在评论中提及你时接收到单独的电子邮件通知,而是会在 Gmail 中看到最新的主题,你可以在邮件中直接从中轻松回复或解决评论。 该功能引发了一些明显的安全性问题。最重要的一个可能是:跨站点脚本(XSS)?如果我们允许电子邮件中包含动态内容,是否意味着我们可以轻松地注入任意 JavaScript 代码?好吧,答案是否定的;没那么容易。 AMP4Email 具有强验证器,简而言之,它是允许在动态邮件中使用的标签和属性的强大白名单。你可以在 https://amp.gmail.dev/playground/ 上尝试,你还可以给自己发送动态电子邮件来研究工作原理!

Chrome 最新零日漏洞

原文:Chrome 0-day exploit CVE-2019-13720 used in Operation WizardOpium 译者:neal1991 welcome to star my articles-translator, providing you advanced articles translation. Any suggestion, please issue or contact me LICENSE: MIT 摘要 卡巴斯基安全防护是卡巴斯基产品的一部分,过去已成功检测到许多零日攻击。最近,为 Google的 Chrome 浏览器发现了一个未知的新漏洞。我们会立即将此情况报告给 Google Chrome 安全团队。在审核了我们提供的 PoC 之后,Google 确认存在零日漏洞并将其分配为 CVE-2019-13720。 Google 已针对 Windows,Mac 和 Linux 发布了 Chrome 版本78.0.3904.87,我们建议所有 Chrome 用户尽快将其更新为最新版本!你可以点击此处阅读 Google 公告。 卡巴斯基端点产品借助漏洞利用防御组件检测漏洞。该攻击的裁决是 Exploit.Win32.Generic。 我们称这些攻击为 Operation WizardOpium。到目前为止,我们还无法与任何已知的威胁者建立明确的联系。与蓝莲花攻击有某些非常弱的代码相似性,尽管这很可能是 false flag。目标网站的配置与最近部署了类似虚假标记攻击的早期 DarkHotel 攻击更加一致。 卡巴斯基情报报告的客户可以获取有关 CVE-2019-13720 和最近的 DarkHotel 的 false flag 攻击的详细信息。有关更多信息,请联系:intelreports@kaspersky.com。 技术细节 攻击利用朝鲜语新闻门户上的水坑式注入。在主页中插入了恶意的 JavaScript 代码,恶意代码又从远程站点加载了分析脚本。

MyBatis 和 SQL 注入的恩恩怨怨

本文首发于安全客平台 MyBatis 是一种持久层框架,介于 JDBC 和 Hibernate 之间。通过 MyBatis 减少了手写 SQL 语句的痛苦,使用者可以灵活使用 SQL 语句,支持高级映射。但是 MyBatis 的推出不是只是为了安全问题,有很多开发认为使用了 MyBatis 就不会存在 SQL 注入了,真的是这样吗?使用了 MyBatis 就不会有 SQL 注入了吗?答案很明显是 NO。 MyBatis 它只是一种持久层框架,它并不会为你解决安全问题。当然,如果你能够遵循规范,按照框架推荐的方法开发,自然也就避免 SQL 注入问题了。本文就将 MyBatis 和 SQL 注入这些恩恩怨怨掰扯掰扯。(注本文所说的 MyBatis 默认指的是 MyBatis3) 起源 写本文的起源主要是来源于内网发现的一次 SQL 注入。我们发现内网的一个请求的 keyword 参数存在 SQL 注入,简单地介绍一下需求背景。基本上这个接口就是实现多个字段可以实现 keyword 的模糊查询,这应该是一个比较常见的需求。只不过这里存在多个查询条件。经过一番搜索,我们发现问题的核心处于以下代码: public Criteria addKeywordTo(String keyword) { StringBuilder sb = new StringBuilder(); sb.append("(display_name like '%" + keyword + "%' or "); sb.append("org like '" + keyword + "%' or "); sb.append("status like '%" + keyword + "%' or "); sb.append("id like '" + keyword + "%') "); addCriterion(sb.toString()); return (Criteria) this; } 很明显,需求是希望实现 diaplay_name, org, status 以及 id 的模糊查询,但开发在这里自己创建了一个 addKeywordTo 方法,通过这个方法创建了一个涉及多个字段的模糊查询条件。有一个有趣的现象,在内网发现的绝大多数 SQL 注入的注入点基本都是模糊查询的地方。可能很多开发往往觉得模糊查询是不是就不会存在 SQL 注入的问题。分析一下这个开发为什么会这么写,在他没有意识到这样的写法存在 SQL 注入问题的时候,这样的写法他可能认为是最省事的,到时直接把查询条件拼进去就可以了。以上代码是问题的核心,我们再看一下对应的 xml 文件:

Kibana 任意代码执行漏洞

今日,有人公开了 Kibana 任意代码执行漏洞(CVE-2019-7609)的 POC。这个漏洞的主要原理是因为 Kibana 中的 Timelion 中具有原形链污染漏洞,因此可以导致指定变量的原型链污染,通过传递 NODE 环境变量参数,利用 Kibana 的 Canvas 会创建新进程的特性可以达到远程执行命令的效果。 在本地尝试搭建环境复现,忙活了半天,一开始尝试的是 6.4.2 版本的 Kibana。尝试执行命令的时候,发现一直没有效果,才发现这个漏洞的利用还有一个重要的环节。在导致原型链污染之后,还需要点击 Canvas 菜单,因为点击 Canvas 菜单,Kibana 会尝试创建一个新的进程,从而可以达到远程命令执行的效果。不过在 Kibana 6.5 版本之前,Canvas 不是默认安装在 Kibana 中的。可以通过 kibana-plugin 去安装 Canvas 插件,不过我后来还是选择使用 6.5.4 版本,同时注意相应 elasticsearch 也需要升级到 6.5.4 版本。最后在使用反弹命令的时候,遇到了一点问题,可能与机器系统版本相关,可以多尝试几种命令。 漏洞的利用过程其实不是特别复杂,注意几点即可: 漏洞的影响的版本是 5.6.15 版本以及 6.6.1 版本以前。 Kibana 需要安装了 Canvas 插件。 目前公开的 POC 因为使用了 linux 特有的环境变量,所以目前这个 POC 只能作用于 linux 机器。 原型链攻击 如果熟悉 JavaScript 的同学,对于原型链应该会比较熟悉。传统的 JavaScript 对象的集成就是基于原型链实现的。如果可以利用程序漏洞可以去修改 Object.protootype 就会导致所有的 JavaScript 的变量收到影响。针对本次漏洞,修复方式就是通过 hasOwnProperty 方法可以确保直接通过 proto 属性直接去修改 prototype。

被动扫描器之插件篇

本文首发于 freebuf, https://www.freebuf.com/articles/web/219818.html 最近被动扫描器的话题如火如荼,好多公司都在做自己的被动扫描器。而获取质量高的流量是被动扫描器起作用的关键。笔者主要开发了两个被动扫描器的插件,r-forwarder 以及 r-forwarder-burp,两个插件的代码都在 Github 上开源。两个插件分别为 Chrom 插件以及 Burp 插件,本文也从笔者开发这两个插件的经验来聊一聊被动扫描器中插件的开发。 Chrome 插件 Chrome 插件是向 Chrome 浏览器添加或修改功能的浏览器拓展程序。一般通过 JavaScript, HTML 以及 CSS 就可以编写 Chrome 插件了。市面上有很多非常优秀的 Chrome 插件拥有非常多的用户。Chrome 插件的编写也比较简单,基本上你熟悉一点前端知识,然后熟悉一下 Chrome 插件的 API,你就可以编写 Chrome 插件。Chrome 插件的安装,如果你没有发布在 Chrome 商店的话(因为网络原因,可能没办法直接从商店下载),可以通过开发者模式安装 Chrome 插件。或者你也可以注册 Chrome 插件的开发者账号(只需要 5 美元,就可以发布 20 个插件)。 简单地介绍了一下 Chrome 插件的开发,咱们主要还是聊一下关于 Chrome 插件关于被动扫描器的方面的内容。对于 Chrome 插件,主要是通过插件的能力去获取经过浏览器的流量,并将流量转发给后端来进行处理。Chrome 插件关于网络流量的处理地 API 主要有两个:chrome.devtools.network 以及 chrome.webRequest。但是前者使用的时候需要打开 Chrome 开发者工具,这个有一点不太方面,所以选择了后者,这也是对于被动流量获取一种常见的方式。 Chrome 插件中的 webrequest API 是以相应的事件驱动的,其中请求的生命周期图如下,主要有7个事件。只需要监听关键事件进行处理就可以满足被动扫描器获取流量的需求了。 其实这些事件不难理解,基本通过事件的名称就可以知道事件的含义了,主要就是请求发送前,发送请求头之前,发送请求头等等事件。对于不同的事件,可以获取的流量数据也是不尽相同的。首先,考虑一下,对于被动扫描器来说,哪些流量数据是比较关心的。被动扫描器主要是通过收集业务的正常流量来进行测试,提高测试的效率,并能取得比主动扫描器更好的效果。那么一般来说,被动扫描器最关心的就是请求的 URL 以及请求头了,如果是 POST 请求,还需要请求体。对于扫描器来说,响应头和响应体则没那么重要,其实可以通过响应状态过滤一下,一般只需要能够正常响应的请求头以及请求体即可。 对于被动扫描器上述的需求,chrome.webrequest 中的 onBeforeRequest 以及 onSendHeaders 这两个事件可以满足需求。通过前者,可以获取请求体。通过后者则可以获取请求头。不过在使用 onSendHeaders 的时候,有好几点需要注意:

Bastion -- Hack the box

介绍 目标: 10.10.10.134 (Windows) Kali:10.10.16.65 In conclusion, Bastion is not a medium box. But it would be easier to solve this box with windows VM. Command VM may be a good choice. But it can be finished by kali. 总的来说,Bastion 其实并不是一个特别简单的机器。如果使用 windows 可以更方便地解决这台靶机。Command VM 对于这台靶机其实挺不错的,不过我们也可以使用 kali 来完成这个靶机。 信息枚举 Firstly, detect the open ports: 首先,探测开放端口 # Nmap 7.70 scan initiated Sun May 5 12:33:32 2019 as: nmap -sT -p- --min-rate 10000 -oN ports 10.10.10.134 Warning: 10.10.10.134 giving up on port because retransmission cap hit (10). Nmap scan report for 10.10.10.134 Host is up (0.33s latency). Not shown: 60653 closed ports, 4873 filtered ports PORT STATE SERVICE 22/tcp open ssh 135/tcp open msrpc 139/tcp open netbios-ssn 445/tcp open microsoft-ds 49664/tcp open unknown 49665/tcp open unknown 49667/tcp open unknown 49668/tcp open unknown 49670/tcp open unknown From the open ports, it can be induced that the box may be a windows machine that opens ssh service. Then try to obtain the detailed services of these open ports:

偶遇 XSS 漏洞

最近在公司内网发现了好几个 XSS 漏洞,后来看了一下系统,都是使用的开源项目。后来发现是开源项目自身的漏洞。后面我就去看了一下源代码,下面我们就聊一下这些 XSS 漏洞。 最近公司的被动扫描器发现了一个 XSS 漏洞,后来发现是登录的时候发现是登录请求传入的 ReturnURL 参数导致的 DOM 型 XSS 漏洞。后来,又看了一下系统,发现这是一个开源的系统,RAP。 RAP 是一个开源的 Web 接口管理工具,由阿里妈妈前端团队开发,不过目前这个代码仓库已经不维护了,已经迁移到了 rap2-delos。但是 RAP 的 star 数更多,高达 10000+。可以得知,该项目目前应该还有不少人在使用。 其实这个漏洞的原理非常简单。其实就是 doLogin 请求会传入一个 ReturnURL,而重定向的页面会直接使用 window.location.href 来直接重定向 URL。使用 window.location.href 其实本来就是一种比较危险的行为,尤其是链接的参数取决于外部输入,更有可能导致 dom 型的 XSS 漏洞。同时,这个漏洞也是一个开放重定向漏洞。不过本文就稍微聊一下这个 XSS 漏洞。开源仓库就是有一个好处,可以直接看代码。下面我们就通过代码来简单解释一下原理。 简单粗暴地在代码仓库中搜索了一下 window.location.href,发现代码仓库中有多处使用了 window.location.href。不过我们很快就发现了一个有趣的代码,正是重定向页面的代码。 关键代码就是:window.location.href = decodeURIComponent("$returnUrl");。这段代码没有对 returnUrl 做任何的处理,而且这段代码就是直接放在 script 标签中。毫无疑问,这种一定会导致 XSS 漏洞,可以通过构造 returnUrl 来闭合双引号从而导致 XSS 漏洞。比如,"alert(/xss/);//,这段代码就可以导致 XSS 漏洞。 再看看调用这个页面的地方: public String doLogin() { // 增加验证码 Map<String,Object> session = ContextManager.currentSession(); String kaptchaExpected = (String)session.get(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); if(getKaptcha() == null || !getKaptcha().equals(kaptchaExpected)) { setErrMsg("验证码错误"); return ERROR; } if (super.getAccountMgr().validate(getAccount(), getPassword())) { User user = getAccountMgr().getUser(getAccount()); if (user != null && user.getId() > 0) { session.put(ContextManager.KEY_ACCOUNT, user.getAccount()); session.put(ContextManager.KEY_USER_ID, user.getId()); session.put(ContextManager.KEY_NAME, user.getName()); Set<Role> roleList = new HashSet<Role>(); for (Role role : user.getRoleList()) { Role copied = new Role(); copied.setId(role.getId()); copied.setName(role.getName()); roleList.add(copied); } session.put(ContextManager.KEY_ROLE_LIST, roleList); } else { setErrMsg("用户不存在或密码错误"); return ERROR; } if (getReturnUrl() != null && !getReturnUrl().trim().equals("")) { return "redirect"; } return SUCCESS; } else { setErrMsg("用户不存在或密码错误"); return ERROR; } } 里面的关键代码就是:

后渗透的文件传输

在后渗透环节中,文件传输往往是必不可少的一个环节,比如下载 payload 或者其它特定的工具。所以掌握一些后渗透的文件传输的技巧也是非常有用的。对于后渗透的文件传输,结合我这些天自己玩靶机的过程以及一些大佬的文章,我有以下一些体验: 工具越简单越好,要求就是方便易用 最好不要安装额外工具,使用原生的工具即可,或者是最常用的环境 稳定,这点也很重要 针对以下几点,总结以下一些经验,不同的操作系统有一些细节可能不太相同,但是大致的思路是差不多的。其实对于某一种方法,或许可以使用很多的工具,本文主要挑一些最常用的工具来讲一讲。 web 服务器 通过 web 服务器来搭建文件服务器,然后再下载文件这是一种常用的思路,这种方法简单易用,适用于各种平台,可以使用的工具也非常多。本文的攻击机器默认为 Kali,受害机器可能为 Windows 或者 Linux 机器。其实有很多工具可以搭建 web 服务器,比如 python、php、ruby等等。其实任何语言几乎都可以作为搭建文件服务器的工具,这里我们主要以 python 以及 php 为例,因为两种在我们的渗透过程中比较常见。我一般都选择把文件服务器的端口放在 80,因为这是 HTTP 的默认端口,这样下载文件的时候就可以不用指定端口号了。 python2 python -m SimpleHTTPServer 90 python3 python3 -m http.server 80 php