【笔记】从0开始的代码审计
代码审计思路
敏感函数回溯参数调用过程
- 首先特别关注程序敏感函数点,如:SQL语句拼合处、call_user_func、eval、unserialize、HTTP_CLIENT_IP等
- 然后回溯参数调用过程查看是否全部过滤或者过滤不全,如:程序可能开启magic_quotes_gpc(转义大部分符号),但是部分数据流经过$_____SERVER变量,$_____SERVER并不受gpc的影响
优点
- 能够快速挖掘想要的漏洞,具有定向挖掘特点
缺点
- 没有精读代码,对程序的整体框架了解不够深入
- 很难挖掘到逻辑漏洞
通读全文
- 根据文件创建的时间、目录大小、目录类型、核心目录去阅读
- 注意程序功能说明文档
- 公共函数文件:common、function、include文件夹,一般包含程序文件公共调用的函数库
寻找方法:打开index.php,找到头部包含的文件
- 配置文件:config文件夹,包含程序的数据库,配置选项等信息
- 安全过滤文件决定漏洞是否能够利用成功
通过命名为filter,safe,check等关键字
主要针对SQL、XSS、文件等进行过滤
常用过滤函数addslashes()
- index文件
程序入口文件
优点
- 能够对程序框架能够整体认识
- 深入了解程序的运转流程
- 挖掘高质量的逻辑漏洞
缺点
- 耗时较长
代码审计工具
环境搭建
搭建思路
- 环境搭建过程尽量以简单易管理为主
- 环境应该支持多种版本
- 环境具有可扩展性
Phpstudy
支持windows和linux
集成Apache、lis、Nginx
支持切换PHP多种版本
默认安装mysql数据库
代码编辑工具
Notepad++
- 开源纯文字编辑
- 体积轻巧,启动速度快
- 支持多种语言代码高亮、代码折叠
- 支持宏和外挂更多插件
(宏是C语言中的一种预处理功能,可以将标识符替换为字符串,实现简单的代码复用和优化。本文介绍了宏的定义、参数、多行、条件、文件包含等用法,以及宏的优缺点和常见错误。)
Zend Studio
- 与PHP出自同一家公司
- 目前PHP开发用户量相对最高的使用
- 具备专业的代码编辑和调试工具
- 支持windows,Linux,Mac
Phpstorm
- JetBrains公司开发的商业级PHP集成开发工具(有学生邮箱可以免费使用)
- 支持多种语言混合
- 支持语法高亮、自动补全、能够快速检测编写代码中的语法错误
- 轻量级IDE
- 支持本地调试和远程调试
漏洞验证工具
代码审计工具(白盒)
RIPS
- 基于PHP开发的专门用于审计PHP代码的软件
- 程序大小只有450kb
- 亮点在于调用PHP内置解析器接口token_get_all,并且使用Parser做语法分析
- 误报率相对较低
- 2013.2暂停更新
Seay
阿里巴巴尹毅使用C#开发的针对PHP代码安全审计软件
运行在windows系统
执行审计常见Web安全漏洞,并且能够进行代码调试、函数定位、语法高亮
辅助工具
BrupSuite
Firefox浏览器扩展
- Hackbar
- F12调试
编码转化
POST数据
正则调试
Seay
在线调试
动态调试
数据库执行监控
Seay
phpstorm
动态调试环境搭建
PHP Xdebug调试原理
Xdebug介绍
- xdebug是PHP的扩展协助调试和开发
- 包含一个用于IDE的单步调试器
- 具有记录每个函数调用和磁盘变量赋值的功能
- 浏览器发送Cookie中带有XDEBUG_SESSION参数的请求到服务器,服务器接收后转到后端PHP处理
- 如果后端开启了xdebug模块,则将请求转发到调试IDE所对应的端口上
- IDE作出调试处理,然后将结果返回给xdebug调试模块
- 调试模块将结果返回到服务器,服务器将数据下发到浏览器
PHP Xdebug调试环境搭建
配置
- PHP
- Xdebug
- phpstorm
PHP默认没有安装xdebug插件,首先需要下载插件PHP
https://xdebug.org/download.php (xdeug3)
https://xdebug.org/wizard.php (安装指南)
下载
- xdebug(按照自己php版本来下载)
https://xdebug.org/download/historical
- PHPStudy
- vscode
开启phpstudy的xdebug远程调试
开启phpstudy,打开apache和mysql服务,并选择PHP版本:
进入phpstudy中下载PHP的路径:phpstudy_pro\Extensions\php\php7.3.4nts
我们创建一个网站,在网站根目录下添加phpinfo.php页面,内容如下:
<?php phpinfo();
我们访问该网页,观察版本信息,ctrl+A选中页面全部内容进行复制
将内容粘贴到这个网站(安装指南)中:https://xdebug.org/wizard
指南将自动分析应该下载的xdebug的版本
按照指南的步骤先将文件名改为"php_xdebug.dll"
将文件复制到phpstudy_pro\Extensions\php\php7.3.9nts\ext
在小皮面板中的软件管理的php扩展组件中打开XDebug调试组件:
此时重启apache服务可以在phpinfo页面看到这个:
在vscode中安装php-debug
在插件中搜索“php debug”
查看细节,我们需要再php.ini文件中进行配置,我们的Xdebug是3.1.6版本因此需要在php.ini文件中添加上面的内容
xdebug.mode = debug
xdebug.start_with_request = yes
在vscode中配置php路径
首选项 ->设置,搜索php,在以下页面点击“Edit in setting.json”,添加PHP路径
{
"php.validate.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\ph7.2.9nts\\php.exe"
}
在以下页面点击“Edit in setting.json”,添加PHP路径
"php.debug.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\php7.2.9nts\\php.exe"
创建launch.json文件
打开php工作文件夹,在调试一栏选择创建launch.json文件
我们配置远程调试端口
现在就可以实现动态调试功能了,我们修改源码并设置断点,Xdebug开启监听,我们访问网页发现网页没有回显,Xdebug成功进行了拦截方便我们做动态调试:
标签:审计,PHP,Xdebug,代码,笔记,xdebug,php,调试 From: https://www.cnblogs.com/handsomexuejian/p/18357333