PHP代码审计入门篇 | 您所在的位置:网站首页 › php代码审计入门 › PHP代码审计入门篇 |
前言 官方文档:php.netphp官方文档是非常详情,好用的,在遇到不清楚作用的函数时可以进行查询 白盒测试做代码审计最主要的知识是要去了解一个漏洞应该有哪些防御方式,因为大部分的漏洞都是因为修复没有做的全面,或者修复没有考虑到一些情况导致漏洞。MVC:C:分发处理请求网站的逻辑M:处理和数据库相关的操作V:显示给用户的内容 代码审计流程正向查找流程a. 从入口点函数出发(如index.php)b. 找到控制器,理解URL派发规则(URL具体映射到哪个具体的代码里)c. 跟踪控制器调用,以理解代码为目标进行源代码阅读d. 最终在阅读代码的过程和尝试中,可能发现漏洞 本质:程序员疏忽或逻辑问题导致漏洞 特点: 复杂:需要极其了解目标源码的功能与框架 跳跃性大:涉及M/V/C/Service/Dao等多个层面 漏洞的组合:通常是多个漏洞的组合,很可能存在逻辑相关的漏洞 反向查找流程a. 通过危险函数,回溯可能存在的漏洞1. 查找可控变量2. 传递的过程中触发漏洞 特点: 与上下文无关 危险函数,调用即漏洞 代码审计工具功能大多就是这个原理 双向查找流程(手动审计主要方式)略读代码,了解框架(正向流程,如:网站都有哪些功能,什么样的架构如mvc:它的m在哪v,c在哪,用了什么模板引擎,是否用了orm(如果使用了ORM那么sql注入就很少了,如果没用是手工写的sql语句,可以关注是否存在sql漏洞)等...) 是否有全局过滤机制 有:是否可以绕过 可以:寻找漏洞触发点(反向查找流程,找危险函数) 不可以:寻找没有过滤的变量 没有:那么就看它具体是如何处理的,具体代码具体分析 有处理:寻找遗漏的处理点(如忘记处理的地方或者处理不太正确的地方) 完全没有处理:可以挖成筛子(很少) 3.找到了漏洞点,漏洞利用是否有坑 根源:理解程序执行过程,找寻危险逻辑特点:高效:如挖隧道,双向开工,时间减半(不需要去完全理解网站内部原理和函数作用)知识面广:需要同时掌握正向,反向挖掘技巧,并进行结合以及所有正向,反向的优点 SQL注入漏洞挖掘技巧PHP+mysql链接方式有:mysql(废弃,但老的仍然有)mysqliPDO sql注入常见过滤方法:intval:把用户输入的数字后面的所有不是数字的都过滤掉addslashes:把 ' 前加\转义掉mysql_real_escape:和第二个类似,但会考虑用户输入和mysql的编码,避免像宽字节注入问题 mysqli_escape_string/ mysqli_real_escape_string/ mysqli::escape_string(和mysqli搭配使用,和前面的功能类似)和他们的差别是会主动加引号包裹 PDO:quote 参数化查询 常见注入过滤绕过方法:intval:不知道addslashes / mysql_real_escape1.宽字节注入2.数字型sql语句3.寻找字符串转换函数(传入编码好的字符绕过过滤,在后面被转换成sql语句)urldecodebase64_decodeiconvjson_decodestripshaslessimple_xml_loadstring例如:传入id被过滤但后面有一处代码是解码base64,所以我们可以传入 ' 的base64编码绕过 |
CopyRight 2018-2019 实验室设备网 版权所有 |