2023巅峰极客BabyURL
2023巅峰极客 BabyURL
附件下载
1docker run -it -d -p 12345:8080 -e FLAG=flag{8382843b-d3e8-72fc-6625-ba5269953b23}" lxxxin/dfjk2023_babyurl
这道题有两种解法,一个是SignedObject二次反序列化,一个是绕过黑名单打TemplatesImpl,最近在学习后者因此这里只提及后者做法
拿到反编译后的代码可以看到整体结构比较简单
123456789101112131415161718@GetMapping({"/hack"}) @ResponseBody public String hack(@RequestParam String payload) { byte[] bytes = Base64.getDecoder().decode(payload.getBytes(StandardCharsets.UTF_8)); ByteArrayInpu ...
一些关于计网的知识
其实自接触Web安全以来,对计算机网络知识一点不了解那到不至于,只是说这学期开始系统性学习计算机网络,因此有了此文章,同时也供自己时常复习
IP协议基础在OSI模型中,IP协议属于网络层。网络层的主要作用是负责数据包从源设备到目的设备的传递(P2P通信)。它通过路由选择和逻辑寻址来实现数据包的传输。
数据链路层与网络层网络层主要负责选择数据包从源设备到目的设备的最佳路径,实现不同子网之间的通信;
数据链路层在物理层提供的服务基础上,负责将数据可靠地传输到相邻节点的目标机网络层;
因此,网络层依赖数据链路层来实现相邻设备之间的数据传输
IP寻址在IP寻址中,设备通过IP地址来确定数据包的发送和接收。IP地址由网络部分和主机部分组成,网络部分用于路由控制,而主机部分则用于在同一网络内区分不同的设备。因此TCP/IP通信中所有主机或路由器必须设定自己的IP地址
路由控制路由控制是指在网络中根据IP地址决定数据包的传输路径的过程
路由控制主要通过以下步骤实现:
路由表查找:当设备需要发送数据包时,它会根据目的IP地址在路由表中查找匹配的记录。路由表记录了网络地址与下一跳路由器的映射关系 ...
计算机网络课程设计
基于PactTracer仿真平台,根据拓扑结构设计一个简单的企业网络
实验一:静态路由的部署与实施Router0为某公司总部,Router1、Router3是两个分部,主机PC0、PC1所在的网段分别模拟两个分部中的办公网络。现需要总部与各个分部、分部与分部都能够通信,且分部之间在进行通信时,之间的直连链路为主用链路,通过总部的链路为备用链路。
静态路由:需要网络管理员手动在路由器上配置路由信息;定义的路径是固定的,除非管理员手动修改,否则不会改变,即使网络拓扑结构发生变化;仅指定数据包从源到目的地的路径,需要额外配置回程路由以实现双向通信
浮动静态路由及负载均衡静态路由拓扑图
12345678910111213141516171819202122【Router0】进入特权模式并开始配置Router>enableRouter#configure terminal配置Serial0/0/0接口Router(config)#interface Serial0/0/0分配IP地址和子网掩码Router(config-if)#ip address 172.16.0.1 255.2 ...
2024重庆市大学生信息安全竞赛
Webweb1打开后网站显示nothing,自此其他师傅说还是dirsearch好用,御剑扫描量太大了
dirsearch目录扫描
其中
12345678910<?phpclass Flag{ public $cmd='whoami'; public function __destruct() { system($this->cmd); }}unserialize($_GET['flag']);?>
一个简单的反序列化
Web2弱密码爆出密码为password,提示非本地用户,xff绕过无果,有提示快照,在输入用户处构造ssrf的本地用户
http://127.0.0.1/fllllag.php
12345678910111213141516171819202122232425262728293031<?phpif ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') { header("Content-Type:text/html;charset=utf-8"); error_r ...
2024红岩杯CTF
WebTheBoss
考察知识点:PHP反序列化
1CQ9jnUNAPzAfLKAmVRkiqzIIQDc7QDbtVPNtpUIvoTywVPEmLKx7QDbtVPNtMaIhL3Eco24tK193LJgyqKNbXD0XVPNtVUfAPvNtVPNtVPNtWUEbnKZgCaAurF0+LJExK3AuoUDbXGfAPvNtVPO9QDbAPa0APzAfLKAmVR1urj0XVPNtVUO1LzkcLlNxnJL7QDbtVPNtMaIhL3Eco24tK19aMKDbWT5uoJHcrj0XVPNtVPNtVPNbWUEbnKZgCzyzXFtcBj0XVPNtVU0APt0XsD0XL2kup3ZtH2IyrJRAPafAPvNtVPOjqJWfnJZtWTgho3p7QDbtVPNtpUIvoTywVPE1Bj0XVPNtVTM1ozA0nJ9hVS9sL2SfoPtxp2IfMvjxozSgMFy7QDbtVPNtVPNtVTIwnT8tWUEbnKZgCaHgCz5iqmfAPvNtVPO9QDbtVPNtMaIhL3Eco24tK19woT9hMFtcQ ...
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= ...