作者:坏蛋
链接:https://zhuanlan.zhihu.com/p/24472674
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、前言

php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞。如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程。
入门php代码审计实际并无什么门槛要求,只需要理解基础的php语法规则,以及理解各种类型漏洞的出现原因则可以开始尝试审计php源代码。通常的漏洞演示中sql语句会直接传入php自带的函数传入数据库执行,但在实际的软件项目中,通常以面向对象的思想进行编程,则会涉及各种形式的封装,调用,以及不同风格的框架,在这个条件下,只需要保持耐心跟踪其调用过程即可。

另外关于代码审计的思路而言,一种是通读代码逐行分析逻辑,另外一种是通过正则快速定位一些问题函数,再反向定位调用过程。这两种方式也对应代码审计的工具主流的实现思路,一种是通过语法分析的过程发现漏洞,另一者是定位问题函数实现。

不管什么方式,重点还是实战阅读代码,累积经验。

以上为个人观点,谨慎吸收。



二、基础知识要求

PHP语法

主流漏洞原理



三、入门阅读 & 参考

代码审计入门总结

PHP: PHP 手册 - Manual

代码审计:企业级Web代码安全架构



四、审计实战

基础系列
基础系列中的4篇文章基本是通过一些直观的小案例来让人理解从用户的交互到代码的执行这个过程中漏洞是以什么形式存在的,又是如何被利用的,初学者阅读这几篇文章可以让人更加快速的理解代码审计的过程,以及基本的审计思路。
【代码审计】常见WEB漏洞原理分析及利用方式--SQL注入篇

【代码审计】常见WEB漏洞代码层原理分析及利用方式--文件操作漏洞篇

代码审计】常见WEB漏洞代码层原理分析及利用方式之Php代码执行篇

【代码审计】常见WEB漏洞代码层原理分析及利用方式--文件操作


高级系列


高级系列的几篇其实就代码审计的整个大的领域来说并不算高级,但是都有其特色,并且大部分是从真实的软件项目开始讲解,可以让初学者理解实战中可能会遇到的一些问题,以及实战中的思考过程。

代码审计之绕过后台权限限制,继续sql注入

代码审计之突破路径限制删除文件

代码审计之任意用户密码找回漏洞

代码审计之伪全局机制使用不当导致的致命后果

代码审计之绕过addslashes总结


mel 和 bees系列都是指定了对某个实际软件项目的审计,初学者可以跟随作者的脚步进行挖掘,联系,其他的类型则是一些杂乱的文章。

Melcms分析集合

[送0day]代码审计就该这么来 Mlecms Getshell

[送0day]代码审计就该这么来2 Mlecms 注入

{代码审计思路} (通读+审计) Mlecms(中危漏洞/不简单)


beescms分析集合

【代码审计初探】beescms v4.0_R SQL

【代码审计】对Beescms SQL注入漏洞的进一步思考

送0day】代码审计就该这么来3 beescms getshell

【Beecms代码审计篇】Beecms任意文件删除


其他

PHP代码审计:Null 字符问题

一个CMS案例实战讲解PHP代码审计入门

PHP代码审计储存XSS形成防御加利用篇

ZZCMS的代码审计

另外要提的一点是,不同语言编写的web应用其实都有相似性,当你熟练了解一门语言的代码审计过程后其实便可以进一步扩展到别的语言。你会发现基本原理是相似的,当然不同还是存在的,比如其中的addslashes和null的文章便是如此,它是php这门语言独有的问题,其他还有的一些差异在这里不细说明。


五、课程推荐

PHP代码审计实战:
http://www.ichunqiu.com/course/54473


六、代码审计工具推荐

RIPS
它能检查出XSS ,sql注入,敏感信息泄漏,文件包含等常见漏洞;能够采用正则方式扫描代码发现漏洞;也可以采用自定义的语法扫描代码发现问题。

下载链接:


参考文章
工具推荐:三款自动化代码审计工具


七、关联阅读

Mybatis框架下SQL注入漏洞面面观

如何用grep对PHP进行代码审计

python 安全编码&代码审计

结语

本帖旨在帮助大家更好更系统的学习代码审计,大家有任何建议望不吝赐教。

下期技术专题调研:

我们将在这两天确定下周的技术专题,大家有想学习的指定的技术可以留言申请,我们会根据需求来调整策划专题,感谢大家支持啦!