2018-05-08 07:57:18

一个绕Runtime、ProcessBuilder的linux-cmd.jsp

最近有人问怎么绕过ProcessBuilder的exec方法,所以就写了一个可以绕大部分WAF或者说RASP的jsp。原理很简单:直接反射java.lang.UNIXProcess类。 请求:http://localhost:8080/linux-cmd.jsp?str=ls -la Windows版懒得写,会的朋友自己动手稍微改下就可以了。 下载地址:linux-cmd.jsp.zip 再发一个纯Java反射ProcessBuilder类的cmd.jspx,下载地址:cmd.jspx

2018-04-13 08:09:56

Java SpEL、Ognl、MVEL2表达式Hook项目

最近Spring连续两个命令执行,SpEL表达式在Spring的子项目中大量的使用甚至是滥用让人感觉不到安全。昨天写了一个Hook并记录Java表达式语言的项目,可用于观测命令和执行点调用链信息。适当的改改可以直接用于拦截未知的表达式注入漏洞攻击。 git地址:https://github.com/anbai-inc/javaweb-expression 这是一个专门Hook并记录Java表达式语言执行的Agent小程序。逻辑非常简单,适合初学者使用。所有的实现代码逻辑都在:org.javaweb.expression.Agent.java类里面。导入javaweb-expression并构建expression-agent模块。然后在程序运行之前加入以下jvm参数: -noverify -javaagent:/目标路径/expression-agent.jar -Dfile.encoding=UTF-8 如果是Tomcat需要修改catalina.sh或者catalina.bat文件,添加如下配置参数:JAVA_OPTS="-noverify -javaagent:/目标路径/expression-agent.jar 成功插入后控制台(可以根据具体的情况输出到文件或者数据库)会打印出拦截到的表达式和程序调用链。 如: --------------------------

2018-03-16 09:43:51

2018-01-12 06:26:25

AB在线Markdown编辑器

Git地址:https://github.com/anbai-inc/ab-editor 简介 这是一个简单的Markdown在线编辑器,演示项目环境是一个SpringBoot+JPA的maven项目,clone后请修改数据库密码。项目比较简单,调用请参考示例editor.html。前端代码依赖主要markdown-it.js jquery、codemirror、jquery-file-upload。  支持表情包和文件上传(表情包支持自定义表情分组、图片、描述之类的)。  基本配置 创建编辑器时可以指定表情包、文件上传的API地址: var editor = $('#ab_editor_demo').ABEditor({ "url": "./api/ab-editor/upload_json.php", "emoji_api": "./api/ab-editor/emoji.php", "height": 400 }); 当然也可以通过height和width指定编辑器的宽高。 获取编辑器值方式:editor.getValue() HTML渲染markdown方式: var md = markdownit({ htm

2017-12-11 05:53:54

Elasticsearch The number of object passed must be even but was [1]

新版的elasticsearch 在调用setSource的时候传入json字符串、对象后都会爆:The number of object passed must be even but was [1].其实是新版需要传入Map类型。 使用fastjson转换成Map对象 Map data = JSONObject.parseObject((String) doc.get("json"), Map.class); 使用自带的XContentParser XContentParser parser = XContentFactory.xContent(XContentType.JSON). createParser(NamedXContentRegistry.EMPTY, json); 然后在setSource时转换成Map类型: .setSource(parser.map())

2017-11-06 08:20:13

Proxifier Mac和Windows全局代理

有很多时候我们利用ShadowsocksX或者SSH隧道打开代理后发现Mac和windows都无法全流量代理。Proxifier只需要简单的配置就可以支持全局的流量代理。 首先需要利用SSH隧道或者ShadowsocksX先在本地开发一个Socket代理(监听一个用于本机代理的socket端口)。 Mac版本配置 如果要使用mac下的ssh代理隧道,在控制台执行如下命令:ssh -nNTf -D 1080 root@123.123.123.123 (123.123.123.123是你的远程linux服务器地址)。如果用ShadowsocksX直接配置好ss服务器代理就可以了。 点击Proxies添加一个Socket5代理,如图: 设置代理规则(Applications可以选择你想要代理的应用,默认是任何的mac应用): action选择前面配置好的Socket5代理。 Windows版本 Windows版本配置过于简单,启动好ShadowsocksX或者ssh代理后直接添加代理就可以了。 Mac版:Proxifier+for+Mac+2.15.3.dmg (安装密码www.ifunmac.com) Windows汉化版:HA-Proxifier331-LDR.rar

