悠笙の开发日记 - Web
type: channel
link: https://www.iyoroy.cn/tag/Web/
items: 2026软件系统安全赛 - 流量分析traffic_hunt - WriteUp
items: 为博客启用Cloudflare SaaS接入实现国际分流
items: 在TrueNAS上使用Docker安装1Panel

2026软件系统安全赛 - 流量分析traffic_hunt - WriteUp
type: item
date: 2026-03-15T12:20:00+00:00
description: 第一层: Apache Shiro CVE-2016-4437 打开pcapng抓包文件，发现大部分都是HTTP。尝试过滤所有HTTP请求： _ws.col.protocol == "HTTP" 发现前面都是GET扫描。后面有几个POST传递到了相同的路径/favicondemo.ico，打开发现携带Payload： POST /favicondemo.ico HTTP/1.1 ... eSG4ePsiwcRpTl8psR0ZbvQKhUKWCbEYAvU/JyGXXqr9DBZr... 尝试直接Base64解密，发现疑似加密了，无法解密。推测前面还有一部分挂马之类的处理。 尝试过滤所有POST请求： http.request.method == "POST" 发现第5009个HTTP流POST向了/，打开发现： GET / HTTP/1.1 Cookie: rememberMe=u5tKw/P2yG/b6D2LV3ALwGCfb8PsolbgWKkRVXLmAxz/o+0S1XodwNI7QhoBclf1eYgDhRg6oGcg/91vpFMLEozcWHp89rOoNGI+QB5tuxwyl3pqomtWZfydxMpuNmfjFgFOvMwNq9EHwZJ/l5+UrxevXyLxgp0dlgzoAPJVRFAcAEAzZ2BjJRhVSEJTEHqL ... HTTP/1.1 302 Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Mon, 05-Jan-2026 05:54:56 GMT Location: http://10.1.33.69:8080/login ... 等等一系列请求。 根据其JSESSIONID可知是Java后端，根据rememberMe=deleteMe可知这是在尝试利用Apache Shiro的反序列化漏洞（CVE-2016-4437）。前面部分在进行爆破，尝试得到其AES加密的Key。往后翻，可找到： GET / HTTP/1.1 Cookie: rememberMe=39kG6QV4e6yKVk5izql0TAG8PY/lia9KErrRuLjj+bBlO5CC+5Do9W6XnTCNtK5ZfFcS+Cbornnr/Zj0xiyigR228Lh4HCcjOJI7j+yWPDs6PjmaHaDHGte58v+RwwSnxWsgCK1T3UEVesTB0YlR8hGmC6k1skwQEbZpapvpLBa6HdqHQM0OborIzk8GzM4X ... 服务端返回： HTTP/1.1 302 Location: http://10.1.33.69:8080/login ... 没有再Set-Cookie，表明这里已经成功碰撞出了AES密钥。往后还有 GET / HTTP/1.1 Cookie: rememberMe=D5RAhUGqvWLViba9P...h92mxoUt9p Authorization: Basic d2hvYW1p ... 服务端返回： HTTP/1.1 200 ... $$$cm9vdAo=$$$ 对cm9vdAo=进行Base64解密，可得到：root，对Authorization头里的d2hvYW1p解密，可得到whoami，发现这里已经实现了RCE。 随后分别执行并返回了： pwd / ls -la total 21844 drwxr-xr-x 1 root root 4096 Jan 6 03:43 . drwxr-xr-x 1 root root 4096 Jan 6 03:43 .. -rwxr-xr-x 1 root root 0 Jan 6 03:43 .dockerenv drwxr-xr-x 1 root root 4096 Oct 21 2016 bin drwxr-xr-x 2 root root 4096 Sep 12 2016 boot drwxr-xr-x 5 root root 340 Jan 6 03:43 dev drwxr-xr-x 1 root root 4096 Jan 6 03:43 etc drwxr-xr-x 2 root root 4096 Sep 12 2016 home drwxr-xr-x 1 root root 4096 Oct 31 2016 lib drwxr-xr-x 2 root root 4096 Oct 20 2016 lib64 drwxr-xr-x 2 root root 4096 Oct 20 2016 media drwxr-xr-x 2 root root 4096 Oct 20 2016 mnt drwxr-xr-…

