某开源博客系统最新版源码审计

0×00 概述

近期审计一个JAVA开源博客系统mblog2.5最新版,整体系统还是很安全的,漏洞较少,传统的问题像XSS系统使用全局过滤的方式进行实体化处理,上传问题使用白名单校验,越权方面限制的也比较死,本次审计主要在于发现安全问题,具体实现页面没有去搞,感兴趣的可以自己去具体实现。

0×01 审计思路

下载此源码解压之后发现40多M,比较大的一个源码了,如果遇到这样比较大的源码,可以使用一些辅助工具去手工审计比如Notepad++,可以快速定位位置和查询一些关键字去审计,比较快,但是这样去审计可能一些逻辑安全问题发现不了,但是有利就有弊,这只是代码审计常用方法之一了,具体是哪些关键字比如可以查看所有用户输入的地方,会不会结合一些危险函数去执行。比如XSS,可以全局搜索"request."关键字,结果如下:

我们以红框处举例,可以直接双击进入代码位置:

可以看到直接获取content参数做更新文章操作,这里看似有XSS风险,但是还不能确定,可能update的时候已经做了安全处理,这时候可以看此文件有没有import其他,回到顶部:

可以看到引入BaseController,这里可能含有一些全局基础处理相关的操作包括全局安全过滤等操作,跟踪。

可以看到BaseController.java文件含有全局过滤XSS机制,经跟踪发现是实体化操作,这么一来只要是import这个文件的地方基本不存在XSS问题了。

0×02 白盒审计

源码信息:mblog2.5

站点地址: https://gitee.com/szhirong/mblog

不安全的随机数生成(Fortify常扫出):

JAVA语言在生成URL或者一些需要加密密钥等情况下会需要使用随机数,随机数会分为统计学和密码学两种,统计学输出的数据易猜测,所以需要随机数生成的时候建议使用密码学PRNG,可以通过搜索random()函数判断;

代码位置:

\mblog\mblog-base\src\test\java\test\Keygen.java

此处引入 java.util.Random里的random()函数进行随机数生成输出,其结果易猜测,所以需要使用

java.security.SecureRandom提供的SecureRandom()函数代替生成随机数。

SSRF:

ssrf(服务器端请求伪造漏洞)即一般在服务器提供从远程服务器获取内容并返回给用户的时候容易发生,比如下载图片,远程获取图片信息等,审计的时候可以重点关注url请求相关的操作,比如常见的url.openStream(),url.openConnection()等函数。

代码位置:

\mblog\mblog-base\src\main\java\mblog\base\utils\ImageUtils.java    

这里是根据URL远程下载的地方,但是未对传入的URL做任何过滤并且输出到os,所以存在SSRF问题,需要对传入的URL做白名单地址限制和禁止一些除了http,https以外的协议,比如ftp,gopher协议等。

0×03 其他

除了这些问题之外,其他的比如XXE,可以去看哪些解析xml接口,有没有禁止解析外部实体,反序列化漏洞可以重点看readObject()等函数反序列话时候有没有做限制过滤,或者可以直接看那些实现serializable接口的类里有没有重写readObject(),readUnshared()等方法,是否存在逻辑问题,这里审计的时候未发现反序列化相关问题。

0×04 总结

本次审计发现的问题并不多,信息泄露这些就不写了,主要是演示如何快速通过搜索危险函数,关键字等来进行审计的方法吧。

*本文原创作者:davichi8282

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

树莓派交叉编译环境的建立

因为树莓派本身就相当于一台电脑,所以我们可以在树莓派上编译内核或者应用程序,但是树莓派相较于台式机或者笔记本电脑,资源和速度还是有区别的,所以就需要建立交叉编译...

4799
来自专栏FreeBuf

新型PPT钓鱼攻击分析(含gootkit木马详细分析)

1 概述 最近出现了一种新型的PPT钓鱼攻击方式,该种钓鱼攻击方式不需要宏就能实现执行powershell的功能,通过网络下载gootkit木马进行控制。 2 ...

3104
来自专栏北京马哥教育

Linux操作系统基础知识学习

Linux操作系统概述 Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会...

37010
来自专栏移动端周边技术扩展

python pytesseract

1595
来自专栏我和PYTHON有个约会

爬虫正传-江湖路远-0105-谁的刀快谁就有理

在web操作领域,为了减轻响应数据的体积和保证数据完整性的考虑,可以在浏览器允许的情况下,将数据压缩返回,压缩操作方式目前一般支持主流的两重操作方式[Accep...

652
来自专栏大魏分享(微信公众号:david-share)

咦,如何通过容器同时实现:灰度发布+滚动发布?

(1) 蓝绿部署:不停止老版本,额外搞一套新版本,等测试发现新版本OK后,删除老版本。

6734
来自专栏从零学习云计算

kubernetes学习记录(11)——深入学习Service

在之前的周会上汇报Kubernetes学习结果的时候,被问到一个问题:“一个Service能否提供多种服务,能否代理多组Pod副本?”这里来做一定的研究。 Se...

2140
来自专栏cs

计算机网络--子网划分+思科CiscroPacket使用

<h1>1.0概念</h1> <p> <p><b>子网划分</b>是通过借用IP地址的若干位主机位来充当子网地址从而将原网络划分为若干子网而实现的...

4129
来自专栏Java编程技术

Dubbo剖析-线程模型

Dubbo默认的底层网络通讯是使用Netty来做的,在服务提供方NettyServer使用两级线程池,其中EventLoopGroup(boss)主要用来接受客...

1012
来自专栏杨建荣的学习笔记

海量数据迁移之数据抽取流程 (r4笔记第72天)

在之前的一些博文中花了大篇幅介绍了采用外部表抽取的一些细节,可能细节到了,基本原理的内容还希望再补充补充。 采用外部表抽取数据的流程图如下: ? 大体标注...

3474

扫码关注云+社区