首页 > 其他分享 >【笔记】从0开始的代码审计

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

时间:2024-08-13 17:08:23浏览次数:12  
标签:审计 PHP Xdebug 代码 笔记 xdebug php 调试

【笔记】从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

标签:审计,PHP,Xdebug,代码,笔记,xdebug,php,调试
From: https://www.cnblogs.com/handsomexuejian/p/18357333

相关文章

  • polygon-cdk代码解读
    同步器数据的查找数据来源:数据是从以太坊L1区块链(L1)中获取的。通过多个以太坊客户端(ethermans)并行地请求获取区块数据。查找数据的函数:asyncRequestRollupInfoByBlockRange:异步请求特定区块范围内的汇总信息(rollupinfo)。requestLastBlockWithRetries:重......
  • word中插入代码块
    一、使用word原生功能......
  • WebSockets:原理、握手及代码实现
    1.WebSockets原理WebSockets是HTML5标准的一部分,旨在为Web应用提供全双工通信能力。与传统的HTTP请求不同,WebSockets连接一旦建立,就可以在客户端和服务器之间自由传输数据,而不再需要每次通信都重新建立连接。工作流程:建立连接:客户端通过HTTP协议发起WebSocket握......
  • 打工笔记--------------------------c#实现串口通信
    串口通信原理串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一......
  • 【笔记】吉如一线段树
    【笔记】吉如一线段树吉如一论文(CQBZ内网,在PDF的103页1区间最值操作1.1区间取min(max),区间和当前应该修改值为\(x\);维护区间最大值\(mx\),最大值个数\(t\),严格次大值\(se\)。如果走到一个区间上,如果:\(x\gemx\),说明取min操作没用,直接return;\(mx>x>se\),打标......
  • VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互
    该程序演示了如何使用CogToolBlock进行图像交互.从vpp文件中加载一个ToolBlock。用户可以通过应用程序窗体上的数字增减控件修改ToolBlock输入端子的值。用户还可以从coins.idb或采集FIFO中选择图像。“运行一次”按钮执行以下操作:获取下一个图像或读取下一个图像......
  • 京东旋转验证码识别代码
    京东旋转验证码样例如下:现在京东更新了很多新图片,我们再次进行了大量数据标记,完成了这款验证码的更新。现在正确率可以达到95%左右。下边是这款验证码的识别代码:importbase64importrequestsimportdatetimeimportnumpyasnpfromioimportBytesIOfromPILimpo......
  • 代码随想录算法训练营第 42 天 |LeetCode 188.买卖股票的最佳时机IV LeetCode309.最佳
    代码随想录算法训练营Day42代码随想录算法训练营第42天|LeetCode188.买卖股票的最佳时机IVLeetCode309.最佳买卖股票时机含冷冻期LeetCode714.买卖股票的最佳时机含手续费目录代码随想录算法训练营前言LeetCode188.买卖股票的最佳时机IVLeetCode309.最佳买卖......
  • 算法的学习笔记——二进制中 1 的个数(牛客JZ15)
    ......
  • CSS笔记总结(Xmind格式):第二天
    Xmind鸟瞰图:简单文字总结:css知识总结:复合选择器:  1.交集选择器:在一个选择器的基础上,再增加一个选择器来增加条件(中间不能有任何符号包括空格)  2.并集选择器:多个选择器之间用逗号隔开,表示同时选择多个标签使用样式  3.后代选择器:使用空格分隔  4.子元......