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

最近币圈接连出了两个大漏洞,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型注入判断以及其他位置的注入判断。

查看更多

分享到 评论

qemu、iptables和交叉编译

上周huiming和hyperchem大佬带我搞了一发mips的路由器,遇到了一些坑,在这儿做些记录方便以后查看。

固件解包

用binwalk分离文件然后用对应的文件系统解包工具解开。

osx上可以使用 https://github.com/cinquemb/firmware-mod-kit-osx

查看更多

分享到 评论

我是如何用Hrida自动生成签名的

这应该是最后一次写用frida来hook安卓的东西了 = = 当然,最主要的目的还是为这个小脚本打个广告。

这次的小玩意叫Hrida,思路来自于BridaHrida可以看作是frida的http接口,可以通过http请求获取在frida脚本中导出函数的执行结果。

Hrida的用法见Github页面

查看更多

分享到 评论

jQuery里的html()

在看一个浏览器插件,发现可以在插件内部的页面中插入任意的 html 标签,但是由于 CSP 的限制,只能script-src 'self' 'unsafe-eval'; object-src 'self',并不支持unsafe-inline

出现问题部分的代码为

1
g.html('<iframe src="' + a.url + "?id=" + a.id '" frameborder="0" scrolling="no"></iframe>').show()

其中 a.url 和 a.id 没有过滤可以完全控制。思路很简单,闭合 iframe 标签插入新的标签即可。在测试的时候发现,利用 img 标签的 onerror 事件就会引发 CSP 的报警,而用 script 标签则不会。一脸懵逼。

本地搭建环境,引用最新的 jQuery 库(3.2.1),用同样的方法却发现无论 img 还是 script 标签都会触发 CSP 的报警。两脸懵逼。

问过大佬,大佬说 jQuery 的.html方法调用的是 eval,而 CSP 中允许了 unsafe-eval,所以能执行 JavaScript。三脸懵逼。

查看更多

分享到 评论