碎碎念——今夕何年

碎碎念

最近一个月发生了很多有趣的事情,去了一趟上海、北京,算是乡下人进城。在上海,我见到了高三之后8年未见的故友狒狒。这种带着久远时间跨度重逢的感觉很奇妙,interesting。这八年来我们平时联系不多,我也不是那种喜欢维系关系的人。不知如何描述,可能能和我玩得好的,都是抽象乐子人,见面之后很快就熟络起来。八年啊,三千天呢,多少个小时就懒得算了,大概意思就是很久。都好像没有什么太大变化,也不知道该有什么变化,没有太大变化那就是还年轻。算是好事吧。

在北京,想看个故宫和天安门的,果真是门都没有,忘了预约这茬,doctor陈也是大马虎王。不过也还好,隔着十万八千里看到了天安门的侧脸,那也算看到,在景山上俯瞰故宫,那也算看到故宫了——不虚此行。在北京周末和同事聚会,探讨七七八八各种奇奇怪怪的问题,感慨良多,我感觉总归就是 “时来天地皆同力,运去英雄不自由”,我们都明白很多大道理,可是到自己的时候却总是做不好,时间过去再回首,都在酒中,喝了两斤的啤酒已经是我过去好几年的喝酒份额了,两斤!!

心血来潮翻了翻斗鱼,大学时候看的好多主播已经不播了。

最近CSGO玩得比较多,打出的高光操作也存到本地了——可能以后再也打不出了。

从数字上看,自己好像已经很老了。样貌还好,这是值得庆幸的事情,心态就更不用说了,我虽然时不时感慨光阴似箭日月如梭how time flies,但至死是少年,虽然,素质极差。

CVE-2023-3224

这个是nuxt.js的洞,有点self RCE意思,简单说就是只有在开发者dev模式下才能触发。

问题出在这个文件:https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/components/test-component-wrapper.ts

这已经是修复过后的代码,原来的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

import { parseURL } from 'ufo'
import { defineComponent, h } from 'vue'
import { parseQuery } from 'vue-router'

export default (url:string) => defineComponent({
name: 'NuxtTestComponentWrapper',

async setup (props, { attrs }) {
const query = parseQuery(parseURL(url).search)
const urlProps = query.props ? JSON.parse(query.props as string) : {}
const comp = await import(/* @vite-ignore */ query.path as string).then(r => r.default)
return () => [
h('div', 'Component Test Wrapper for ' + query.path),
h('div', { id: 'nuxt-component-root' }, [
h(comp, { ...attrs, ...props, ...urlProps })
])
]
}
})

await import(/* @vite-ignore */ query.path as string) 从用户请求参数取path参数,然后直接传递给import,导致RCE。

这里payload可以 path=data:text/javascript,console.log("hello!"); , import还能这样利用,也是长见识了。至于命令执行,就是typescript执行命令的操作了,把console.log替换就完事了。