作者:坏蛋
链接: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注入,敏感信息泄漏,文件包含等常见漏洞;能够采用正则方式扫描代码发现漏洞;也可以采用自定义的语法扫描代码发现问题。

下载链接:http://rips-scanner.sourceforge.net/

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

七、关联阅读

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

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

python 安全编码&代码审计

结语

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

下期技术专题调研:

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

技术专题-PHP代码审计的更多相关文章

  1. 技术专题—Python黑客【优质内容聚合贴】

    作者:坏蛋链接:https://zhuanlan.zhihu.com/p/24645819来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.前言 本着知识分享,聚合优 ...

  2. SQL注入技术专题—由浅入深【精华聚合贴】

    SQL注入技术专题—由浅入深[精华聚合贴] 不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企 ...

  3. 极客技术专题【008期】:CSS3核心技术:选择器

    日期:2013-8-19  来源:GBin1.com 技术专题介绍 技术专题:CSS3核心技术:选择器 专题演讲稿:CSS3选择器 分享人:知名前端技术博客 - w3cplus.com 博主 - 大漠 ...

  4. 极客技术专题【007期】:jQuery初学者入门 - jQuery Event

    日期:2013-8-19  来源:GBin1.com 技术专题介绍 专题:jQuery初学者入门[第三讲:jQuery Event] 分享人:极客标签技术编辑 -Lana (请站内关注分享人) 授课时 ...

  5. IBM Python 技术专题

    Python 技术专题 Python 是由 Guido van Rossum 开发的,可免费获得的.是一种非常高级的解释型语言.其语法简单易懂,而且面向对象的语义功能强大又灵活,Python 可以广泛 ...

  6. JAVA技术专题综述之线程篇(1)

    本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield( ...

  7. 极客技术专题【011期】:EasyUI初级教程

    来源:GBin1.com 技术专题:EasyUI初级教程 分享人:极客标签技术编辑 - html580(请站内关注分享人) 资深Web前端工程师,HTML580创始人,目前就职于广州一间软件公司.多年 ...

  8. Neo4j高级应用技术专题系列 - APOC存储过程库-【1】概述

    Neo4j高级应用技术专题系列 - APOC存储过程库-[1]概述 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...

  9. SQL注入技术专题—由浅入深【精华聚合】

    作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...

随机推荐

  1. 【转】C++标准库和标准模板库

    C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费 ...

  2. git 新建服务器的版本以及项目的用户

    一, git客户端账号生成 1. git的客户端的公钥生成 ssh-keygen -t rsa -C "test@gmail.com" mac机器会在 /Users/用户/.ssh ...

  3. AppCompatActivity实现全屏的问题

    前言:我的 Activity 是继承 BaseActivity , 而 BaseActivity 继承 AppCompatActivity . BaseActivity 的继承 /** * 应用程序的 ...

  4. 论使用LeanCloud中遇到的坑

    1.短信验证码 当注册用户的时候,会发现收不到短信验证码,打印e : That operation isn't allowed for clients. 含义 - 该操作无法从客户端发起.请检查该错误 ...

  5. Android.mk相关知识

    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...

  6. Android java传递int类型数组给C

    接着前面的文章<Android java传递int类型数据给C><Android java传递string类型数据给C>,继续实践 实现public native int[] ...

  7. OC中的私有变量和description

    .OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private ...

  8. DOM属性操作

    HTML attribute  --> DOM property 每个html属性都对应一个DOM对象属性,举个栗子: <div> <label for="userN ...

  9. 6、软件配置工程师要阅读的书籍 - IT软件人员书籍系列文章

    软件配置管理工程师的工作也是贯穿整个项目过程的.其主要针对项目中的各种文档.技术源码等等进行归档控制.一般的配置项比如需求说明书,概要设计,详细设计,测试文档,用户手册等,还有源代码管理,数据库文档文 ...

  10. 全面理解JavaScript中的闭包的含义及用法

    1.什么是闭包 闭包:闭包就是能够读取其他函数内部变量的函数;闭包简单理解成“定义在一个函数内部的函数”. 闭包的形式:即内部函数能够使用它所在级别的外部函数的参数,属性或者内部函数等,并且能在包含它 ...