vlambda博客
学习文章列表

macOS 下优雅地配置 PHP 代码审计环境

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

前言

没有断点,不用动态调试的代码审计,是没有灵魂的,正所谓工欲善其事必先利其器,所以 要想代码审计好,配置环境少不了(单押)。年初审计了一个 CMS ,在知识库中之前投稿了篇文章[PHP代码审计入门之新秀企业网站系统],因为是第一次审计,直接拿起 VSCode 就上了,找函数全部手工使用搜索来定位的,所以这个简单的 CMS 硬是审计了 2天,效率太低了。因为 macOS 下配置环境会遇到很多坑,所以本文就诞生了,让大家在 macOS 下配置 PHP 审计环境少走一些坑。

No.1

PHP 调试环境

看到专业程序员都是在 macOS 下手动编译安装 PHP 的,这样太硬核了,国光我玩不来,还是使用集成环境吧,安装卸载也会比较方便。下面推荐几个不错的工具:

✦macOS 10.15.6:macOS 程序猿必备操作系统

✦MAMP PRO:经典老牌的 PHP 集成环境

✦Navivat Premium:强大的数据库图形化管理工具

✦Xdebug:PHP 动态调试必备扩展

✦Docker:Docker 里面安装宝塔来调试也是不错的选择(挖个坑 本文暂时没有写到相关的配置细节)

MAMP PRO

MAMP PRO 是 macOS 平台上经典的本地环境应用,专门为专业的Web开发人员和程序员轻松地安装和管理自己的开发环境。类似于 Windows 下的 PHPStudy 支持 PHP 版本切换,Xdebug 配置也比较方便。

下面列举一下基本的环境信息:

MySQL

MySQL 配置主要参考下面的截图:

macOS 下优雅地配置 PHP 代码审计环境

1.Change password 这里重置 MySQL 的 root 密码很方便,服务停止状态下可以直接修改 root 用户密码

2.勾选上之后 可以本地使用类似于 Navicat 的软件来连接本地的 MySQL

3.MAMP 也自带 PHPMyAdmin 这种 Web 端的 MySQL 管理工具,PHP >= 5.5 环境下即可正常激活使用

PHP

PHP 配置主要参考下面的截图:

macOS 下优雅地配置 PHP 代码审计环境

1.切换 PHP 版本,支持:5.4.45、5.6.40、7.0.33、7.1.32、7.2.22、7.3.9、7.4.2

2.右箭头图标,点击可以直接打开对应 PHP 版本的 ini 配置文件

3.Xdebug 扩展,是一个好用的 PHP 扩展,提供调试和性能分析功能,代码审计必备


验证 Xdebug 是否开启,在网站根目录下新建一个 info.php 文件:

➜  htdocs pwd/Applications/MAMP/htdocs

➜  htdocs ls
MAMP-PRO-Logo.png index.php         info.php

➜  htdocs cat info.php
<?php phpinfo();?>

访问验证查看 phpinfo() 页面信息,搜索 xdebug 关键词,可以搜索到即表示 xdebug 开启成功了:

macOS 下优雅地配置 PHP 代码审计环境

Xdebug

虽然 Xdebug 扩展开启了,但是 IDE Key 这里显示:no value,所以我们还需要手工在配置一下。手动编辑配置文件:

macOS 下优雅地配置 PHP 代码审计环境

修改完最后的内容如下:

[xdebug]
MAMP_Xdebug_MAMPzend_extension="/Applications/MAMP/bin/php/php5.4.45/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/Applications/MAMP/tmp"
xdebug.idekey="this_is_your_idekey"

其中 remote_port 和 idekey 是可自定义的,端口国光这里保持默认,idekey 自定义为:this_is_your_idekey 细心的小伙伴会发现我们编辑的这个文件为:php5.4.45.ini

macOS 下优雅地配置 PHP 代码审计环境

修改完退出时候,这个时候 MAMP 会自动重启服务生效配置。

这里实际上有一个坑,后面我们使用 PhpStorm 去接入 PHP 的时候,PhpStorm 会找不到这个 ini 配置文件,具体到下面章节再来详细说一下解决方法,国光这里先提前说一下相关路径的所在位置:

macOS 下优雅地配置 PHP 代码审计环境

下面进入终端来验证一下路径是否正确:

➜  ~ cd /Library/Application\ Support/appsolute/MAMP\ PRO/conf

➜  conf pwd/Library/Application Support/appsolute/MAMP PRO/conf

➜  conf ls
httpd.conf    nginx.conf    php.ini       php5.4.45.ini php5.6.40.ini php7.4.2.ini

这个时候再查看 phpinfo() 页面来检验一下,会发现 xdebug 已经设置好了 IDE Key:

macOS 下优雅地配置 PHP 代码审计环境

新建站点

