2024ByteCTF
前言
以下题目的复现环境均为根据网上大佬们的WP所创建的,与题目存在一些不完全一致之处。本文纯粹是为了记录复现过程,如有问题,请各位大佬多多指教。附上笔者题目附件和部署文档。地址:CTFReproduction/2024/ByteCTF at main · symya/CTFReproduction (github.com)
跟复现环境相比,题目可太好做了(:
miscbash game
题目附件附上一份能跑的dockerfile,注意要在该项目根目录和/lib/cmd目录下创建go.mod文件。完整的复现环境~地址:CTFReproduction/2024/ByteCTF/misc/bashgame at main · symya/CTFReproduction (github.com)
做题流程:go代码审计发现
/update以post接收name参数
判断自字符长度是否小于6
调用cmd.Exec函数,此处限制了交互时间。
执行sed -i "s/Bytectf.* ...
Python反序列化漏洞分析
前置知识
Python 对象序列化Python中序列化一般有三种方式: pickle模块和json模块, 还有一个更原始的序列化模块marshal。pickle模块是Python特有的格式, json模块是json通用的格式。marshal存在主要是为了支持 Python 的 .pyc 文件。一般地 pickle 应该是序列化 Python 对象时的首选。
官方文档的解释:pickle — Python 对象序列化 — Python 3.12.5 文档
python中可以被序列化和反序列化的对象下列类型可以被封存:
内置常量 (None, True, False, Ellipsis 和 NotImplemented);
整数、浮点数、复数;
字符串、字节串、字节数组;
只包含可封存对象的元组、列表、集合和字典;
可在模块最高层级上访问的(内置与用户自定义的)函数(使用 def,而不是使用 lambda 定义);
可在模块最高层级上访问的类;
这种类的实例调用 __getstate__() 的结果是可 pickle 的(请参阅 封存类实例 一节了解详情)。
尝试封存不能被封存的对象会 ...
ysoserial-URLDNS链
前言
项目地址:ysoserial/src/main/java/ysoserial/payloads/URLDNS.java at master · frohoff/ysoserial (github.com)
URLDNS是ysoserial中的一条利用链,通常用于检测是否存在Java反序列化漏洞,特点:
只能发起dns请求,不能进行其他利用
目标无回显
使⽤用Java内置的类构造,对第三⽅方库没有依赖
原理分析
官方给的Gadget Chain:
1234* HashMap.readObject()* HashMap.putVal()* HashMap.hash()* URL.hashCode()
我们正着来走一遍先跟进HashMap类,是一个可序列化的类,其重写了readObject()方法,然后通过一个for循环K key = (K) s.readObject();进行反序列化。然后调用putVal()函数,在其中调用hash(key)。
当key ...
php反序列化
序列化
注意:
当一个父类实现序列化的时候,其子类也会自动实现序列化,不需要serializable接口
当一个对象的实例变量引用另一对象时,序列化该对象也应该序列化被引用的对象
序列化的demo
123456789101112131415161718192021222324<?php class test{ //定义了三个属性 private $username='usname'; //私有权限,只能在本类中使用,子类不能继承 protected $passwd='123456'; //私有权限,只能在本类中使用,但子类是可以继承该变量的 public $id='1'; //公有 //一个获取passwd的类方法 public function testpasswd($passwd){ $this->passwd = $passwd; //将函数传进来的值传给passwd } ...
Java原生的序列化和反序列化
之前学过php序列化与反序列化,以上就不赘述关于序列化与反序列化的一些概念问题了。感兴趣的师傅可以看看这篇文章:php反序列化 (symya.github.io)进入正题。
Serializable 接口
基本使用
只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。(不是则会抛出异常) Serializable 接口是 Java 提供的序列化接口,它是一个空接口 Serializable 用来标识当前类可以被 ObjectOutputStream 序列化,以及被 ObjectInputStream 反序列化。
通过 ObjectOutputStream 将需要序列化数据写入到流中,因为Java IO是一种装饰者模式,因此可以通过 ObjectOutStream 包装 FileOutStream 将数据写入到文件中或者包装 ByteArrayOutStream 将数据写入到内存中。同理,可以通过 ObjectInputStream 将数据从磁盘 FileInputStream 或者内存 ByteArrayInputStream ...
初识thymeleaf
模板引擎,原来用jsp现在使用thymeleaf
01 导入依赖
使用thyme leaf需要先导入依赖https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#using-boot-starterhttps://www.thymeleaf.org/https://github.com/thymeleaf/thymeleaf在SpringBoot中找到和thyme leaf相关的依赖https://github.com/spring-projects/spring-boot/tree/v2.1.6.RELEASE/spring-boot-project/spring-boot-starters/spring-boot-starter-thymeleaf/pom.xml
12345678<dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5< ...
【WP】dasctf_sum 2024
web
Sanic’s revenge | SOLVED| working: symv1a题目描述:Sanic???Sanic’s revenge!!!
题目附件:app.py
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051from sanic import Sanicimport osfrom sanic.response import text, htmlimport sysimport randomimport pydash# pydash==5.1.2# 这里的源码好像被admin删掉了一些,听他说里面藏有大秘密class Pollute: def __init__(self): passapp = Sanic(__name__)app.static("/static/", "./static/")@app.route("/*****secret********" ...