前言

很久没更新博客了,可能是因为懒吧。花大量连续的时间把知识输出成文章,我可能选择了多学点,不过只有多写文章才能让知识更加体系化 : )

今年上半年经历了很多,有成长有遗憾,这里做个小结记录一下吧。

成长

今年最大的收获就是入门了 java 代码审计,从漏洞复现到漏洞挖掘,角色的转换,学会了思考。下面凭记忆和笔记记录下做过的部分学习上的事。

阅读(Java)

  • 《Java 核心技术 卷 I》
  • 《深入理解 Java 虚拟机》第三版

漏洞复现(Java)

  • Apache Commons Collections 3.1 反序列化漏洞
1
2
3
4
https://www.iswin.org/2015/11/13/Apache-CommonsCollections-Deserialized-Vulnerability/
https://p0sec.net/index.php/archives/121/
https://blog.csdn.net/Dream_Weave/article/details/84183247
https://xz.aliyun.com/t/4558#toc-0
  • fastjson 系列漏洞
  • XXE DocumentBuilderFactory 解析流程
1
2
3
http://www.lmxspace.com/2019/10/31/Java-XXE-%E6%80%BB%E7%BB%93/
https://github.com/LeadroyaL/java-xxe-defense-demo
https://xz.aliyun.com/t/7105
  • Confluence 系列漏洞(CVE-2019-3394、CVE-2019-3396、CVE-2019-3398)
1
2
3
4
5
6
7
8
9
https://jira.atlassian.com/browse/CONFSERVER-58734
https://paper.seebug.org/1025/

https://jira.atlassian.com/browse/CONFSERVER-57974
https://paper.seebug.org/884/
https://paper.seebug.org/893/

https://confluence.atlassian.com/doc/confluence-security-advisory-2019-04-17-968660855.html
https://lucifaer.com/2019/04/19/Confluence%20%E8%B7%AF%E5%BE%84%E7%A9%BF%E8%B6%8A%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%EF%BC%88CVE-2019-3398%EF%BC%89/
  • Apache Solr Velocity 模板注入
1
2
3
https://gist.github.com/s00py/a1ba36a3689fa13759ff910e179fc133
https://issues.apache.org/jira/secure/attachment/12986890/SOLR-13971.patch
https://paper.seebug.org/1107/
  • Jenkins RCE CVE-2018-1000861
1
2
3
4
5
6
7
8
https://devco.re/blog/2019/01/16/hacking-Jenkins-part1-play-with-dynamic-routing/
https://devco.re/blog/2019/02/19/hacking-Jenkins-part2-abusing-meta-programming-for-unauthenticated-RCE/
https://lucifaer.com/2019/03/04/Jenkins%20RCE%E5%88%86%E6%9E%90%EF%BC%88CVE-2018-1000861%E5%88%86%E6%9E%90%EF%BC%89/
https://xz.aliyun.com/t/6361#toc-0
https://xz.aliyun.com/t/3912#toc-8
https://0xdf.gitlab.io/2019/02/27/playing-with-jenkins-rce-vulnerability.html
http://blog.nsfocus.net/jenkins-routing-resolution-and-sandbox-bypass-vulnerability-analysis-report/
https://jenkins.io/security/advisory/2018-12-05/#SECURITY-595
  • Apache Tomcat ajp CNVD-2020-10487
1
2
3
4
https://www.chaitin.cn/zh/ghostcat
https://www.cnvd.org.cn/flaw/show/CNVD-2020-10487
https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ
https://tomcat.apache.org/tomcat-9.0-doc/changelog.html
  • Apache Dubbo Http Deser CVE-2019-17564
1
2
3
4
5
https://www.mail-archive.com/dev@dubbo.apache.org/msg06225.html
https://www.anquanke.com/post/id/198754
https://github.com/apache/dubbo-samples
https://paper.seebug.org/1128/
http://www.lmxspace.com/2020/02/16/Apache-Dubbo%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%EF%BC%88CVE-2019-17564%EF%BC%89/
  • Jackson CVE-2020-8840
1
2
3
4
5
6
https://github.com/FasterXML/jackson-databind/issues/2620#
https://github.com/FasterXML/jackson-databind/commit/914e7c9f2cb8ce66724bf26a72adc7e958992497
https://mp.weixin.qq.com/s/SfNEoAvvaTj0XMC5ktvCcw
https://threedr3am.github.io/2020/01/29/Fastjson%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96RCE%E6%A0%B8%E5%BF%83-%E5%9B%9B%E4%B8%AA%E5%85%B3%E9%94%AE%E7%82%B9%E5%88%86%E6%9E%90/
http://llfam.cn/2019/11/06/fastjson_1_2_24/
https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062
  • Dubbo Provider RCE CVE-2020-1948
1
2
3
4
5
6
7
https://www.mail-archive.com/dev@dubbo.apache.org/msg06544.html
https://www.cnblogs.com/ph4nt0mer/p/13185549.html
https://xlab.tencent.com/cn/2020/06/23/xlab-20-001/
https://mp.weixin.qq.com/s/jKM-Z2BTFfk_Ro1rJAxg5w
http://rui0.cn/archives/1338
https://paper.seebug.org/1131/
http://m.vlambda.com/wz_7im7Go5Qlbc.html
  • Nexus Repostiory Manager 3 系列(CVE-2020-10204、CVE-2019-7238)
1
2
3
4
5
https://help.sonatype.com/repomanager3/installation
https://www.cnblogs.com/seve/p/10982603.html
https://github.com/sonatype/nexus-public
https://paper.seebug.org/1166/
https://www.anquanke.com/post/id/171116
  • Apache ShardingShpere Yaml RCE
1
https://www.anquanke.com/post/id/200554
  • Spring Messaging SPEL Injection
1
2
3
https://laworigin.github.io/2019/04/09/Spring-messaging-SPEL-Injection/
https://paper.seebug.org/562/
https://github.com/CaledoniaProject/CVE-2018-1270/
  • 可能还有一些不记得了。。

漏洞挖掘

  • Discuz 存储型 XSS 漏洞
  • 通达 OA 前台 SQL 注入漏洞
  • fastjson Gadget
  • nacos Yaml 反序列化漏洞
  • cat XXS 漏洞
  • cat XXE 漏洞
  • cat 跨目录漏洞
  • cat jexl 表达式 RCE 漏洞

工具学习

  • ysoserial(没看完)
  • openrasp(过了一遍整体实现思路,检测逻辑没细看)
  • gadgetinspector(没看完)
  • asm 库

实习

  • 阿里巴巴 - 归零安全实验室 2020.06 - 2020.08

500

500 是以前院科协的办公场地,在那里我认识了大学最感恩遇到的一帮小伙伴 @rt、@car0ta(&老马)、@c1ick。我们一起在 500 学习聊天吃饭,一起租共享汽车满西安到处玩,我拐骗他们学 web,教他们代码审计,我们一起在图书馆研讨室分享技术,一起翘课学技术。

从去年 12 月到今年 8 月,我们一起以 500 团队名义参加了全国信息安全竞赛作品赛,出发点很简单,就是想拿个第一然后保研。我们一起编写 php 扩展,一起阅读 prvd 代码,因为疫情原因不开学,我们天天开腾讯会议推进项目,除了睡觉就是做项目。这是我第一次带领团队做事,也是第一次写了 70 几页的论文,也是第一次在各种角度去认真思考一件事。虽然最终拿的是二等奖,但是中间过程的收获是无法代替的,这次经历的意义也绝不在结果。如果不是你们,可能项目都无法完成。

项目的名字叫DVD - PHP 运行时漏洞挖掘系统,提供了模式一、模式二、和 UFU 漏洞检测模块。

模式一基于污点分析,传统的做法,比如 prvd 的设计仅关注于 source 点和 sink 点的运行时数据,而忽略了中间过程的处理操作。比如 prvd 认为 php 内置的过滤函数如 htmlspecialchars() 为 sanitizer 点,污点传递到此处就被清除了,而实际上该函数可能只是过滤了 XSS,甚至后面仍然有可能导致 XSS,而如果只是简单的清除污点,相当于放大了该函数的实际过滤效果,如果后面的 sink 漏洞类型不是 XSS 则会导致漏报。因此我们将中间过程的部分函数进行了 hook,任何会改变字符串值的函数我们都会劫持,劫持的具体思路可以参考 xmark 扩展,然后通过基于字符串变迁链的思路收集中间路径,但实际上该路径并不能做到绝对的准确,如何在污点扩展开来收集到每条详细且准确的路径是一个问题,因此我们只是提出了一种解决方案。那中间路径有什么用,比如中间可能经过 str_replace() 函数,这个函数可能是会被用于过滤的,也可能只是简单的字符串替换,那我们 hook 到这个函数后,会给入参添加不同类型的攻击向量,然后 fuzz 该函数的实际过滤效果。我们会在建立字符串变迁链的全局节点时,为每个节点建立一个数组,里面放了不同漏洞对应的标识,如果该节点会导致某类漏洞,则该类漏洞对应的标识为 1。假设经过 fuzz 了 str_replace() 函数后,XSS 漏洞的向量没通过,则会在建立新节点时,将该节点中的 XSS 漏洞标识置为 0,但是污点不会去除。实际上就是污点全传播,然后将中间过程中的过滤效果随节点一起传播,最终在 sink 点检测可能导致的漏洞类型和 sink 类型是否匹配来判断是否存在漏洞。但是模式一仍然有很大的提升空间,比如如何拿到污点扩展开后的每条详细路径,如果 fuzz 中间过程的整体过滤效果,我们这里只是对中间过程单个 filter 进行 fuzz,那有可能是多个函数一起调用用于处理某一类漏洞呢?

模式二基于 iast 的思路设计,iast 的优势就是为 source 点添加攻击向量后,只用在 sink 点观测攻击向量的完整性即可,相当于观测中间路径过滤效果的累加,不过缺点就是存在脏数据,可能会导致覆盖率变低,比如 if ($action = ‘edit’) 这样的分支就会因为存在脏数据无法进入了。我们为模式二的 fuzz 设计了 3 种策略,第一种是每次 fuzz 单个 source 点,这样覆盖率会高一点,但是时间会比较久,第二种是每次 fuzz 全部 source 点,这样覆盖率会低一点,时间会较快。第三种就是基于模式一提出的基于字符串变迁链的污点路径收集方案,回溯路径后仅对正常请求进入 sink 点的 source 点进行 fuzz。

最后单独集成的 UFU 漏洞检测模块,实际上就可以简单理解成文件上传漏洞的检测,这是我们做到一半,看到了一篇顶会论文,感觉可以简单实现个 demo,然后用顶会论文作为参考为论文加点亮点,具体思路参考下面的论文引用[13]。

因为其他原因,目前无法完全分享项目的细节,下面不完全记录一下我们参考过的各种文章。

论文引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[1] 《2020 W3Techs Web 建站语言调查报告》[R]. W3Techs,2020.
[2] 《2019 年上半年网络安全态势报告》[R]. 深信服千里目安全实验室, 2019.
[3] 《The state of open source vulnerabilities 2020》[R]. WhiteSource, 2020.
[4] prvd: https://github.com/fate0/prvd
[5] Sam Thomas. File Operation Included Unserialization via the "phar://" Stream Wrapper[C]. Black Hat. 2018.
[6] 邱子谨, 辛阳. PHP 源码静态审计工具的分析与研究[C]. 北京邮电大学, 2018.
[7] Phithon. PHP 动态特性的捕捉与逃逸[C]. KCon. 2019.
[8] 任玉柱, 张有为, 艾成炜. 污点分析技术研究综述[J]. 计算机应用,2019,39(8):2302 -2309.
[9] taint: https://github.com/laruence/taint
[10] 陈雷, 黄桃, 李长林 etc. PHP7 底层设计与源码实现[M]. 北京: 机械工业出版社. 2018.
[11] 秦朋, PHP7 内核设计[M]. 北京: 电子工业出版社. 2017.
[12] 默安科技, 一文洞悉DAST、SAST、IAST——Web应用安全测试技术对比浅谈[R]. 安全牛, 2019.
[13] Taekjin Lee, Secongil Wi, Suyoung Lee, Sooel Son. FUSE: Finding File Upload Bugs via Penetration Testing[C]. The Network and Distributed System Security Symposium. 2020.
[14] PHP Documentation: https://www.php.net/docs.php

其他(记不全了。。)

1
2
3
4
5
6
7
8
9
10
11
https://www.php.cn/php-weizijiaocheng-392678.html
http://p0desta.com/2019/03/03/%E5%88%9D%E6%8E%A2php%E6%8B%93%E5%B1%95%E5%B1%82%E9%9D%A2(%E4%B8%80)/
http://p0desta.com/2019/03/08/%E5%88%9D%E6%8E%A2php%E6%89%A9%E5%B1%95%E5%B1%82%E9%9D%A2(%E4%BA%8C)/
http://p0desta.com/2019/03/12/%E5%88%9D%E6%8E%A2php%E6%89%A9%E5%B1%95%E5%B1%82%E9%9D%A2(%E4%B8%89)/
https://github.com/laruence/taint
https://www.jianshu.com/p/c6dea66c54f3
https://github.com/fate0/xmark
https://github.com/fate0/prvd
https://www.php.cn/php-weizijiaocheng-392678.html
https://github.com/pangudashu/php7-internal
https://www.anquanke.com/post/id/208353

总结

虽然很可惜没能保研,但是我很享受做项目的过程,也很享受当 team leader 的过程,很享受 bb 的过程。整个过程你们的成长我都是能看到的,思维上的转变,技术上的提升,在很多方面都比我厉害很多了,这点上我还是挺有感触的。项目结束也代表上个阶段已经结束,虽然有遗憾,但是我们仍然要去面对新的挑战。大家都去考研了,我也要开始找工作了,希望大家都能上岸 : )

我就不说太多煽情的话了,遇见你们,感恩。