新秀企业网站系统 PHP 版源码下载:SINSIU_1_0.zip (https://www.lanzous.com/i8tj53e)

接下来尝试使用 MAMP 来安装一下这个有漏洞的 CMS。配置细节直接参考下图:

macOS 下优雅地配置 PHP 代码审计环境

下面来简单讲解一下上面的各个标记的含义:

1.添加一个新的 hosts 站点

2.添加站点的名称

3.自定义站点的名称,此时国光我这里的命名为 sinsiu ,那么此时这个站点就可以通过如下 URL 进行访问了:http://sinsiu:888

4.点击可以直接在浏览器打开这个站点

5.自定义站点网站根目录的路径信息

6.实际上访问 sinsiu 可以打开刚刚网站的原理就是因为 MAMP 编辑了我们本地的这个 hosts 文件了


接着就是常规 CMS 安装了,填写数据库用户名和密码,然后设置网站后台密码等。这一步国光不再赘述,大家可以看到这篇文章,说明肯定是有安全基础的了。

No.2

编辑器/IDE

PhpStorm

(https://www.jetbrains.com/phpstorm/download/)

JetBrains 公司出品的 IDE,强大好用毋庸置疑的,就是注册码有点难搞,还好国光我学生认证了一下,可以白嫖 1 年,哈哈哈嗝

主题推荐

字体:Monaco 15 主题下面列举两个国光我认为还算不错的主题:

✦Xcode-Dark Theme

macOS 下优雅地配置 PHP 代码审计环境

✦One Dark theme

macOS 下优雅地配置 PHP 代码审计环境

本地调试 MAMP

PhpStorm 在配置接入 MAMP 这一块有点坑爹,所以就得多啰嗦一点了。

设置 PHP 解析器

打开 PhpStorm 在菜单栏中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」选择好对应的 PHP 版本,然后在 「CLI Interpreter」解释器中找到对应的 MAMP 中的 PHP 可执行文件:

macOS 下优雅地配置 PHP 代码审计环境

会发现 PhpStorm 提示了:

Debugger: Not installed

点击刷新按钮右边挨着的 感叹号,查看一下 phpinfo() 的情况:

macOS 下优雅地配置 PHP 代码审计环境

一开始我也很郁闷,明明前面 MAMP 已经配置开启好了 Xdebug 为啥 PhpStorm 还是没有识别到 Xdebug 开启了呢?仔细观察上面截图,会发现 PhpStorm 是去这里找配置文件了:

/Applications/MAMP/bin/php/php5.4.45/conf/php.ini

而 MAMP 临时编辑的配置文件位置为:

/Library/Application Support/appsolute/MAMP PRO/conf/php5.4.45.ini

知道这个就知道解决方法了,那就是再手工编辑原版 php.ini 文件,点击 「Open in Editor」即可直接在 IDE 中编辑配置文件:

macOS 下优雅地配置 PHP 代码审计环境

截图:

macOS 下优雅地配置 PHP 代码审计环境

提取出配置代码,仅供读者参考:

[xdebug]

zend_extension="/Applications/MAMP/bin/php/php5.4.45/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"

xdebug.remote_enable=1

xdebug.remote_host=localhost

xdebug.remote_port=9000

xdebug.remote_autostart=1

xdebug.profiler_enable=0

xdebug.profiler_output_dir="/Applications/MAMP/tmp"

xdebug.idekey="this_is_your_idekey"

设置 PHP 调试器

打开 PhpStorm 在菜单栏中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」,

Debug Port 位置填写我们上面配置的默认端口:9000

macOS 下优雅地配置 PHP 代码审计环境

然后在菜单中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」-「DBGp Proxy」,

填写上文中自定义的 IDE Key,已经填写对应的 Host 和 Port:

macOS 下优雅地配置 PHP 代码审计环境

另外需要过滤默认的 MAMP 自带的项目,防止打开这些项目会进入PHPStorm 中的断点。

然后在菜单中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」-「Skipped Paths」,

macOS 下优雅地配置 PHP 代码审计环境

最后验证下配置,在菜单中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」

macOS 下优雅地配置 PHP 代码审计环境

设置 PHPServer

打开 PhpStorm 在菜单栏中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Servers」, 填写本地 MAMP 新建的 Host 站点名称以及对应的 Web 端口,选择 Xdebug:

macOS 下优雅地配置 PHP 代码审计环境

配置好以上步骤后就可以本地调试了,网站根目录下新建一个 test.php 文件,内容为:

<?php


$a = 'Hello';
$b = 'World';
$c = $a . $b;

echo $c;

右键,按照下图来进行来 「Debug」:

macOS 下优雅地配置 PHP 代码审计环境

此时会发现本地命令行下的程序调试功能是正常的:

macOS 下优雅地配置 PHP 代码审计环境
macOS 下优雅地配置 PHP 代码审计环境

除了 Debug 单个的 PHP 文件,也可以添加一个 PHP Web Page 将整个网站添加进来,点击「Edit Configurations」:

macOS 下优雅地配置 PHP 代码审计环境

添加一个 PHP Web Page 即可:

macOS 下优雅地配置 PHP 代码审计环境

最终效果

以之前的文章中的后台语言设置为例子,通过 PhpStorm + Xdebug 可以无需抓包,直接在 Debug 中修改值进行调试,最终的效果如下:

macOS 下优雅地配置 PHP 代码审计环境

VSCode

插件推荐

✦Chinese (Simplified) Language Pack for Visual Studio Code:官方的简体中文包

✦PHP Debug:调试 PHP 必备扩展

macOS 下优雅地配置 PHP 代码审计环境

✦Vibrancy:毛玻璃主题

macOS 下优雅地配置 PHP 代码审计环境

✦One Dark Pro:颜色主题

macOS 下优雅地配置 PHP 代码审计环境

✦vscode-icons-mac:文件图标主题

macOS 下优雅地配置 PHP 代码审计环境

调试 MAMP

首先使用 VSCode 打开 MAMP 本地的站点源代码:

macOS 下优雅地配置 PHP 代码审计环境

接着点击左侧的活动栏中的 Debug 图标,点击「创建 lanunch.json 文件」:

macOS 下优雅地配置 PHP 代码审计环境

选择要调试的语言为 「php」 ,查看 luanch.json 文件配置是否符合你的实际情况:

macOS 下优雅地配置 PHP 代码审计环境
macOS 下优雅地配置 PHP 代码审计环境

No.3

MySQL 数据监控

原理就是开启 MySQL 的日志监控功能,然后从日志中提取分析出 MySQL 的执行语句。MAMP PRO 的默认 MySQL 日志路径为:

/Library/Application Support/appsolute/MAMP PRO/db/mysql57

实际上也可以自定义日志的存储路径,所以 PHPMyAdmin 中利用修改日志存储位置 Getshell 也是用的这个原理(又扯多了)下面直接贴一些 MySQL 日志操作的相关语句吧:

show variables like 'general_log'; # 查看日志是否开启

set global general_log=on; # 开启日志功能

show variables like 'general_log_file'; # 看看日志文件保存位置

set global general_log_file='tmp/general.lg'; # 设置日志文件保存位置

show variables like 'log_output'; # 看看日志输出类型 table或file

set global log_output='table'; # 设置输出类型为 table

set global log_output='file'; # 设置输出类型为file

知道原理之后那么直接使用 Github 上的轮子吧,看了下代码原理就是开启日志,将日志自定义为项目下的 txt 文件,然后从 txt 文件中分析 MySQL 执行语句。

脚本要求 Python3 使用前先安装好依赖:

pip3 install pymysql
pip3 install configparser

接着就可以愉快地查看 MySQL 执行日志了:

# git clone 下载源码

➜ git clone https://github.com/TheKingOfDuck/MySQLMonitor.git


# 进项目下编辑 ini 配置文件 填写好数据库的相关信息

➜ cd MySQLMonitor
➜ vim config.ini# 


下面国光的配置信息 MAMP 数据库端口为 8889

➜ cat config.ini
[dbconf]
host=127.0.0.1
port=8889
user=root
password=P@ssw0rd
db_name=mysql
charset=utf8

➜ python3 main.py
[09:24:16]配置解析成功...
[09:24:16]数据库连接成功...
[09:24:16]当前数据库版本为: 5.7.26
[09:24:17]日志状态为:ON
[09:24:17]日志监听中...
[09:24:17]show variables like 'general_log_file'[09:24:41]set names utf8
...
...
...

总的来说效果还是不错的:

macOS 下优雅地配置 PHP 代码审计环境

效果和 seay 的源码审计工具里面的 mysql 监控小插件差不多了。

No.4

总结

本文可能没哈技术含量,但是编写起来还是十分耗费时间的,写本文只想让后面在 macOS 下配置代码审计环境的小伙伴少走弯路,帮助到更多的人。实际上还有更多不错的方案,比如 Docker + 宝塔 然后 VSCode 远程调试,由于时间有限,先挖个坑,日后有空了再来编写。感兴趣的朋友可以自己先去研究看看,等你们好消息。

No.5

参考资料

✦PHP开发环境搭建及Xdebug搭建

http://www.gosql.cn/index.php/archives/115/


✦MAC环境下PHP开发调试环境搭建

https://juejin.im/post/5ca5ebcee51d455e6c050d36

招聘

 4.  具备美术功底、懂得设计美化等


简历投递至 [email protected]

设计师(实习生)

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽


简历投递至 [email protected]

岗位:红队武器化Golang开发工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.掌握C/C++/Java/Go/Python/JavaScript等至少一门语言作为主要开发语言;
2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉MySQL、Redis、MongoDB等主流数据库结构的设计,有独立部署调优经验;
3.了解docker,能进行简单的项目部署;
3.熟悉常见web漏洞原理,并能写出对应的利用工具;
4.熟悉TCP/IP协议的基本运作原理;
5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式、消息队列等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。


简历投递至 [email protected]

安全招聘
————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;


岗位:安全红队武器自动化工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。


简历投递至 [email protected]


专注渗透测试技术

全球最新网络攻击技术

END