2024NewstarCTF公开赛道合集
前言主要合集了自己认为把握度还不够的,比较重要的题型,这些题目大多数不会单独作为知识点呈现,但也需要加深印象
Week4Webezpollute
考察知识点:Nodejs的原型链污染
参考文章:Prototype Pollution to RCE | HackTricks
污染点在merge.js,index.js的/config路由下,初步思路是要找到可污染的变量参数,构造RCE反弹shell之类的,其中导入了模块child_process;至于merge.js虽然ban了__proto__ ,但是可以用”constructor”: {“prototype”的方式去绕过
通过sh文件我们发现环境变量中写了flag,同时又将flag写入了根目录下
由于污染了 constructor.prototype,这会影响到所有通过这个构造函数创建的对象的原型链,众所周知,要想执行代码,你得需要环境变量,而这里我们利用环境变量去污染env对象,NODE_OPTIONS 是一个特殊的环境变量,可以用来为 Node.js 设置启动时的参数。设置 --require /proc/self/enviro ...
从一题中类比Wiener攻击
1234567891011121314151617181920212223242526272829303132333435363738from Crypto.Util.number import *from gmpy2 import *import randomdef pad(msg, nbits): pad_length = nbits - len(msg) * 8 - 8 assert pad_length >= 0 pad = random.getrandbits(pad_length).to_bytes((pad_length + 7) // 8, "big") padded_msg = pad[:len(pad)//2] + b"\x00" + msg + pad[len(pad)//2:] return padded_msgdef All_in_my_name(p, q): #开启三技能<俱以我之名>后,维娜立即在周围八格可部署地面召唤“黄金盟誓(Golden_Oath)”;对RSA造成真实伤害。 Golden_O ...
从一题中学习AES-CBC,ECB模式的加密原理
这道题来自NewStar CTF
12345678910111213141516171819202122232425262728293031323334from Crypto.Cipher import AESfrom Crypto.Util.number import *import osKEY = b"fake_key_fake_ke"FLAG = "flag{fake_flag_fake_flag}" def decrypt(c): AES_ECB = AES.new(KEY, AES.MODE_ECB) decrypted = AES_ECB.decrypt(long_to_bytes(c)) return decrypted.hex()def encrypt(): iv = os.urandom(16) AES_CBC = AES.new(KEY, AES.MODE_CBC, iv) encrypted = AES_CBC.encrypt(FLAG.encode()) pr ...
从一题目中学习RSA——Franklin-Reiter相关消息攻击
从一题目中学习RSA——Franklin-Reiter相关消息攻击Franklin-Reiter相关消息攻击原理如果两个信息之间存在已知的固定差异(线性关系)
f(x)=ax+b并且在相同的模数n下进行RSA加密,那么就有可能恢复出这两个消息
现在假设有两个明文消息m1,m2并有以下关系(a,b已知):
m_{1} = f(m_{2} ) = am_{1} +b加密后有
c_{1} = m_{1}^{e} \bmod N
c_{2} = m_{2}^{e} \bmod N又因为
C_{1} \equiv M_{1}^{e} \bmod N
C_{2} \equiv M_{2}^{e} \bmod N所以我们构建如下多项式
P(x)=x^{e} -c_{1} \bmod N
Q(x)=(ax+b)^{e}-c_{2} \bmod N当x=m2时都有P(x)=Q(x)=0
届时我们通过辗转相除法计算两个多项式的最大公因式,这个公因式最后一定包含m2并且是一次项的,由模运算的性质可知其模N也一定是0,就此我们计算出了m2,同时m1也出来了
具体题目12345678910111 ...
哈希长度拓展攻击
我们以MD5举例
MD5加密原理概述: md5算法也可以称为消息摘要算法,属于hash算法的一种,md5算法对输入的任意长度的消息进行运行,然后产生一个128位的消息摘要
1.数据填充对消息进行数据填充,使消息的长度对512取模得448;
填充方法:在消息后面进行填充,填充第一位为1,其余为0
例如admin的二进制为:
101100001 01100100 01101101 01101001 01101110
填充后:
101100001 01100100 01101101 01101001 01101110 1 (407个0)
2.记录信息长度用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N512+448+64=(N+1)\512位
admin一共5个字节,总共40位,转为二进制101000,此时再次补0,直至总共为512位(512的倍数)
101100001 01100100 01101101 01101001 01101110 1 (407个0)101000 (58个0)
3.装入标准的幻数对于MD5算法来说,有一串初始向量如下:
1234A= ...
从一题中学习通过继承关系创造对象进行Python-Jail
Python的内建函数&内建模块内建函数是Python自带的函数,可以直接使用,无需导入任何模块;在python交互模式下,使用命令dir('builtins')即可查看当前python版本的一些内建变量、内建函数
内建模块是Python自带的库,它们提供了更复杂或更专门的功能,但在使用之前需要通过 import 语句引入
例如我们常用的
12os:与操作系统交互,进行文件和目录操作sys:提供与Python解释器交互的功能,如命令行参数、退出程序
Python命名空间
A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries.
Python 中的 命名空间(Namespace) 是一种用于将名称(变量名、函数名等)映射到对象(数据、函数、类等)的机制。它类似于一个字典,其中“名称”是键,实际的“对象”是值。这一机制可以避免命名冲突,确保不同作用域内相同名称不会相互干扰。
一个简单的例子说明命名 ...
记第一次HVV护网
⚠免责声明:此次渗透测试在已授权下进行操作,所有涉及敏感内容已打码,且在渗透测试结束以后全部删除。该文章仅作经验总结分享
前言
这篇文章以吹夸夸的形式呈现,口水话会很多,更多的也是心得体会吧
这是我第一次参加线下的护网,四个字形容,才疏学浅。真实的渗透环境就是不一样,一周的时间,体验到了什么是坐牢。再加上有几个公司职业队的加入,简直是降维打击,个个都是内网打穿,此次教育系统的网络攻防对于他们也只是练练手了
回归正题,此次作为红队,在学长老登的带领下,更多的收获可能还是整个流程,包括前面的信息搜集,对各单位的资产进行初步渗透打点,打标签等等;
其次就是对于教育系统,资产类型无非就是一些管理后台,教务在线这种内网服务,重点在于,子域名搜集的全,暴露面就更广
其它也就没啥了,后面就根据成果类型具体说吧
网站群管理平台git泄露漏洞和任意文件读取漏洞以及ssh弱口令登录任意文件读取goby扫漏通过目录穿越读取/../../../../../../../../etc/passwd
本来想看看能不能提权,但这里发现只能读取/etc/passwd,于是有了后面的ssh弱口令登录
ssh弱口令登 ...
2024 XYCTF Crypto Sign1n_Revenge复现
123456789101112131415161718192021222324252627282930313233343536373839404142from Crypto.Util.number import *from tqdm import *import gmpy2flag=b'XYCTF{uuid}'flag=bytes_to_long(flag)leak=bin(int(flag))while 1: leak += "0" if len(leak) == 514: breakdef swap_bits(input_str): input_list = list(input_str[2:]) length = len(input_list) for i in range(length // 2): temp = input_list[i] input_list[i] = input_list[length - 1 - i] input_list[length - 1 - i] = temp ...
2024CISCN Simple_php题解
我觉得一点都不simple,这是我做个最难的rce,但是有这么多人都做起了,不知道是自己太菜了还是啥
1234567891011121314<?phpini_set('open_basedir', '/var/www/html/');error_reporting(0);if(isset($_POST['cmd'])){ $cmd = escapeshellcmd($_POST['cmd']); if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget ...
2024 Sekai CTF Tagless题解
这是一道来自sekaiCTF的题目,从老登那了解到的一道很不错的XSS题目
提供给用户输入的内容并打印出来
从源文件我们可以看到主体文件app.py
123456789101112131415161718192021222324252627282930313233343536373839404142434445from flask import Flask, render_template, make_response,requestfrom bot import *from urllib.parse import urlparseapp = Flask(__name__, static_folder='static')@app.after_requestdef add_security_headers(resp): resp.headers['Content-Security-Policy'] = "script-src 'self'; style-src 'self' https:// ...