20241228bootable container试玩

介绍

有完整独立内核的容器,可部署到物理机 支持ISO, raw or qcow2 https://containers.github.io/bootc/intro.html

https://docs.fedoraproject.org/en-US/bootc/getting-started

镜像准备

用podman

打镜像

转ISO

镜像需要转成iSO才能安装到物理机和虚机

配置文件准备

config.json

需要的镜像准备

windows

安装podman desktop后可用UI插件,需要root

对应的命令行

linux

执行镜像转换

ubuntu 24.04上有bug

转镜像报错1

/etc/containers/storage.conf

命令行修改/etc/containers/storage.conf

转镜像报错2

安装到虚机/物理机

安装

同其他系统,略

升级系统

参考

20241221国内minikube初始化

安装minikube

启动minikube

10g有点多电脑内存不够改成4g

查看日志

获取pods

安装插件

查看ingress默认镜像

google_containers/controller->google_containers/nginx-ingress-controller

国内的镜像没这个ingress-nginx/kube-webhook-certgen:v1.4.3@sha256:a320a50cc91bd15fd2d6fa6de58bd98c1bd64b9a6f926ce23a600d87043455a3

替换镜像后开启ingress

查看dashborad默认镜像

替换镜像后开启dashboard

demo

创建deployment

手动加载镜像-方法1

手动加载镜像-方法2

暴露服务并测试

20241214博客临近十年的大礼包——论为什么我的wordpress被黑了

这个博客是2015年创建的,今年是2024年很快就要到10年。当时随便从网上找了个主题就没再管它,这些年一直都是修修补补断断续续的升级,遇到报错就自己修掉。想着只要还能凑合用没大问题就行,到过年的时候放假重新做镜像化或者改成静态页什么的方式弄个新技术栈博客。但计划赶不上变化啊,今天本来要写minikube的记录,但打开博客发现速度巨慢,统计时间总是60s上下

尝试重启了apache2、mysql、甚至整个服务器后依然没用。这时候才怀疑是不是被黑了。

根据curl本地测试结果,和远程效果一致可排除腾讯云网络问题。打开apache2日志没发现明显报错,但下面的日志引起了我的注意

这个域名既不是我网站的,我也没什么印象。实际测了下目前服务器的网络是打不开这个地址的。根据这行日志说的查看comment.php内容

根据相似的base64搜索还能发现

解码后内容是

就是这俩文件超时导致变卡的,删掉这两行代码后速度恢复了。对比上一次备份的文件发现没这个内容,怎么写进去的呢?

看了腾讯云的面板和邮件,没有看到异常

用命令行查询最近修改过的文件如下

可以看到多了一些莫名其妙的插件和cache,打开其中一个php可以看到

它不仅写入了新用户,还给自己加了管理员权限。按这个用户名手动去数据库删掉它

其他php中包含了一个log.zip,但实际内容却是php代码

https://s.threatbook.com/report/file/61c192ad41eb1117320e519941eef22146de5092b1e2bf876ed92cc5336d9bde

可以看到是来自于https://github.com/m7x/cmsmap/的webshell

后面的内容虽然做了层层编码,但最后一行才是执行入口

删了它改成打印文本即可看到原始内容,最后又是套娃

删掉eval可避免实际执行代码

打印结果如下,可以看到是一个webshell,讽刺的是这时候腾讯发来了邮件警告。合着前面的编码都是为了骗过腾讯云的检测啊,简单的套两层编码就能绕过云厂商的检测也是醉了。。。。

安全起见完整文件这里就不放了

再看最开始cache下的文件怎么来的呢?首先怀疑的就是timthumb.php,阅读代码逻辑可发现cache文件夹就是它放缓存文件的地方。

参考https://seclists.org/fulldisclosure/2014/Jun/117可以知道这是个很多年前的rce了

修复方式见https://github.com/GabrielGil/TimThumb/commit/564c00058271147af32da8ac665c00f6a1c4ac29#diff-48eb07ba42e9c840631245fee640f99a5beae7b9e238fe802016332fe21f8593L962

倒霉的是不知道为什么快10年了都没被扫到,最近才被人利用

二进制分析不是我的强项,有没有懂二进制安全的大佬分析下这个文件行为是啥,用在线攻击也扫不出问题

