Hello Guys! 👋

Welcome to My Blog!

  • 这里主要记录了平时CTF遇到的问题和WP以及一些SRC姿势总结笔记(缓慢更新中~)

2025 N1CTF Junior Web 方向全解

很高兴可以成为第一个AK Web的师傅hh 祝N1CTF Junior越办越好~ Gavatar 直接登陆上去 发现在头像上传处可以接受URL作为参数 考虑是不是存在什么SSRF/任意文件读取 直接可以尝试file协议 可以实现读取任意文件 但是这个题给了docker 是用/readflag去获取flag 考虑是否需要通过任意文件读取转换为RCE 当时特别注意了一下这里的的PHP版本 8.3.4 不就是vulhub上给的一模一样的版本 利用 CVE-2024-2961 的实现 ...

二月 11, 2025 · 5 分钟 · 2014 字 · J1rrY

Solidity 智能合约开发 从入门到吃土

Solidity 基础 建议参考 https://wtf.afox.cc/ 原版英文有更多进阶内容 合约结构 Solidity 合约通常包含以下几个主要部分: SPDX 许可标识:指定代码的开源许可。 pragma 指令:声明 Solidity 版本。 导入语句:引入其他合约或库。 合约声明:使用 contract 关键字。 状态变量:存储在区块链上的持久数据。 事件:用于记录重要操作,可被外部监听。 修饰符:用于修改函数行为的可重用代码。 函数:合约的可执行代码单元。 以下是一个简单的合约结构示例: ...

二月 4, 2025 · 27 分钟 · 13069 字 · J1rrY

从2025系统安全防护赛JDBCParty学习高版本JDK和高版本Tomcat打JNDI到RCE

之前有师傅在群里发了如何反序列化触发到JNDI 这里重新学习整理一下整个流程 考点:高版本JDK反序列化+高版本JNDI打法 JDK17+反射限制绕过 参考:https://pankas.top/2023/12/05/jdk17-%E5%8F%8D%E5%B0%84%E9%99%90%E5%88%B6%E7%BB%95%E8%BF%87/ ...

二月 3, 2025 · 5 分钟 · 2331 字 · J1rrY

尝试CodeQL分析2025 SUCTF SU_Solon

本篇文章尝试通过CodeQL对触发JDBC的可能解进行探究,也是初学CodeQL进行练手的一道题目 SU_Solon 这是一道非常明确的Hession反序列化的题目 ...

一月 21, 2025 · 7 分钟 · 3181 字 · J1rrY

从国城杯Ez_Gallery实现寻找WSGIRef内存马和Response响应头外带以及栈帧回显的尝试

登陆后台 直接尝试弱密码 admin 123456 实现登陆后台功能 实现任意文件读取 file后接着具体的文件名 要考虑目录穿越问题 一般后端这样写都是直接通过 os.path.join 直接拼接存在任意文件读取 尝试直接读取当前程序的启动命令查看当前Web应用的绝对路径 ...

十二月 23, 2024 · 6 分钟 · 2848 字 · J1rrY

DownUnderCTF 2021 jwt

考点:对于RS256弱公钥生成的jwt可以伪造(非对称加密) 网鼎杯 Web1 改编自这道国际赛的题 有空来复现一下 解题 WP :https://ctftime.org/writeup/30541 主页访问直接返回源码 from flask import Flask, request import jwt, time, os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) private_key = open('priv').read() public_key = open('pub').read() flag = open('flag.txt').read() @app.route("/get_token") def get_token(): return jwt.encode({'admin': False, 'now': time.time()}, private_key, algorithm='RS256') @app.route("/get_flag", methods=['POST']) def get_flag(): try: payload = jwt.decode(request.form['jwt'], public_key, algorithms=['RS256']) if payload['admin']: return flag except: return ":(" @app.route("/") def sauce(): return " %s " % open(__file__).read() if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) os.urandom(24) 生成24字节的密钥 ...

十二月 20, 2024 · 1 分钟 · 375 字 · J1rrY

2024 网鼎杯 CTF 青龙组 Web 方向 全解 WP

Web1 考点: RS256弱公钥jwt伪造+ flask session身份伪造 +emoji shell?+xxe绕过黑名单实现任意文件读取 本身可以以任意用户登陆 随意登陆后 Cookie中设置了 token(jwt) 和 session(flask session) token是 jwt 通过 RS256进行的加密签名 session 就是 Python flask session 尝试删除 session 可以发现并不影响 /profile返回当前用户名username 如果希望篡改 username 的值 需要 ==公私钥==(非对称加密) 公钥实现解密 私钥加密 ...

十二月 19, 2024 · 8 分钟 · 3856 字 · J1rrY

1337UP LIVE 2024 国际赛 Web 方向题解

第一次打国际赛 随便打打感觉学到好多东西 Pizza Paradise 发现信息泄露 robots.txt 存在登陆页面 发现存在前端的身份验证 显然是可以利用的 function hashPassword(password) { return CryptoJS.SHA256(password).toString(); } function validate() { const username = document.getElementById("username").value; const password = document.getElementById("password").value; const credentials = getCredentials(); const passwordHash = hashPassword(password); if ( username === credentials.username && passwordHash === credentials.passwordHash ) { return true; } else { alert("Invalid credentials!"); return false; } } 值得注意的是 这里有个什么getCredentials函数 位于 /assets/js/auth.js 可以发现用户名和密码 密码是sha256加密后的 尝试在网上找个解密的 cmd5要付费eee https://iotools.cloud/zh/tool/sha256-decrypt/ ...

十二月 13, 2024 · 4 分钟 · 1751 字 · J1rrY