【笔记】从0开始的代码审计

【笔记】从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的单步调试器
  • 具有记录每个函数调用和磁盘变量赋值的功能
  1. 浏览器发送Cookie中带有XDEBUG_SESSION参数的请求到服务器,服务器接收后转到后端PHP处理
  2. 如果后端开启了xdebug模块,则将请求转发到调试IDE所对应的端口上
  3. IDE作出调试处理,然后将结果返回给xdebug调试模块
  4. 调试模块将结果返回到服务器,服务器将数据下发到浏览器

image-20240813105642422

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

https://www.xp.cn/

  • vscode

开启phpstudy的xdebug远程调试

开启phpstudy,打开apache和mysql服务,并选择PHP版本:

image-20240813103501503

进入phpstudy中下载PHP的路径:phpstudy_pro\Extensions\php\php7.3.4nts

image-20240813103600904

我们创建一个网站,在网站根目录下添加phpinfo.php页面,内容如下:

<?php phpinfo(); 

我们访问该网页,观察版本信息,ctrl+A选中页面全部内容进行复制

image-20240813151443850

将内容粘贴到这个网站(安装指南)中:https://xdebug.org/wizard

指南将自动分析应该下载的xdebug的版本

image-20240813151459217

按照指南的步骤先将文件名改为"php_xdebug.dll"

将文件复制到phpstudy_pro\Extensions\php\php7.3.9nts\ext

在小皮面板中的软件管理的php扩展组件中打开XDebug调试组件:

image-20240813162946720

此时重启apache服务可以在phpinfo页面看到这个:

image-20240813152249906

在vscode中安装php-debug

在插件中搜索“php debug”

image-20240813160334660

image-20240813163236062

查看细节,我们需要再php.ini文件中进行配置,我们的Xdebug是3.1.6版本因此需要在php.ini文件中添加上面的内容

xdebug.mode = debug
xdebug.start_with_request = yes

image-20240813163409463

在vscode中配置php路径

首选项 ->设置,搜索php,在以下页面点击“Edit in setting.json”,添加PHP路径

image-20240813163751480

{
    "php.validate.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\ph7.2.9nts\\php.exe"
}

在以下页面点击“Edit in setting.json”,添加PHP路径

image-20240813163845340

"php.debug.executablePath": "C:\\phpstudy_pro\\Extensions\\php\\php7.2.9nts\\php.exe"

创建launch.json文件

打开php工作文件夹,在调试一栏选择创建launch.json文件

image-20240813164134359

我们配置远程调试端口

image-20240813164309577

现在就可以实现动态调试功能了,我们修改源码并设置断点,Xdebug开启监听,我们访问网页发现网页没有回显,Xdebug成功进行了拦截方便我们做动态调试:

image-20240813165334078

posted @ 2024-08-13 17:01  Super_Snow_Sword  阅读(22)  评论(0编辑  收藏  举报