2017-11-06 06:38:18

gitlab迁移遇到的版本不一致和无法导入问题

Gitlab恢复数据时提示备份版本和当前版本不匹配时无法导入? 这个时候需要卸载掉当前服务器安装的gitlab版本,并下载备份时的gitlab版本并重新安装(清华的tuna项目有所有的gitlab版本备份,下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/) 这里需要根据当前的操作系统类型选择e16或者e17,(centos 64bit是e16,centos7是 e17。如果不清楚具体是什么执行uname -a就知道了)。 下载完对应版本的rpm包后直接安装并再次导入备份文件即可。 "gitlab undefined method `full_path'" 遇到这个问题是因为数据库里有一个未删除的仓库记录而备份文件中并不存在此仓库,这时候直接注释掉:/opt/gitlab/embedded/service/gitlab-rails/lib/backup/repository.rb文件的78行: #project.ensure_storage_path_exists 然后执行: gitlab-ctl reconfigure gitlab-ctl restart gitlab-rake gitlab:backup:restore BACKUP=XXXXXX 等待命令执行完成即可成功恢复数据了

2017-04-08 16:18:15

IDEA 由数据库表生成带注释的java实体类代码

Java生成实体类代码有非常多的方案,而且强大的可以生成整个项目的解决方案,不过这里只是讨论实体类的生成。IDEA提供了类似的实体类生成脚本,用起来比较方便简捷。不过需要用IDEA支持的jvm脚本语言开发(默认示例是Clojure、Groovy)。 但是自带的脚本简单到生成的代码都没法用(有bug),所以花了点时间完善了下脚本实现代码,这里简单介绍下如何使用我们的脚本去生成java实体类代码。 连接数据库: 配置数据库连接信息,如果没有下载过jdbc的jar,这里需要点击download 找到IDEA的脚本扩展目录: 在这个脚本目录下新建Generate Entitys.groovy并复制如下代码 Generate Entitys.groovy: import com.intellij.database.model.DasTable import com.intellij.database.model.ObjectKind import com.intellij.database.util.Case import com.intellij.database.util.DasUtil /* * 默认可用的 context 绑定: * SELECTION Iterable* PROJECT project * FILES fi

2017-03-18 16:40:41

fastjson 远程代码执行漏洞

最近发现fastjson在1.2.24以及之前版本存在远程代码执行高危安全漏洞,为了保证系统安全,请升级到1.2.28/1.2.29或者更新版本。 官方公告:https://github.com/alibaba/fastjson/wiki/security_update_20170315 这个可能存在的远程代码执行漏洞产生的原因是fastjson反序列化json字符串为java对象的时候autoType没有正确的检测处理。 参照:https://github.com/alibaba/fastjson/commit/d52085ef54b32dfd963186e583cbcdfff5d101b5 触发漏洞需要构造一个特殊的json对象,这种应用场景多出现在C/S接口交互。公告中说道:"安全升级包禁用了部分autotype的功能,也就是"@type"这种指定类型的功能会被限制在一定范围内使用。" 当反序列化一个特殊的json字符串为java对象时可以实例化”任意“(有几个类如Thread在黑名单除外)的java对象并调用部分的java方法。 比如序列号如下json字符串(键包含了"@type" JsonTypeInfo类中的注解)时,fastjson会创建一个java对象实例: String json = "{\&q

2017-03-06 12:24:30

Struts2 S2-045 远程OGNL表达式执行漏洞

Struts2在解析请求的时候会主动把MULTIPART请求给解析成参数,这里的MULTIPART请求被解析了两遍。一遍是框架解析的,另一遍是那个自带的插件解析的。两个地方判断是否是文件上传请求的时候的代码不一致,导致了error。 Struts2的验证是否是MULTIPART的方式:  FileUploadBase验证方式: 简单的说就是Struts2的开发者判断是否是MULTIPART方式是如果字符串里面包含了multipart/form-data就认为是,而后面的FileUploadBase判断是字符串里面必须是以multipart/form-data开头的请求才认为是文件上传。如果把FileUploadBase的判断MULTIPART的时候方法换成Dispatcher类的content_type.contains("multipart/form-data")就不会触发这个error了。而这个error中的异常信息最终会被拿去当ognl表达式执行。这种神逻辑其实算起来跟上次的springboot的表达式注入漏洞差不多,因为异常导致的表达式注入。 官方的修复方式代码替换掉了LocalizedTextUtil.findText: