宗旨

办这个星球已有5年多,这一页的宗旨、规则基本都是创圈之初就定下的。2022年我修改了一些细节,但大体的规则并没有改变,希望所有新加入的同学在发帖前都看一下这页内容,避免因为发表错误的帖子和评论被删帖、禁言甚至拉黑。

创建星球之初,我脑子里有几句话一直奉为圭臬:

  1. 知识付费的时代,赚钱不可耻,但不能辜负别人对你的信任。这是最重要的,做圈子实际上是在消耗我的品牌力,我如果不用心做,不会有其他人帮我做。
  2. 社区性质大于课堂性质。我还记得最早我看到知识星球的两种付费模式,年付和永久,这两个选项我犹豫了很久,还是选择了永久。从选择了这个选项的那一刻起,就奠定了这个圈子的发展目标——更重社区。如果我选择一年,当然我只需要给大家服务一年时间,一年以后好聚好散,我也不再需要继续提供服务,但可能我精心维护了一年的社区也就因为付费期的终止而解散了。我更希望『代码审计』里的小伙伴是我终生的小伙伴,大家爱上同一门技术不容易,特别是在一轮红(乌)日(云)落下以后,那些散布在夜空中的星星,聚才能更像太阳。
  3. 宁缺毋滥,做高质量的代码审计学习分享。我很少去鱼龙混杂的群或社区里宣传我们圈子,只在我的微博和博客里挂了二维码,我觉得这是一个比较正确的决定,因为真正沉下心读文章的人才是我们最缺的一群人。缺,安全圈子缺人才,缺内容,却又滥,三季人泛滥,吹牛又不干实事的人泛滥。好在『代码审计』圈子里的小伙伴,有虚心的大牛,有刚入行的新手,但大家的目标都是一样的,也许是¥199的门槛确实筛选掉了一些我们不喜欢的人。
  4. 夏虫不可以语冰,井蛙不可以语海,不要和不懂的人争论,静下心搞研究。这一两年微博上安全圈子和其他圈子的一些民科吵过几次架,让我不禁反思,争吵的意义在哪里?为了说服对方,说服是否真的有意义?我希望圈子里的小伙伴,对于自己熟悉的技术,可以和同样熟悉的人交流观点,甚至辩论;但对于自己不熟悉的领域,不要妄加评议,虚心听听别人的观点,至少进行一些研究,让自己了解这个领域以后再发表观点,不要争吵。
  5. 严守法律当然是底线。这些年互联网爆发过多次严重的漏洞,比如log4j、s2-045等,当时我严格禁止在圈子里探讨相关的话题,我不希望交流技术最后变成交换违法犯罪的心得。虽然很多人发的技术分析、POC等真的只是为了交流,但难免被恶意利用,安全知识的交流的合法性原本就很难界定,我们尽量做到避嫌。另外,对于自己,不该看的东西不看,不该赚的钱不碰,做到问心无愧。

规则

没有规矩不成方圆,以下是『代码审计』星球5年多积累的一些规则:

  • 法律是底线,不用多说了。讨论黑产、各种灰产、擦边球等(国内国外都不行)内容的帖子一律删除,并警告发帖人,视情况禁言。注意,直接把目标站链接丢出来、直接丢源码出来、直接问某某CMS有什么漏洞,这类帖子一律视为黑产相关,没有为什么,莫须有。
  • 提问类型的帖子,我可能会给代码审计无关的、低质量的问题增加“交流讨论”标签,这类帖子不会出现在星球帖子列表中,只有查看者点击这个特殊标签的时候才会显示。比如:
    • “MySQL注入过滤了outfile还能不能写shell?” —— 这属于与代码审计无关且质量不高的提问。
    • “下图是XXCTF中的一段代码,通过id参数可以注入,想通过mysql写shell,但代码里safe函数那个正则绕不过,大家有没有思路?” —— 这个问题虽然也是问MySQL怎么写shell,但给出了具体代码和自己的思考,属于代码审计相关。
    • 有一些界定不明显的问题,如果我认为对其他成员有帮助、有干货、有自己的思考,我也不会增加特殊标签。
    • 提问时最好带上截图,并且截全一点,有的人发截图的时候截一半,关键信息没截到,这种问题也没什么意义。
    • 提问以前请搜索历史帖子,有没有相似问题。
    • 星友可以使用“提问”功能提问,但我比较建议直接将问题以帖子的形式发出来,这样如果星主没时间回答问题,其他星友也可以帮忙解答。
  • 分享类型的帖子,允许所有类型的分享。分享类型的帖子里,写出一个或多个你觉得有价值的知识点,甚至你分享完你的知识以后,同样可以提出相关问题,但这个帖子还是算分享类型。
    • 不要觉得自己分享的东西太low,毕竟圈子里的人闻道有先后、事业有专攻,每个人都有不知道的知识
    • 文字太长或图片很多,可以使用一些文本编辑软件,推荐typora和mweb,把你的东西用markdown写出来,导出成pdf作为附件上传到圈子里,这样大家看起来都方便的多。
    • 知识点不论大小,小到可以是php某个函数可能造成的某种危害,大到可以是xxx框架的代码分析连载。
  • 鼓励自己搭建测试环境(如Vulhub)进行漏洞测试,不建议找互联网案例测试漏洞,即使是经过厂商同意公开的漏洞,敏感信息也一定要打码。
  • 在一些重大安全事件(如Log4j类型的事件)期间,在外部没有其他人发表过漏洞相关POC前,圈子里也不允许发表POC,漏洞分析也要考虑清楚再发表,身边已有发分析被请喝茶的事件。
  • 圈子里发表的任何内容,在没有得到作者允许的情况下,严禁对外转载,我不希望有不愉快的事情发生。
  • 帖子不要乱加标签,如果你没用十足把握说自己的帖子加个什么标签最好,那就不要加,管理员是可以后续再给帖子补标签的。

一些案例

很多新人不知道怎么提问就不敢提问,我找了几个案例,说一下这些提问要注意哪些问题。

今天面试被问到一个问题:sqli时sleep()能不能写shell?当时回答是没有想到就回答了select sleep(5),'<?php ... ?>' into outfile '/var/www/1.txt';后来试了试into outfile还有limit+lines terminated by,会报错。师傅们,sleep可以写shell吗?

这个帖子就有一个问题,一是跟代码审计关系不大,但关键问题不在这里。作者说“后来试了试into outfile还有limit+lines terminated by,会报错”,报什么错并没有说清楚,也没有截图。这是一个比较典型的问题,很多人遇到错误会来提问,但提问的时候只说“报错”,错误信息是什么、错误号是多少都不说。

甚至还有更甚者,就只说“遇到xxx问题,试了试xxxx发现不行,怎么办”。“不行”这个词太宽泛了,不行是指报错了,还是指运行后没结果,还是指运行不起来,难道还要回答的人来问你吗?

有个疑问,如果使用预编译防注入后,那么还有必要过滤单双引号等危险字符吗?

这个帖子的问题,是问的太笼统了。我希望大家问问题都能具体到一个点,最好给出事例代码。比如这里问预编译是否还能注入,你应该给出你是如何预编译的,具体代码。因为正常使用预编译可以防御注入,但错误使用预编译的方法,还有一些无法预编译的位置,是不能防御sql注入的,如果你不给出具体代码,很难判断。当然,如果你只是想知道“预编译后还需不需要过滤引号”,那答案肯定是不需要,但不代表不能注入,那么这个问题也就没太大意义了。

下图这段代码有解吗?

这种类型的帖子我看到就特别想删,很典型的伸手党。你问这个问题不亚于问xxxcms有没有0day,这样的问题我甚至可能判断为黑产,因为你给的这段代码就可能来自某个cms。如果你真的想知道某段代码有没有漏洞,请你先自己分析这段代码,并写下你自己的想法,比如你觉得哪里可能存在漏洞,但为什么你没有挖出来,是因为条件绕不过还是找不到输入点,你把这些想法写下来,让大家和你一块思考,而不是伸出手来问别人要答案。

请问PHP代码审计有什么好的动态调试 分析工具吗?

这个帖子的问题在于,提问以前没有搜索,显然以前已经有多个人问过动态调试相关的问题了,直接搜“动态调试”就能看到。

再举几个正面的例子,小m这个帖子就特别好:

image

你想问大家是否有某某的技巧,那么就先分享自己收藏的相关技巧,交换思路。只有这样的分析才能持久嘛。

这个帖子,作者在评论里就做到了提出问题并说出自己对代码的解读,并且在成功解出答案以后分享出来:

image

鼓励大家提问,如果能够独立解决问题就更好,解决后分享出来让更多人受益。