- 博客(38)
- 收藏
- 关注
原创 Jndi注入
→ 连接攻击者 RMI→ 获取 Reference("Exploit", "http://evil/")→ 从 http://evil/Exploit.class 下载字节码→ newInstance() → 执行 static{} → RCE是唯一一个主动从远程 URL 加载并实例化类的地方,因此它是整个 JNDI 注入漏洞的“最后一公里”和根本原因。比较有名的CVE-2023-21839、Log4j JNDI RCE 等这里简单拿CVE-2023-21839进行讲解大致的简单触发流程图。
2025-11-13 10:07:48
633
原创 java反序列化小记
步骤作用序列化将转为字节数组,存入内存流反序列化从字节数组重建Person对象,不调用构造函数,但会自动回调(如果存在)安全意义如果中包含危险操作(如执行命令、触发反射链),攻击者可通过伪造字节流实现 RCE💡 这就是为什么“不要反序列化不可信数据”是 Java 安全的黄金法则!
2025-11-12 22:58:20
681
原创 验证 JWT RSA 签名与验证
公钥恰好能解密私钥加密的哈希数据,但是公钥加密的哈希数据和私钥加密的哈希数据不一样,只要对比公钥解析签名出来的哈希数据和原数据(header+body)哈希后的结果是不是一样的。
2025-10-14 09:57:01
142
原创 Spring IOC(控制反转)中常用注解
Bean注解作用使用位置是否必须@Component注册 Bean类✅@Service业务层 Bean类✅(语义化)数据层 Bean类✅(异常翻译)控制层 Bean类✅(MVC)@Autowired自动注入字段/方法/构造器✅@Qualifier指定 Bean 名字段/参数配合@Autowired@Value注入值字段✅配置类类✅@Bean定义 Bean方法✅扫描包配置类✅@Scope设置作用域类/方法可选初始化方法可选销毁前方法可选。
2025-10-12 14:31:17
1157
原创 python leetcode简单练习(2)
核心思路是遍历字符串中的每个字符,遇到左括号时压入栈中,遇到右括号时检查栈顶的左括号是否匹配。最终,若栈为空则说明所有括号正确闭合。使用虚拟头节点简化初始条件处理,然后用指针依次连接较小值的节点,直到其中一个链表遍历完毕,最后将剩余链表直接接上。使用双指针法,快指针遍历数组,慢指针记录当前有效位置。由于数组已排序,重复元素必然相邻,遇到不同元素时将其移至慢指针位置,最后返回慢指针位置+1即为新数组长度。使用双指针法,快指针遍历数组,慢指针记录有效位置。但实际上题目只要求前k个元素正确,后面的元素无关紧要。
2025-03-31 21:38:22
515
原创 python leetcode简单练习(1)
比较反转后的部分与剩余部分是否相等(偶数位情况)或反转部分除以10后是否与剩余部分相等(奇数位情况)。:遍历基准字符串的每个字符位置,检查其他字符串在该位置上的字符是否相同。:若遇到任一字符串长度不足或字符不匹配,立即返回当前已匹配的前缀部分。通过逐位反转整数的后半部分,直到反转的部分不小于剩余的前半部分。:若所有字符均匹配,返回整个基准字符串作为最长公共前缀。:以第一个字符串作为基准,逐个字符进行比较。:如果输入数组为空,直接返回空字符串。末尾为0的非零整数不可能是回文数。负数不可能是回文数。
2025-03-31 17:35:29
257
原创 numpy中axis问题记录
在NumPy中,数组可以有多个维度(或轴)。每个轴代表数据的一个方向。axis=0表示第一个维度(最外层)axis=1表示第二个维度以此类推...axis=0:沿着第一个维度(最外层)进行操作,即对每一列的元素进行操作。axis=1:沿着第二个维度(中间层)进行操作,即对每一行的元素进行操作。axis=2:沿着第三个维度(最内层)进行操作,即对每个小数组内的元素进行操作。关键点:当你设置axis=i。
2025-02-22 15:58:16
385
原创 java常见类库
String类自身有一个最大的缺陷:内容一旦声明则不可改变,JDK为了方便用户修改字符串内容提供了StringBuffer类StringBuffer类不像String类那样可以直接通过声明字符串常量方式进行实例化,而是必须像普通类对象使用一样,首先通过构造方法进行对象实例化,而后才可以调用方法进行处理。No.方法类型描述1构造创建一个空的StringBuffer对象2构造将接受到的String内容变为StringBuffer内容3。
2024-12-28 19:38:27
846
原创 java基础
如果同时导入了不同包中名称相同的类,这时候就使用的时候就需要使用这个类的完整名称。如:hh.gg.util.Message msg = new hh.gg.util.Message();利用静态导入的优点在于,不同类的静态方法就好像在主类定义的一样,不需要类名称就可以直接进行调用。抽象类使用abstrat class进行定义,并且在一个抽象类中也可以利用abstract关键词定义若干个抽象方法,这样抽象类的子类就必须在继承抽象类时强制覆写全部抽象方法。
2024-12-22 22:13:17
883
原创 2024HECTFweb
接下来给出的是一个session解密代码,虽然key是随机的,但是种子范围很小,可以进行爆破,爆破所得的是一串序列化文本,然后修改相应数据为admin,再次进行加密,更改cookie并发送请求就可以获得flag。上面这句话就是解题的关键,当时我就跟本没利用好原型链污染这个洞,没有想到还可以打waf,也是学到了。但是我们有原型链污染这个洞,WAF是导⼊的WAF类,⾥⾯有blacklist属性,那我们可以污染。脚本网上有很多,这里就不写那么全面了,简单的认识前面几个,后面的也就是payload变化一下。
2024-12-21 10:20:28
1283
原创 sys.stdout和sys.stdout.buffer
sys.stdout:适合于常规的文本输出,Python 会帮你处理编码和换行符等细节。:适合于需要直接写入字节数据的场景,比如发送二进制数据或使用特定的编码方式而不依赖于Python的默认行为。选择哪一个取决于你的具体需求。如果你只是想打印一些信息给用户看,通常使用sys.stdout或者更简单的print()函数就足够了。但如果你需要更细粒度的控制,比如实现自定义的日志记录格式、发送网络消息或者其他形式的二进制通信,则可能需要用到。
2024-12-01 22:03:38
676
原创 TypeError: ‘type‘ object is not subscriptable
记录一个在windows上安装dirsearch遇到的问题。
2024-10-01 18:11:31
584
原创 python反序列化
pickle序列化:将 Python 对象转换为可以存储或传输的格式。反序列化:将序列化的数据转换回 Python 对象。pickle模块:支持复杂的 Python 对象,但存在安全风险。json模块:支持 JSON 格式,更安全,适用于大多数应用场景。安全性:处理不受信任的数据时,应避免使用pickle。r:只读模式。w:写入模式,会清空原有内容。a:追加模式。b:二进制模式。:读写模式。x:独占创建模式。t:文本模式(默认)。
2024-08-30 22:10:12
2170
原创 docker基本命令
测试,自动并进入容器 docker run -it centos /bin/bash #-it是交互,交互要有控制台,所以选择centos上的一个控制台,/bin/bash或/bin/sh。删除资源:rm -rf/var/lib/docker #/var/lib/docker docker的默认工作路径。docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f。docker rm -f $(docker ps -aq) #删除所有的容器。
2024-08-30 20:31:58
1227
原创 贪吃蛇+SDL2库【1】(c语言)
小白的学习记录注:博主是小白,所以记录的可能是一些无意中看到,但是不清楚的东西,所以大家择需了解。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。JSON 使用文本格式来表示结构化数据,通常用于在服务器和客户端之间传输数据,尤其是在 web 应用程序中。简单易读:数据结构:json 数组:有序值的集合,使用方括号 包围,可以包含多个值(对象或其他类型)。 json
2024-08-16 18:42:07
1134
原创 c语言fprintf和Uint32
的文件,然后写入了一些文本数据。接着,我们再次打开同一个文件,这次是为了读取之前写入的数据,并将其打印到屏幕上。文件流提供了对文件进行读写操作的抽象层,使得程序员能够通过高级接口而不是直接通过低级I/O系统调用来处理文件。在C语言中,文件流(file stream)是指与文件关联的一个结构体,这个结构体通常被称作。通过这种方式,文件流提供了与文件交互的一种简单且高效的方法。函数用于将格式化的输出写入到一个已经打开的文件流中。的文件,并向其中写入了一些文本和整数。将一些文本和数据写入到一个文件中。
2024-08-14 21:00:33
984
原创 SSTI模版注入(初步)
SSTI模版注入(初步)ssti可能造成任意文件读取和RCE远程控制后台系统漏洞成因:渲染模版时,没有严格控制对用户的输入;使用了危险的模版,导致用户可以混合flask程序进行交互。flask是基于python开发的一种web服务器,那么也就意味着如果用户可以和flask进行交互的话,就可以执行python的代码,比如eval,system,file等等的函数。
2024-08-11 23:06:13
1014
原创 c语言中的gets()函数记录
如果用户输入了 "Hello, this is an example using gets() function." 然后按下回车,gets()函数会读取整行文本并丢弃换行符,然后将其存储在input数组中,并在末尾添加'\0',使其成为C字符串。该函数会读取输入直至遇到换行符(\n),然后丢弃换行符,将其余字符存储在字符串中,并在字符串末尾添加一个空字符('\0'),以使其成为C字符串。使用gets()函数读取该输入,会将其存储在一个字符数组中,以'\0'作为结尾符。
2024-06-12 10:52:46
447
原创 buu[HCTF 2018]WarmUp(代码审计)
文件不存在,目录穿越至ffffllllaaaagggg,得到我们要的flag。使用urldecode会出现一个问题,假如我将一个字符使用url编码了两遍然后传入的时候,首先浏览器解码了一遍,接下来才是urlencode解码,所以使用两次urlencode,绕过前面的if,进入第四个if。1、tips:include函数有这么一个神奇的功能:以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。通常,URL中的参数是用。
2024-05-24 08:36:34
546
1
原创 php中session相关知识(目前了解部分)
在PHP中,$_SESSION是一个特殊的预定义数组,用于存储跨多个页面(即在整个用户会话中)持久化的数据。与其他类型的数据不同,会话数据在页面加载时不会丢失,而会在服务器上保存到用户会话结束(即用户关闭浏览器或者经过一定时间未活动)。是PHP的会话配置选项,定义了会话数据序列化的方法。它是一个全局性质的存储方式,允许你为每个访问者创建一个独特的会话,并且这个会话可以保持一定时间的持久化状态。如果一个会话已经存在(例如,同一个用户在另一个页面已经开启了会话),这个函数将会使用现有的会话。
2024-04-10 17:20:49
934
1
原创 php关于序列化r的指向
在PHP中,序列化字符串的索引是根据序列化过程中值的出现顺序来确定的。每个值(包括数组的键和值)在序列化字符串中都会被赋予一个顺序索引。通过这种方式,你可以跟踪序列化的过程,找到每个。指向的是序列化字符串中按顺序出现的第。个值(从1开始计数)。
2024-04-10 16:52:51
468
1
原创 php反序列化(2)
在反序列化中,我们能控制的数据就是对象中的属性值(成员变量),所以在php反序列化中有一种漏洞利用方法叫“面向属性编程”,即pop(property oriented programming)。如果存在wakeup魔术方法,调用unserialize()之前先调用__wakeup,但是系列化字符串中对象属性个数的值大于真实的属性个数时,会跳过wakeup()的执行。
2024-04-10 15:59:23
1375
1
原创 php反序列化(1)
public:公共的,在类的内部、子类中或者类的外部都可以使用,不受限制。protected:受保护的,在类的内部、子类中可以使用,但不能在类的外部使用;private:私有的,只能在类的内部使用,在类的外部或者子类中都无法使用。默认public类的内部类的子部类的外部public√√√protected√√×private√××可以看到只能出现public的值。
2024-04-05 16:15:21
882
1
原创 正则表达式的简单认识
这些是正则表达式中常用的语法规则和特殊字符,可以通过组合它们来构建不同的模式以匹配特定的文本内容。可以匹配 “hello world” 中的 “hello”,但不会匹配 “foo hello” 中的 “hello”。可以匹配单词 “hello”,但不会匹配 “hello123” 中的 “hello”,因为它们的边界不符合要求。:如果一个单词位于字符串的开始或结束,那么单词的边界就是字符串的边界。可以用于确定单词的边界位置,这在处理单词边界相关的匹配操作时非常有用。可以用于匹配单词的开始或结束位置。
2024-03-27 17:17:14
1046
1
原创 information_schema中的重要内容及其作用
系统表,用户可以获取关于数据库结构、对象和权限的详细信息,从而实现对数据库的管理、优化和监控。这些信息对于数据库管理员和开发人员来说都是非常有价值的。是一个存储关于数据库结构和元数据的虚拟数据库,它包含了许多系统表,用于提供关于数据库对象(如数据库、表、列等)的信息。是一个虚拟数据库,其中包含了许多系统表,用于存储关于数据库结构和元数据的信息。中的系统表,可以通过指定这些表来查询关于表和列的信息。语句,通常会导致语法错误或者没有返回结果。并不会直接返回结果,因为。在MySQL数据库中,
2024-03-24 12:01:29
851
1
原创 sql注入学习
sql注入发生在服务端服务器向数据库请求数据的时候sql注入分为三大类型:可回显的注入、不可回显的注入、二次注入可回显的注入:联合注入、报错注入不可回显的注入:Bool盲注、时间注入注释可以是。
2024-03-10 15:05:59
932
3
原创 CTFHUB-web-文件上传
htaccess是一个纯文本文件,存放着Apache服务器配置相关的指令。.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。.htaccess的用途范围主要针对当前目录。注意:.htaccess文件(特别注意这里文件名不可随意更改,因为 .htaccess 是配置文件)博主这里帮大家把坑踩了,蚁剑死活连不上的原因。
2023-12-23 21:29:44
2343
3
原创 CTFHUB web-rce-过滤
回车键,即键盘上的ENTER键,是一个比较有用的键,在文字编辑时,回车键的作用是换行,在输入网址时回车键的作用是“转到”,在执行DOS命令时,回车键的作用是执行。
2023-12-18 20:08:17
1016
1
原创 CTFHUB web-rce-命令注入
命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理系统(CMS)等。后台代码并未对用户输入的参数ip的值进行过滤就直接与ping命令进行拼接并执行 ,因此我们可以使用常见的命令拼接字符对命令进行拼接,如使用“&”,“|”,“&&”,“||”等,linux系统下还可以使用“;”,“``”。Windows支持的管道符。
2023-12-17 17:24:51
1284
1
原创 CTFHUB web-rce-读取源代码
发现这种方法被禁用,所以尝试php://filter,php源码在网页加载的时候不会显现,使用base.64的加密方式读取 /flag(题目说了)因为和之前的有点相像,尝试php://input。得到一个加密的字符串。
2023-12-15 18:06:00
865
原创 CTFHub web-rce-eval执行
eval();函数把字符串按照PHP代码来计算。该字符串必须是合法的PHP代码,并且必须以分号结尾。
2023-12-03 20:27:54
751
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