自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

若有战,召必回

如有侵权,请联系删除。

  • 博客(127)
  • 收藏
  • 关注

原创 SQL注入到RCE漏洞

同样通过上述堆叠注入注入zt_queue执行whoami的payload的sql注入:INSERT+INTO+zt_queue(type,command,cron,createdDate,execId)+value(‘system’,‘whoami’,30,CURRENT_TIME(),123);没有对$_POST过滤,循环遍历获取参数和参数值,其中参数当作key,参数值当作value,分别传入setting模块model.php(settingModel类)的setItem方法。

2025-02-12 03:45:00 860

原创 Pipe管道

Pipe管道利用在 Windows 操作系统中,管道(Pipe) 是一种进程间通信(IPC)的机制,允许数据在两个进程之间传输。管道有两种主要类型:匿名管道和命名管道。// 使用管道进行数据通信2. 命名管道(Named Pipe)特点:双向通信:支持双向或单向通信。进程关系:可以在不同的进程间通信,甚至可以跨网络通信(同一网络中的不同主机)。命名机制:每个命名管道都有一个唯一的名称,客户端可以通过名称访问它。并发支持:同一个管道可以同时被多个客户端连接。

2025-02-11 04:30:00 1011

原创 木马反制技巧

RegGetValueA 被调用以从注册表路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE 中检索 HardwareID 的值, 如果调用成功(返回 ERROR_SUCCESS),则检查检索到的字符串(szHardware)是否包含子字符串 “VMware” 或 “Virtual” , 如果找到任一子字符串,则将 isVM 设置为 1 ,第二个if判断同理。如果白名单中的程序没有一个在运行,则可以判定当前环境可能为沙箱,从而触发木马程序退出。

2025-02-10 03:30:00 686

原创 实战微信小程序

这里给师傅们总结下我们在进行漏洞挖掘过程中需要注意的细节,比如我们在看到一个功能点多个数据包的时候,我们需要去挨个分析里面的数据包构造,进而分析数据包的走向,去了解数据包的一个业务逻辑,特别是微信小程序0x2 渗透测试一、浅谈这个EDU的小程序可以直接使用微信一键登录,像我们平常在挖掘微信小程序的时候,经常碰到这样的微信一键登录的功能点,像这样的初衷就是为了方便我们使用,但是越是方便其实对于安全来讲越是不安全的一个过程。

2025-02-09 03:45:00 1151

原创 路由器漏洞复现详细分析

然而,这两个元素存在命令注入漏洞,导致安全风险。这算是笔者第一次复现华为路由器的漏洞,网上的复现文章很多,但讲的不是很详细,可能是觉得太简单没必要讲吧,但对于像我这种新手小白来说,像无法交叉引用的情况找漏洞位置和虚表,还有就是遇到无法反编译的情况用ghidra或者ida修复等过程 都是我需要学习的,因此我写下这篇文章帮助刚入iot的师傅更好的理解。发现这个函数对ATP_UPnP_RegDevice函数和ATP_UPnP_RegService函数有大量的调用,猜测这个函数可能主要用于开启一些交互服务。

2025-02-08 03:00:00 972

原创 反沙箱分析

这个时候我的打开进程一般是IDA,或者是其他的程序,而在实战环境下来说,一般是使用GUI的explorer打开所有可以通过检测自己的进程是否是处于被研究的环境下。得看看有无其他的办法?反沙箱的前提是被用作动态分析,如果你的恶意软件直接在静态分析那里就被查杀了,那反沙箱措施就没有作用了,所以一定要该混淆的混淆,该加壳的加壳,再去考虑什么反沙箱就是了。例如在虚拟机器中会有些用于管理的进程例如vmtools.exe这类,可以被标记为黑名单,还有就是普通的办公软件,例如微信,飞书这一类的,可以视为白名单。

2025-02-07 05:30:00 891

原创 前端断点调试到管理员登陆