为博客启用Cloudflare SaaS接入实现国际分流
type: item
date: 2025-05-15T13:59:00+00:00
description: 虽然Cloudflare CDN在国内访问速度不尽人意，但是用作国际线路的解析内容还是很够用的。然而Cloudflare很早就取消了CNAME接入的方式，因此本文主要讨论通过SaaS接入，因此需要一张信用卡激活Cloudflare SaaS。 准备材料 有效信用卡，需要有卡号、安全码，或者绑定了信用卡的PayPal。若不超过100个自定义主机名的限制则不会产生扣费。 回退域名，和正常访问的域名不能是同一个（Cloudflare接入需要） 正常访问域名 为了实现分大陆、境外地区单独解析，用作正常访问的域名不可以通过Cloudflare接入。 本文正常访问的域名为：www.iyoroy.cn，回退域名为nekonya.cloud。 过程 回退域名接入 注册一个Cloudflare账户，按照官方教程将域名的DNS改到Cloudflare： Plan选择Free计划即可： 按照要求修改NS记录： 等到NS记录生效，即可通过Cloudflare管理回退域DNS。 绑定信用卡，启用SaaS 进入回退域名的Cloudflare控制台，打开左侧SSL/TLS-自定义主机名，点击启用Cloudflare for SaaS： 填入你的信用卡信息并保存。接着激活SaaS计划： 创建回退域的解析、设置自定义主机名 进入左侧DNS-记录，创建一条解析，指向你的源服务器： 此处我的回退域为cname.nekonya.cloud，解析类型是CNAME，但是A、AAAA记录是也是完全可以的。记得要打开Cloudflare代理以使用CF的CDN。 接着，进入左侧SSL/TLS-自定义主机名，回退源填刚刚添加的那条回退域下的解析，即cname.nekonya.cloud： 接着点击添加自定义主机名，并填写需要被访问的域名： 证书验证方法推荐TXT记录，这样可以使用DCV委派（详见下文设置DCV委派章节）。 接着需要验证域名所有权，按照要求填写TXT记录（我已经配置过了，因此创建一条test做演示）： 因为下文要通过DCV验证获取证书，此处并没有添加证书相应记录。若不使用DCV委派，则将证书相关记录也这样设置解析。 {alert type="warning"} 注：在添加证书记录时务必不要刷新整个页面，不然解析记录内容会变。请使用选项内的刷新按钮。 {/alert} 待主机名状态变为有效后即可删除这条（也许是几条）解析。 设置DCV委派 找到下方自定义主机名的 DCV 委派，复制其中提供的解析值，到你的访问域名控制台，添加一条CNAME记录，主机名为_acme-challenge.www（此处和你的访问域名有关，我的访问域名是www.iyoroy.cn因此就是www。若是其他域名如test.iyoroy.cn，就填写_acme-challenge.test），记录值为Cloudflare提供的解析值前面加上你的hostname，即test.iyoroy.cn.xxxxxxx.dcv.cloudflare.com。 设置CNAME解析 进入你的访问域名控制台，为你要访问的域名添加相应解析记录。需要保证境外解析出来的内容是上文设置的回退源： 如果正常，那么就能看到证书状态和域名状态都是有效： 可以看到：，测试时境外已经切换到Cloudflare： 本文使用的DNS管理系统为netcccyun/dnsmgr

在TrueNAS上使用Docker安装1Panel
type: item
date: 2025-03-07T05:18:00+00:00
description: 背景 家里TrueNAS性能剩余，想着部署个web服务。想要装个面板减少点工作量，又考虑到虚拟机性能折损和zfs cache对内存的要求比较大以及NAS本身性能也不好，便打算使用docker部署。再加上1Panel本身也是以docker为介质，二者共同控制TrueNAS宿主机的docker daemon，约等于直接将网站部署到TrueNAS本地并且也便于管理。 分析 {alert type="warning"} 本文默认TrueNAS可以访问dockerhub并且已经配置好了docker daemon {/alert} 环境信息 Storage Pool 存在两个存储池: /mnt/data: 1 x MIRROR | 2 wide | 2.73 TiB | HDD /mnt/systemdata: 1 x DISK | 1 wide | 223.57 GiB | SSD 其中docker数据存储在2号存储池中。 Datasets 存在三个数据集: Storage: 位于data存储池，存放冷数据 DockerData: 位于systemdata存储池，存放容器的持久化存储文件 KaguraiYoRoy: 位于systemdata，用户home文件夹 安装1Panel 使用了moelin/1panel:latest镜像部署，此步骤很多部分都可以参考镜像作者写的README。项目地址： {cloud title="okxlin/docker-1panel" type="github" url="https://github.com/okxlin/docker-1panel" password=""/} 在DockerData数据集创建了一个文件夹专门用于存储1panel数据，即用作容器内/opt/1panel，位于/mnt/systemdata/DockerData/1panel。 持久卷 因为要允许1Panel管理宿主机docker，因此需要映射/var/run/docker.sock和宿主的docker文件夹 映射上文为其创建的数据文件夹 TrueNAS的docker文件夹和一般的Linux位置不一样，一般的Linux位于/var/lib/docker而TrueNAS的位于/mnt/.ix-apps/docker。 环境变量和端口映射 环境变量和镜像作者的设置相同，传入TZ=Asia/Shanghai；端口映射根据需要自行设置即可，容器内端口为10086。 Docker Compose 有了上述信息，编写docker compose就容易许多了。 完整Docker Compose文件如下： services: 1panel: dns: - 223.5.5.5 environment: - TZ=Asia/Shanghai image: moelin/1panel:latest labels: createdBy: Apps ports: - '8085:10086' restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock - /mnt/.ix-apps/docker:/var/lib/docker - /mnt/systemdata/DockerData/1panel/opt:/opt/1panel - /mnt/systemdata/DockerData/1panel/root:/root - /etc/docker:/etc/docker 这里映射/root是因为我需要在容器内运行Git，而Git config存储在/root下； 设置dns是因为1Panel制作环境镜像的时候需要连网下载数据，不指定dns会报错。 安装完成后访问你设置的端口即可。 1Panel基础信息: 默认账户：1panel 默认密码：1panel_password 默认入口：entrance 故障处理 Docker镜像源 实际测试的时候发现如果不设置镜像源，即使配置了Proxy，在安装PHP环境的时候也会报错~~，并且配置了镜像源同时配置了Proxy也会安装失败，不清楚为什么~~ 打开TrueNAS的/etc/docker/daemon.json并添加registry-mirrors： { "data-root": "/mnt/.ix-apps/docker", "default-address-pools": [ { "base": "172.17.0.0/12", "size": 24 } ], "exec-opts": [ "native.cgroupdriver=cgroupfs" ], "iptables": true, "registry-mirrors"…