https://s.threatbook.com/report/file/4b51ac4a24dbc5cd015cb3a1055fffb4b45d18935ed8015a0682a4321c8147b8

可私聊我获取原始文件

 

20241207jdk23下springboot+lombok无法运行的问题

背景

群友反馈lombok编译不正常

解决方案

第一个坑

注意到lombok在1.18.36刚支持jdk23

注意到jdk23开始默认关闭了annotation process

https://www.oracle.com/java/technologies/javase/23-relnote-issues.html#:~:text=annotation%20processing%20is%20only%20run%20with%20some%20explicit%20configuration%20of%20annotation%20processing%20or%20with%20an%20explicit%20request%20to%20run%20annotation%20processing%20on%20the%20javac%20command%20line.

所以在pom.xml中的properties需要增加

间接让javac参数包含 -proc:full

如果还不行可增加

手动控制插件版本

第二个坑

注意到 pom.xml=>plugins=>plugin=>artifactId=maven-compiler-plugin=>annotationProcessorPaths 必须指定版本<version>${lombok.version}</version>,否则IDEA生成的.idea/compiler.xml中lombok.jar是unknwon

参考https://youtrack.jetbrains.com/issue/IDEA-342187

若已经出错了,建议修改pom.xml后删除.idea文件夹后重新导入项目

参考

lombok的changelog

https://projectlombok.org/changelog

lombok的issue

https://github.com/projectlombok/lombok/issues/3722

spring官方的修改方式

https://github.com/arnosthavelka/spring-advanced-training/commit/29e47231f94556ff08173d992da9a4384c855816?diff=split&w=0#diff-49d7e9283623afcbf89d5cc8019b80174f5dd3379d51f01764713f5f5e69a992R20

 

20241024copilot workspace试玩

今天得到了copilot workspace的试用权限。。。体验下来发现ai从之前的光标上下文补全进化成了项目级的文件检索、理解、修改能力,甚至有对整个任务的全局规划能力。

基于自然语言的任务规划和修改

基于RAG的文件检索

基于任务规划的执行

基于自然语言的命令生成

联动的是背后的云端IDE提供信息以及文件修改能力,因此看来未来云端IDE大概率会成为主流,由IDE核心提供的上下文信息量要远多于源码。AI作为任务的规划者和执行者。

也许不久的将来人只需要负责纠正计划、review代码,然后用自然语言描述需求就好了?

20241005projector新feature

背景

20241003kasm idea web workspace

20220615自行编译projector-client

拖了好久都没修这两个问题

打包内置静态资源

分离projector中使用的静态资源地址,改成本地打包解决网络加载js、css的速度问题

支持输入框修改token

edge的PWA正常不会记录query string,让projector支持从url鉴权需要动的东西有点多,所以加个输入框支持手动输入重连即可
坑的是kotlin输出$需要用${‘$’}
client版本v1.8.1.12
server版本v1.8.1.12

TODO 动态生成PWA的manifest

org.jetbrains.projector.server.core.websocket.HttpWsServer.Companion#getResourceName
当前实现的是纯静态的服务器,加载一个kotlin编译成的js文件
入口是projector-client-web/src/main/kotlin/org/jetbrains/projector/client/web/Main.kt
org.jetbrains.projector.client.web.Application#start
入口是启动一个状态机做死循环,初始状态是
private var currentState: ClientState = ClientState.UninitializedPage
第一个队列事件是
projector-client-web/src/main/kotlin/org/jetbrains/projector/client/web/state/ClientAction.kt
org.jetbrains.projector.client.web.state.ClientAction.Start
因此处理过程是
org.jetbrains.projector.client.web.state.ClientState.UninitializedPage#consume
下一个状态是WaitingOpening
想让index.html的内容变成ssr,需要从HttpWsServer开始修改成ssr。或者从更前面做拦截把GET请求内置资源的部分转到独立服务器 ,
官方之前给过electron的客户端,说明分离客户端的网页是可行的,只需要把客户端尝试独立部署即可完成各种自定义开发。且无需修改服务器代码,服务器的内置代码仅作为兜底使用即可
TODO 让projector支持从urlpath鉴权规避PWA的限制

TODO

TODO 待继续研究 考虑实现通用的jcef webview显示转发成canvas方案
TODO 再写一个server,接受所有projector client的上报,提供个网页支持动态从服务器获取完成的url并完成本地的端口转发