HackMD Stored XSS and HackMD Desktop RCE

It’s time to share a stored XSS case I found in HackMD. I have demonstrated it in my talk at Defcon 27 and here are more details.

The story begains from a XSS in a popular flow chart library called mermaid. We have found three diffrent type of XSS in mermaid, you can see it here.

查看更多

分享到 评论

How I alert(1) in Azure DevOps

Microsoft have launched a new bounty program targeting to the Azure DevOps. A new program is always easier for bug hunting. Let’s go for it!

Our target is https://dev.azure.com , which is a git web server implemented by Microsoft. I found a XSS bug in the markdown editor.

When creating a pull request, people can add some comments using markdown. Some feature is not well escaped by the markdown render, which leads to XSS.

查看更多

分享到 评论

某开发工具沙箱绕过导致RCE

这是一个基于nw.js的开发的工具,有实时预览功能,预览的环境实际上是由预制的一个html渲染出来的,用户写的所有 js 代码也被自动封装成一个 module,通过script标签的方式引入。最终,用户的代码会在一个沙箱环境中被require进来,然后执行。

比如

1
2
3
<script>some code</script>
<script src="your_code_file.js"></script>
<script>require("your_code_file.js")</script>

your_code_file.js 的内容例如

1
2
3
define("your_code_file.js", function(require, module, exports, process){ "use strict";
// your original code
});

其中define语句是工具自动生成的。

工具会在之前的处理逻辑里把global变量以及require函数重写,导致不能直接调用nodejs中原本的require函数。处理后的require函数无法获取到child_process模块。

查看更多

分享到 评论

批量扫描智能合约中的整数溢出问题

最近币圈接连出了两个大漏洞,BEC和SMT这两种智能合约存在整数溢出问题,导致可以凭空造币。目前已经出了几篇分析的文章,我也在这里蹭一波热点,说一些其他的东西。

在说其他的之前,还是先提一遍原理。

根据Solidity 的文档,我们可以看到,在这个语言里的整数分为int(有符号)/uint(无符号)两种。变量步长为8,支持从uint8/int8到uint256/int256。uint和int默认代表uint256和int256。对整数的运算是会有溢出问题的。其他更详细的原理分析可以参考这篇文章

查看更多

分享到 评论

weblogic反序列化漏洞分析与调试

安装 weblogic

官网下载安装

下载地址 http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html ,需要注册账号。

安装完之后会弹出向导配置,在 Mac 上安装报错java.io.IOException: Too many open files,需要执行以下命令。

1
2
sudo sysctl -w kern.maxfiles=20480
sudo sysctl -w kern.maxfilesperproc=18000

查看更多

分享到 评论

业务逻辑中的session问题

在之前的一些安全检测中,经常会遇到一些逻辑漏洞。有些问题可以看到有很多测试是否存在问题的方法,很少有说明漏洞产生的原因。在这儿简单说几个与session有关的问题以及原因。

在WEB中,很重要的一个特征就是每个HTTP请求都是独立的,服务器通过session和数据库记录当前请求的状态。session可以看作数据库的一层缓存,用户是不能直接控制的。有的服务端代码实现上存在一些问题,导致实际运行逻辑和session中的状态不一定匹配,从而产生一些逻辑漏洞。

查看更多

分享到 评论

利用恶意页面攻击本地Xdebug

TL;DR
PHP开发者以及一些安全研究人员经常会在本地搭建一个基于Xdebug的PHP的调试服务,在大部分配置情况下,Xdebug采用HTTP请求头中的X-Forwarded-For字段作为DBGp协议的回连地址。受害者浏览攻击页面一段时间,攻击者可利用DNS Rebind技术向本地服务器发送带有恶意X-Forwarded-For的请求,即有可能在受害者电脑上执行任意代码。

前段时间看到VSCode修复了一个RCE的漏洞,讲的是VSCode在本地开放了一个Nodejs的调试端口,通过DNS Rebind的技术可以获取到调试用的WebSocket接口,即可执行任意代码实现RCE。这让我想起了PHP的调试工具Xdebug。

查看更多

分享到 评论

chrome 浏览器扩展安全

去年8月份的时候fc老板带我搞了一波浏览器扩展的问题,屯了一些思路想批量扫描一下 chrome 扩展商店里的热门扩展,一直拖着没动,今天发现被大佬做了。

浏览器扩展的配置文件为manifest.json,里面规定了扩展的权限和一些其他的属性。其中比较常见且重要的属性有content_security_policy, permissions, content_scriptscontent_security_policy指明了扩展所遵循的CSP规则,permissions代表扩展所拥有的访问权限,content_scripts则是会插入到页面中的脚本。

查看更多

分享到 评论

子域名收集及端口扫描之ZeroScan

为了自动化日常的一些渗透测试任务,做了一个前期信息收集的轮子。ZeroScan 主要分为子域名收集和端口扫描两个部分。这样,只需要输入目标域名,就能输出一个子域名以及对应ip端口扫描的报告。

子域名收集部分主要采用了主动扫描和被动 DNS 数据查询两种方式。被动 DNS 数据查询主要从 virustotal 和 dnsdb 上获取数据。此外还从 DuckDuckSearch、Google透明度报告 以及 crt.sh 上收集子域名的信息。主动扫描采用了 lijiejie 的 subDomainsBrute。对于设置了泛解析的域名会进行一次过滤操作。

查看更多

分享到 评论

MySQL注入检测

SQL 注入主要分两类,一类输入是字符型的,另一类输入是整数型的。在实际情况中,测试的站点可能存在waf,同时为了减少报警,尽量发送少的请求。为了达到这个效果,需要合理的规划发送的请求,而不是把payload一股脑的打出去。

一般来说,目标的输入可能是数字,可能是个字符串。输入是数字的时候对应查询的sql语句也可能以字符串的方式进行查询。

检测注入的流程可以根据测试的结果剪枝。基本流程为先检测报错注入,再测试基于时间的注入。一般来讲,如果有waf的话,基于时间的注入会被拦截。如果没有延时的话,说明要么不在运算语句中,要么被waf拦截了,要么不存在注入。接下来根据请求的stable情况以及原始请求是否为空,进行bool型注入判断以及其他位置的注入判断。

查看更多

分享到 评论