前言
官方文档:http://php.net
php官方文档是非常详情,好用的,在遇到不清楚功效的函数时能够进行查找
白盒测试做代码审计最重点的知识是要去认识一个漏洞应该有那些防御方式,由于大部分的漏洞都是由于修复无做的全面,或修复无思虑到有些状况引起漏洞。
代码审计流程
正向查询流程
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漏洞)等...)是不是有全局过滤机制 1. 有:是不是能够绕过?
1).能够:寻找漏洞触发点(反向查询流程,找危险函数)
2).不能够:寻找无过滤的变量
2.无:那样就看它详细是怎样处理的,详细代码详细分析
1).有处理:寻找遗漏的处理点(如忘记处理的地区或处理不太正确的地区)
2).完全无处理:能够挖成筛子(很少)
3. 找到了漏洞点,漏洞利用是不是有坑
根源:理解程序执行过程,找寻危险规律
特点:
有效:如挖隧道,双向开工,时间减半(不必须去完全理解网站内部原理和函数功效)
知识面广:必须同期把握正向,反向挖掘技巧,并进行结合
以及所有正向,反向的优点
SQL注入漏洞挖掘技巧
PHP+mysql链接方式有:
mysql(废弃,但老的仍然有)
mysqli
PDO
sql注入平常过滤办法
intval:把用户输入的数字后面的所有不是数字的都过滤掉
addslashes:把 前加\转义掉
mysql_real_escape:和第二个类似,但会思虑用户输入和mysql的编码,避免像宽字节注入问题
mysqli_escape_string / mysqli_real_escape_string / mysqli::escape_string (和mysqli搭配运用,和前面的功能类似)和她们的差别是会主动加引号包裹
PDO: quote
参数化查找
平常注入过滤绕过办法
intval:不晓得
addslashes / mysql_real_escape
1.宽字节注入
2.数字型sql语句
3.寻找字符串转换函数(传入编码好的字符绕过过滤,在后面被转换成sql语句)
urldecode
base64_decode
iconv
json_decode
stripshasles
simple_xml_loadstring
例如:传入id被过滤但后面有一处代码是解码base64,因此咱们能够传入 的base64编码绕过
<?php
$id = addslashes($_GET[id]);
....
$id = base64_decode($id);
....
$sql = "select * from flag where id = $id";
?>
mysqli::escape_string // PDO::quote
1.宽字节注入
参数化查找
1.寻找非sql值的位置
研发者
|