NeSE三月升级赛WriteUp (Web)

又是一个XSS题,Docker里起了一个Web一个Bot一个Redis,Web使用Java写的,用的Eclipse的Jetty服务器,上层是Micronaut微服务框架来的,整体打包成一个JAR。

阅读全文

HXPCTF 2023 Web复现

valentine

Web签到题,考的是Node.js的ejs模板库命令执行。首先给出源码,里面的库版本都是最新的:

阅读全文

NeSE十二月升级赛WriteUp (Web)

一个硬核的XSS题,收获相当大(还得感谢CrumbledWall师傅点拨了我几次)

开局给了后端的源码,能看见里面用了腾讯的COS对象存储,可以上传文件到上面,docker-compose.yml里面还有一个名为的bot的服务但没有给出源码,能看出来后端有个接口会去连接这个bot

阅读全文

UCORE Lab 2

UCORE的段页式内存布局

从UCORE启动到物理内存管理的初始化结束,一共加载了3次GDT,实现了由单纯的分段到段页式内存管理的布局。

在内核链接脚本中,内核的加载地址由Lab1中的0x100000改为了0xC0100000

1
2
3
4
5
6
7
8
9
10
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(kern_entry)

SECTIONS {
/* Load the kernel at this address: "." means the current address */
. = 0xC0100000;

......
}
阅读全文

N1CTF 2022 Web 复现

Easy_S2

这题主要考察的是Struts2的路径匹配规则以及Java Web中的Security-Constraint安全约束选项。题目附件是一个.war包,将其解压之后可以直接通过Tomcat部署,代码实现也很简单。通过web.xml可以了解到整个网站的路由都被导向了中间Struts2,同时有两条安全约束项:

阅读全文

Node.js require() RCE复现

前言

前阵子参加了Balsn CTF 2022,有道Node.js的题目叫2linenodejs,个人觉得思路十分巧妙,遂进行了完整的复现,收获颇多。下面是整个复现的过程。

题目代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// server.js
process.stdin.setEncoding('utf-8');
process.stdin.on('readable', () => {
try{
console.log('HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: Close\n');
const json = process.stdin.read().match(/\?(.*?)\ /)?.[1],
obj = JSON.parse(json);
console.log(`JSON: ${json}, Object:`, require('./index')(obj, {}));
}catch{
require('./usage')
}finally{
process.exit();
}
});

// index.js
module.exports=(O,o) => (Object.entries(O).forEach(([K,V])=>Object.entries(V).forEach(([k,v])=>(o[K]=o[K]||{},o[K][k]=v))), o);

// usage.js
console.log('Validate your JSON with <a href="/?{}">query</a>');
阅读全文

ByteCTF 2022 WriteUp

感觉可以抽个时间专门再学学SQL注入了…

Web

easy_grafana

打开题目,Grafana v8.2.6,经典CVE-2021-43798,但是原始的POC没法用,返回400,后来查了一下发现可能是中间件对URL做了标准化导致没法打,在POC中添加#可以顺利绕过。

阅读全文