第七届浙江省省赛初赛 Web Write-upEzjsindex.js
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061const express = require('express');const _ = require('lodash');const fs = require('fs');const app = express();app.use(express.json());// 存储笔记的对象const notes = {};// 创建新笔记app.post('/api/notes', (req, res) => { const noteId = req.body.id; const noteData = req.body; if (!noteId) ...
Web Security
未读Java反射-RCE
Java安全的开始要从反射开始.反射是指在程序运行时 , 对于任何一个类 , 都能知道这个类的所有属性和方法 , 对于任何一个实例对象 , 都能调用该对象的任何一个属性和方法 .
能拿到这个类,你就可以获取和调用了解关于这个类的任何信息.
类 对象 Class对象class对象就是由Class类创建的对象,只是这个创建过程不是由用户主动创建的,而是由JVM自动实现的。JVM会为项目中每一个类(不论是JDK自带的类、第三方jar包的类、还是自己编写的类)创建一个class对象,用来保存与这个类相关的信息。class对象只与类有关,与对象无关。我们从一张图来看它们之间的关系。
获得对象类
obj.getClass()
obj.forName(className)
className.class
查找类方法
className.getMethod(functionName , [parameterTypes.class])
className.getMethods()
className.getDeclaredMethods()
className.getCon ...
Web Security
未读URLDNS链原理最简单清晰的Payload,调用hashcode()方法中的getHostAddress()方法来完成一次DNS查询.
1234567891011import java.net.MalformedURLException;import java.net.URL;public class urldns { public static void main(String[] args) throws MalformedURLException { // 调用URL类的hashCode方法发起DNS请求 URL url = new URL("http://urldns.yaocku.dnslog.cn"); url.hashCode(); }}
调试过程
1234567public synchronized int hashCode() { if (hashCode != -1) return hashCo ...
Red Team
未读sqlmap基本使用sqlmap 是一种开源渗透测试工具,可自动执行检测和利用 SQL 注入缺陷以及接管数据库服务器的过程。它配备了一个强大的检测引擎、终极渗透测试器的许多利基功能以及广泛的开关,从数据库指纹识别、从数据库获取数据,到访问底层文件系统和通过带外连接在操作系统上执行命令.
参数列表启动命令1python sqlmap.py -u <attack_url> <options>
从URL加载攻击目标
-u参数可以快速指定要进行sql注入测试的url,携带参数.适用于简单的GET参数和POST参数请求注入点.sqlmap会自动识别可能存在的注入点,也可以从URL中在参数后附加*来指定注入参数
-p用于指定需要测试的参数,且不受--level限制
-–data 指定使用进行传输的POST参数
--cookie 用于指定cookie,往往用于需要鉴权的注入点
从文件中加载HTTP请求(推荐)
-r参数可以从文件中加载HTTP请求,并使用*来指定自定义注入点.
1python sqlmap.py -r http_payload/1.txt
http_ ...
Vulnerability Reproduction
未读CVE-2024-49362影响版本joplin 3.0版本
原理带有 data-from-md 属性的<a href=xxx> 链接会被直接解析.
12345678910111213141516document.addEventListener('click', (event) => { const anchor = webviewLib.getParentAnchorElement(event.target); if (!anchor) return; if (!anchor.hasAttribute('data-from-md')) { if (webviewLib.handleInternalLink(event, anchor)) return; event.preventDefault(); if (anchor.getAttribute('href ...
Red Team
未读Cobalt Strike & 渗透入门CS运行配置资源:
阿里云ECS一台Ubuntu(2C 2G)
Cobalt Strike 4.2一份
安装Java环境
12sudo apt updatesudo apt install openjdk-11-jre -y
配置Systemd服务/etc/systemd/system/cobaltstrike.service
12345678910111213[Unit]Description=Cobalt Strike TeamServerAfter=network.target[Service]Type=simpleWorkingDirectory=<工作目录>ExecStart=<工作目录>/teamserver <ip> <password>Restart=on-failure RestartSec=10[Install]WantedBy=multi-user.target
重载service内核,加载新服务配置文件
1sudo systemctl daemon-relo ...
Vulnerability Reproduction
未读CVE-2024-21096复现影响版本MySQL 8.0.0至8.0.36
原理mysqldump是MySQL的一个组件,可以用于将数据库导出到一个sql文件中。
1mysqldump -u username -p database_name > dumpfile.sql
其中username是用户名,database_name是待导出的数据库名称,导出之后得到dumpfile.sql文件。
导出后的SQL文件可以使用mysql命令执行导入操作,比如:
1mysql -u username -p database_name < /path/to/dumpfile.sql
导出的文件没有对MySQL的版本号做校验,导致可以注入CRLF行并插入\!来执行命令.
漏洞源码com_shell函数提供了解析命令的功能:
1234567891011121314151617181920212223242526272829static int com_shell(String *buffer [[maybe_unused]], char *li ...
CTF Basic
未读PHP反序列化由浅入深序列化和反序列化有时需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化)。这种将原本的数据通过某种手段进行”压缩”,并且按照一定的格式存储的过程就可以称之为序列化,而将压缩后的数据还原为原有的对象方式则是反序列化。
漏洞的成因
PHP 反序列化漏洞又叫做 PHP 对象注入漏洞,是因为程序对输入数据处理不当导致的.
反序列化漏洞的成因在于代码中的 unserialize()接收的参数可控,而可能在对应的类中又使用了危险方法,最终导致了危险方法的输入可控,可能会导致远程代码执行(RCE),本地文件包含(LFI),任意文件读取等问题。
下面我们来了解一下一切的开始:序列化与反序列化函数。
序列化与反序列化函数序列化函数:serialize(),用于将一个类序列化为一个二进制字符串,可用于网络传输后保留类的完整性
反序列化函数:unserialize(),用于将一个二进制字符串反序列化为已有的类,并会根据预定义的魔术方法自动进行操作.
在常见的CTF题目中,unserialize( ...
CTF Basic
未读Pickle 反序列化漏洞小结Pickle是一种栈语言,有不同的编写方式,基于一个轻量的PVM(Pickle Virtual Machine)进行工作.
序列化与反序列化pickle模块在序列化和反序列化时使用__reduce__方法来进行反序列化,在定义模块时取消定义即可.
pickle.dump()
pickle.load()
pickle.dumps()
pickle.loads()
其中dump方法用于把Python对象转换为可传输的二进制文件或字符串(dumps);load方法用于从文件或字符串(loads)中加载序列化的二进制Python对象.
漏洞的成因Pickle在反序列化时会自动调用对象的__reduce__方法从而导致远程代码执行及其他代码,常见利用有反弹shell,变量覆盖等.
Pickle协议版本当前用于 pickling 的协议共有 5 种。使用的协议版本越高,读取生成的 pickle 所需的 Python 版本就要越新。
v0 版协议是原始的“人类可读”协议,并且向后兼容早期版本的 Python。
v1 版协议是较早的二进制格式,它也与早期版本的 Py ...