发现前端漏洞Thisisa靶标,出于保密原因我就不上图了,长得非常泛微。一般看到这种一眼通用的系统我都会直接跑路,但是一开始说了,thisisa靶标,所以还得先看一看。由于前端一眼打包器,跑一跑URL。一轮下来也是一堆堆401,但有两个带sql的路径居然是200:这倒是有意思,直接发到重发器看看返回。由于不知道参数,直接返回脚本为空。但看返回的意思是可以直接执行sql语句?于是折回前端看看js,看是否能找到参数。一番查找,很幸运的是路由跟参数表放在一起:sqlpart不出意外就是语句,a

2025-02-06 05:45:00 622

原创 依赖绕过沙箱

整理了有效载荷,我以这两个有效载荷结束。实例化对象的过程不说了,主要是 `bean.setBean( #stack ))后我们就可以通过ValueStack获取content,然后进一步从其中获取memberAccess对象,然后为了调用setter方法修改我们的黑名单,这里采用的是直接定义一个set,其中放置我们的setter方法,然后指定调用,置空了黑名单后,我们就可以调用危险的方法了,比如freemarker.template.utility.Execute的exec方法去执行命令。

2025-02-05 04:45:00 547

原创 寻找sql注入漏洞

对某开源cms进行代码审计 ,发现虽然该cms虽然对参数参数进行了过滤,但是过滤有限,依然可以通过其他方法绕过进行sql注入,本文将将通过正则匹配的方式,并通过自动化查找工具,寻找某cms中存在的sql注入漏洞。

2025-02-04 03:00:00 922

原创 渗透测试过程中碰到的Symfony框架

当时就以为key被修改了,然后去看了看Symfony 对应版本的代码,发现还存在一个 /_configurator 接口可以利用,我们直接访问/_configurator/final 就可以直接看到配置文件的内容。在__destruct 中执行了该类的close方法,但是在该类中的close为空,那么去找它的子类,然后发现了BufferHandler类。发现在23行,会获取到我们传入的system字符串,然后list了一下,再去获取controller,也就是在这里list后。

2025-02-02 04:30:00 604

原创 一个缓冲区重叠漏洞分析与利用

pg_off 在 bpf_ringbuf_hdr 中是环形缓冲区块的页面偏移量,因此,bpf_ringbuf_restore_from_rec 会通过减去 pg_off 来从环形缓冲区块地址定位到 bpf_ringbuf 对象。通过构造 bpf_ringbuf 中的 work 字段,并在调用 bpf_ringbuf_commit 时传入 BPF_RB_FORCE_WAKEUP,会触发调用我们构造的 irq_work 对象,并将其排入 irq_work_queue。通过触发崩溃,它将以高权限执行我们的攻击。

2025-02-01 02:45:00 686

原创 Bottle框架内存马

这个其实我们也很好理解就是他会进行动态判断传入参数的类型 进行赋值,当你看到callback的时候 其实就会想到如果我们可以自定义一个函数 传进去 就能进行一个绑定的结果 但我们先别急 继续看完代码。这个很好理解 本身我们的路由就是和回调函数绑定的 所以执行的命令 也会直接回显在路由上 这个思路我们不需要找其他回显之类的就可以进行命令执行。阅读代码发现如果你直接调用error方法 他其实是会返回一个wrapper函数的 而wrapper函数的参数就是我们自定义的函数。

2025-01-31 03:30:00 713

原创 深入研究异常处理机制

一、原理探究C++异常处理本节内容针对 Linux 下的 C++ 异常处理机制,重点在于研究如何在异常处理流程中利用溢出漏洞,所以不对异常处理及 unwind 的过程做详细分析,只做简单介绍异常机制中主要的三个关键字:throw 抛出异常,try 包含异常模块, catch 捕捉抛出的异常,它们一起构成了由 “抛出->捕捉->回退” 等步骤组成的整套异常处理机制当一个异常被抛出时,就会立即引发 C++ 的异常捕获机制。

2025-01-30 04:45:00 1095

原创 免杀国内主流杀软的恶意样本分析

现在知道了程序的执行流,恶意程序设置了一个存在栈溢出的函数,然后用strcpy函数触发栈溢出攻击,将jmp esp指令放到dll库里是为了固定指令地址,在不同环境上稳定运行,这里放上一个程序执行流程图。导入了四个dll库,其中ADVAPI32.DLL,KENNEL32.DLL,msvcrt.dll都是程序编译时,系统自动绑定的dll,只有fun.dll是第三方dll,用ida分析fun.dll。调用了__i3b_D2函数,将密钥和payload都导入了其中,是解密payload的函数。

2025-01-29 03:30:00 513

原创 ELF动态信息

ELF 文件可以包含 GNU_HASH 表,用于优化符号查找,与传统的 .hash 表相比,GNU_HASH 表提供了更高效的符号查找算法。每个条目代表一个动态链接表项,由Elf64_Dyn结构表示,它包含两个字段:一个是类型(d_tag),另一个是值(d_un)。GOT 是动态链接中的一个关键表,用于存储每个动态库函数的实际地址,供程序直接调用,以避免多次动态解析。通过 GNU_HASH Table 的信息,可以找到符号在 Symbol Table 中的索引。

2025-01-28 03:00:00 508

原创 Night Sky为例

又因为vmp壳的代码节在.text的下方,所以相对跳转的值应该取负值,这样就可以从.2fU1节向上跳转到.text节中。因为当勒索软件涉及到对文件操作时证明被vmp保护的代码段已经被解密加载到.txt节中,此时是比较好的解密点。同理,我们搜索__scrt_common_main_seh函数的特征,由于该函数没有常量,我们只能取函数部分字节码做特征搜索。在VS编译器中会生成一段安全cookie的hash,该hash值不变可以作为特征串查找OEP附近的代码。在重命名完成后,需要我们手动修改入口点的OEP。

2025-01-27 05:30:00 318

原创 高版本jdk下jndi攻击案例

在/API/Monitor/Detect接口提交数据,也就是监控项里的JVM虚拟机,填入service:jmx:rmi:///jndi/rmi://ip:port/object,http返回包会读取文件内容。在/API/Monitor/Detect接口提交数据,也就是监控项里的JVM虚拟机,填写service:jmx:rmi:///jndi/rmi://ip:port/object,他们形成的文件路径是/usr/apache-tomcat-8.5.73/http:127.0.0.1:8888/…

2025-01-26 04:00:00 1005

原创 程序原理与逆向

然后等待各个UI程序的每个窗口线程,从这个大消息队列中取出自己窗口可以处理的消息后拿到自己的窗口回调消息队列里处理。这种InitInstance函数就是我们可控的窗口初始化代码,固定在CWinApp:Run上方,恶意软件可以藏在该窗口绑定逻辑类的初始化函数中。由此构建消息映射,可以看到该窗口是系统的help窗口,resourcehacker没有显示出该窗口的ID值。该ID可能是系统分配窗口。也就是主窗口类的虚表。点击任意一个向上滑动可以看到窗口类的虚表函数,因为MFC的消息映射绑定默认是跟在虚表后的。

2025-01-25 03:45:00 937

原创 新手小白快速代码审计的最佳实践

在环境搭建好之后就可以开始准备代码审计了,正常来说代码审计的第一步应该是熟悉框架、通读代码,具体的方式与个人代码能力和编程语言的熟悉程度有关系,有时,为了快速审计,就会采用上述几个工具进行打点和标注,由于工具内置的正则不同,所以结果也会略有差异,如果想尽可能的找到所有漏洞点的话,应该以上述工具的结果之和为参考。看完了几个高危,我们再来看看比较常见的SQL注入漏洞,这个项目的后台因为本身就可以实现对数据库的管理,所以后台已授权的SQL注入反而显得毫无价值了,我们仅以此为例,来看看通义灵码全面的辅助审计能力。

2025-01-24 05:00:00 759

原创 任意文件下载到getshell

从这些命令记录我们可以得到非常多有用的信息,比如web应用的启动路径,比如一些日志路径情况,但是这里我们只能够明确的知道lib.zip中是应用的依赖,以及web应用配置的目录情况看大概率可能是一个jar包,那么就有一个新的问题,这个jar叫什么名字,因为大多数启动的jar应用一般不会跟依赖放在一起,依赖中可能存在很多分开开发的业务代码,虽然也能看到一些信息,但是核心jar的缺失会让审计的工作不好进行。这里回到之前的actuator,这里的接口可能是转发了ngnix,和之前的疑似权限绕过是不同的。

2025-01-23 07:30:00 652

原创 关于Windows的进程

来请求内核模式执行实际的文件操作。主令牌: 这个其实在令牌窃取那一章节讲过,每一个进程在被创建的时候都会有一块默认令牌,也就是主令牌,这个令牌保存了进程相关的安全信息,比如用户的身份,权限以及安全组相关的信息,这些信息被用来控制进程和线程对系统资源的访问权限。一个或多个线程: 每一个进程在创建的时候默认有一个主线程,如果一个进程在创建后没有线程,这个进程是无法运行的,因为没有任何线程去执行代码,这个主线程会去执行经典的main/WinMain函数,没有任何线程的进程是没有用的,并且正常情况下会被内核销毁。

2025-01-22 03:45:00 877

原创 edusrc挖掘的骚技巧

文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!3、接下来就是比如你可以去找该系统或者该学校的手册,然后去里面找找有没有系统的默认弱口令,因为很多学校系统都不该密码,运维人员也少,所以维护也没,这就可以去找下系统的默认弱口令了,然后再进去打一套别的漏洞,提高危害rank。其中也可以使用Google浏览器进行信息收集,也是会发现一些不一样的收获的,我们可以看到下面的检索内容,就可以很明显的看到这几个学校使用的系统就是我们的目标开发商的系统。

2025-01-21 04:15:00 772

原创 窃取程序的恶意样本分析

调用 utils 模块的 desktopScreenshot() 函数截取受害者的桌面截图,最后将所有窃取的数据压缩为 ZIP 文件,通过 Telegram Bot API 上传到攻击者的 Telegram 账户。窃取被害者主机上的Exodus 钱包数据,复制数据并压缩为 ZIP 文件,通过 Telegram API 发送到攻击者的服务器。窃取被害者主机上的telegram数据,复制数据并压缩为 ZIP 文件,通过 Telegram API 发送到攻击者的服务器。程序为32位程序,并且是一个.net文件。

2025-01-20 05:30:00 243

原创 如何利用 WAF 缺陷进行绕过

tomcat的特性也可以构造出许多绕过的方式,可以参考https://y4tacker.github.io/2022/06/19/year/2022/6/%E6%8E%A2%E5%AF%BBTomcat%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%B5%81%E9%87%8F%E5%B1%82%E9%9D%A2%E7%BB%95waf%E6%96%B0%E5%A7%BF%E5%8A%BF/这篇文章。可以采取高并发的攻击手段,waf同样出于性能考虑可能会直接放行部分数据包。

2025-01-19 04:15:00 832

原创 src挖掘

当我们对某一个登录框站点没有思路时,可以尝试找找是否存在一些说明手册,因为功能点繁多,面向大量的不同单位人群,可能会存在qq群等,好对一些用户问题进行处理,那么就可以通过谷歌语法,对网站名 + 群等关键字搜索,也可以直接在qq群搜索网站名称,或开发商名称进行查找,当你进入他们内部的群时,就可以获取很多敏感信息了,甚至可以直接向运维人员申请修改密码等操作。经过尝试发现可以对登录用户进行爆破,密码加密了,看着像base64但发现并不是,只能通过爆破发现的用户名手动的测试几个密码了。突然发现存在操作手册!

2025-01-18 03:15:00 1187

原创 认证绕过及远程命令执行漏洞分析与复现

然而,近期奇安信CERT监测到了一个严重的安全漏洞,该漏洞允许未授权的攻击者通过/dns/getresetstatus 和 /ftp/getresetstatus接口执行任意命令,从而获取服务器权限。如果shell参数为空或者为True的话,那么将使用subprocess的popen方法执行command命令,并且Popen的shell属性为True。endpoint = “/ftp/getresetstatus” #此处也可以填写/dns/getresetstatus。该脚本传递的payload值为。

2025-01-17 04:30:00 509

原创 formbook 恶意软件浅析

它会加载所有字符串哈希值,并将运行中的进程与每个哈希值进行比较,如果发现任何此类进程,就会在 conf obj 上的反虚拟机标志上添加所需的值。恶意软件的启动非常简单,它会先加载一些必要的库,然后再进入恶意代码。ParsingState 方法从动态加载的程序集里提取第 21 个类型,并定位该类型的第 30 个方法,然后直接调用它,这可能用于执行隐藏的恶意功能。我编写了一个小脚本,可以接受提供的哈希值,并在常用字符串、API 名称、路径等列表中逐一计算其哈希值,与提供的目标哈希值进行比较,确认是否匹配。

2025-01-16 05:00:00 792

原创 RAT样本分析

通过在运行时组合这些值,恶意软件能够伪装其恶意文件和进程,使其看起来像 Windows 的本机二进制文件,从而降低被发现的风险。查看进程列表,可以知道,第一阶段的恶意程序在资源中提取了三个文件,分别是 cmdkuqqy, cckgcf.exe 和 ka9zcqw3l6l48a1uuba,然后执行第二阶段的恶意样本cckgcf.exe,将提取的另外俩个文件作为参数传递。该第二阶段恶意程序在注册表下创建了一个值为ratotpvvsmo.exe的值,在run位置创建的注册表项值可以实现恶意程序的持久化。

2025-01-15 04:30:00 535

原创 0day挖掘

其中的 org.apache.catalina.users.MemoryUserDatabaseFactory 会根据 pathname 去发起本地或者远程文件访问,并使用 commons-digester 解析返回的 XML 内容,所以这里可以 XXE。上传的 Post 请求,其中 url 解码完是 {filePathFormat:'/{.}./{.}./{.}.//conf/Catalina/localhost/8'}在 MCMS 的历史漏洞中,有一个前台文件上传。启动 rmi 服务,运行绑定对象。

2025-01-14 03:45:00 884

原创 Windows内核

这就是PNP_INITIALIZE_BAD_CRITICAL_DRIVERS和PNP_INITIALIZE_BAD_DRIVERS策略之间的主要区别:后者允许加载所有驱动程序,包括已知为恶意的非关键驱动程序。因此,在这个阶段对驱动程序的保护不是很有效。在 Windows 内核加载阶段,控制权会移交给Windows加载器Winload.exe,它会加载必要的内核文件如Ntoskrnl.exe,在此时会加载注册表中配置为 引导启动类型(Boot Start Type)的驱动程序,包括ELAM模块。

2025-01-13 03:30:00 580

原创 插件未授权sql注入漏洞分析

这里主函数定义了tc_csca_get_states、tc_csca_get_cities函数,任选一个tc_csca_get_cities函数进行分析。下面跟进看下这里的逻辑。通过调用wp_create_nonce函数生成nonce值,首先根据传入的$action判断action是否有效,下来根据当前用户登录状态返回uid,如果是登录状态则传回登录uid,如果没有登陆uid赋值为0通过’nonce_user_logged_out’ 过滤器来修改uid,再使用wp_hash() 函数生成nonce值。

2025-01-12 04:00:00 2126

原创 反序列化链分析

this->getRelationWith()中,在Validate类的__call魔术方法中,使用到了call_user_func_array(),通过call_user_func_array()可以构造命令执行,所以我们的反序列链需要调用到Validate#__call()this->option=[“var”=>[“1”=>new Conversion()]],那么当执行到字符串拼接部分的代码时,就会调用到Conversion类的__toString方法。

2025-01-11 05:00:00 927

原创 RAM运行的轻量级远程访问木马分析

检查沙箱的进程名称:“sbiectrl”、“snxhk”、“nspectr”、“wsb”、“capesandbox”、“joeboxcontrol”、“analyze”、“procexp”、“zenbox”检查的虚拟机 MAC 地址:“00:05:69”、“00:0C:29”、“00:50:56”、“00:1C:14”、“08:00:27”、“00:15:5D”、“00:03”、“00:0F:4B”在分析代码结构时,确定该恶意软件在内存中执行基于字符串的代码,并将必要的 DLL 加载到内存中。

2025-01-10 05:00:00 1173

原创 CyberVolk勒索软件浅析

相反,在从 dec_key.dat 文件中获取密钥后,它使用 WriteFile API 创建一个空文件,文件名为 .CyberVolk 扩展文件的实际名称。然后,使用 NtWriteFile API,它处理解密密钥,并将加密文件的解密内容写入 file.txt。但如果提供的密钥是正确的,由于生成的数据不会损坏,它会正确地写入解密的文件内容。首先,它创建一个带有.CyberVolk 扩展名的文件,然后通过读取文件的内容对其进行加密,然后将加密的数据写入带有.CyberVolk 扩展名的文件中。

2025-01-09 04:00:00 1606

原创 加强防范钓鱼邮件的通知

综上,该样本“关于加强防范钓鱼邮件的通知.exe”主要功能为收集系统信息和进程信息,并释放一个名为 chrome_pwa_launcher.exe 的恶意文件。我们不想让它退出,所以找到它,将它修改一下即可,这里细看,有个字符串dictator-lusty-fanlight-earphone,待会调试的时候,可以根据它找到附近的跳转。样本名称为“关于加强防范钓鱼邮件的通知.exe”,为64位C++程序,无壳,运行后释放一个名为chrome_pwa_launcher.exe的文件。无需多说,直接上手!

2025-01-08 04:45:00 665

原创 Zabbix SQL注入漏洞分析

漏洞简介Zabbix 是一款开源的网络监控和报警系统,用于监视网络设备、服务器和应用程序的性能和可用性。攻击者可以通过API接口,向 user.get API端点发送恶意构造的请求,注入SQL代码,以实现权限提升、数据泄露或系统入侵。影响版本环境搭建参考https://forum.butian.net/share/3056访问https://cdn.zabbix.com/zabbix/appliances/stable/7.0/7.0.0/

2025-01-07 06:00:00 1039

原创 pwn中的protobuf

剩下的就不是很难了,一开始准备申请出environ泄露stack,但是memcpy的赋值会覆盖原本存的值,而且show三次会关闭标准输入输出,所以最后通过打stdout来泄露出stack,然后orw就行了。+8偏移的这个至关重要,这决定着在protobuf中这个是什么类型的变量,具体要参考下表,其实就是一个从0开始的偏移,比如这个0xf,那就是对应着0xf偏移也就是bytes类型。这个题要留意的是data也就是msg是在堆上的,是会根据其大小得到相应大小的堆块,同时数据会复制到该堆块上,这个地方非常有用。

2025-01-06 07:00:00 751

原创 强制解码越狱

安全对齐(Safety Alignment)在人工智能(AI)和大规模语言模型(LLM)的研究中,指的是确保这些模型的行为与预期的社会伦理和安全标准相一致,从而防止模型产生有害、偏见或不当的输出。这个 prepare_logits_processor 函数的目的是根据提供的 temperature 和 repetition_penalty 参数,准备并返回一个 LogitsProcessorList,该列表包含一个或多个对生成的 logits(模型的输出分数)进行处理的处理器(processor)。

2025-01-05 05:30:00 2236

原创 利用&Profile混淆

云函数云函数(Serverless Cloud Function,SCF)是云服务商为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。提供云函数服务商阿里云:https://www.aliyun.com/product/fc腾讯云:https://console.cloud.tencent.com/scf/华为云:https://developer.huawei.com/consumer/cn/agconnect/cloud-function/

2025-01-04 03:15:00 1829

原创 初探某勒索软件

不过,又不同于一般的AES,它在过程中添加了RSA算法,加密密钥使用嵌入恶意软件的预定义公钥加密,只有使用攻击者的私钥才能解密。之后,恶意软件会继续检查系统中是否有任何打开的 SMB 共享,但不包括名称中带有 " "的共享,这表示隐藏共享。具体来说它通过初始化COM (CoInitialize),获取了相应的CLSID和IID,通过这个来构造一个Elevation字符串路径,尝试获取管理员权限的COM对象。不过,与大多数勒索软件不同的是,它是通过删除多个恢复选项来实现这一目的的,而不仅仅是删除卷影副本。

2025-01-03 05:00:00 1102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除