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 配置主要参考下面的截图:
1.Change password 这里重置 MySQL 的 root 密码很方便,服务停止状态下可以直接修改 root 用户密码
2.勾选上之后 可以本地使用类似于 Navicat 的软件来连接本地的 MySQL
3.MAMP 也自带 PHPMyAdmin 这种 Web 端的 MySQL 管理工具,PHP >= 5.5 环境下即可正常激活使用
PHP
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 开启成功了:
Xdebug
虽然 Xdebug 扩展开启了,但是 IDE Key 这里显示:no value,所以我们还需要手工在配置一下。手动编辑配置文件:
修改完最后的内容如下:
[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
修改完退出时候,这个时候 MAMP 会自动重启服务生效配置。
这里实际上有一个坑,后面我们使用 PhpStorm 去接入 PHP 的时候,PhpStorm 会找不到这个 ini 配置文件,具体到下面章节再来详细说一下解决方法,国光这里先提前说一下相关路径的所在位置:
下面进入终端来验证一下路径是否正确:
➜ ~ 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:
新建站点
新秀企业网站系统 PHP 版源码下载:SINSIU_1_0.zip (https://www.lanzous.com/i8tj53e)
接下来尝试使用 MAMP 来安装一下这个有漏洞的 CMS。配置细节直接参考下图:
下面来简单讲解一下上面的各个标记的含义:
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
✦One Dark theme
本地调试 MAMP
PhpStorm 在配置接入 MAMP 这一块有点坑爹,所以就得多啰嗦一点了。
设置 PHP 解析器
打开 PhpStorm 在菜单栏中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」选择好对应的 PHP 版本,然后在 「CLI Interpreter」解释器中找到对应的 MAMP 中的 PHP 可执行文件:
会发现 PhpStorm 提示了:
Debugger: Not installed
点击刷新按钮右边挨着的 感叹号,查看一下 phpinfo() 的情况:
一开始我也很郁闷,明明前面 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 中编辑配置文件:
截图:
提取出配置代码,仅供读者参考:
[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
然后在菜单中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」-「DBGp Proxy」,
填写上文中自定义的 IDE Key,已经填写对应的 Host 和 Port:
另外需要过滤默认的 MAMP 自带的项目,防止打开这些项目会进入PHPStorm 中的断点。
然后在菜单中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」-「Skipped Paths」,
最后验证下配置,在菜单中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Debug」
设置 PHPServer
打开 PhpStorm 在菜单栏中依次点击 「 Preference」-「Languages & Frameworks」-「PHP」-「Servers」, 填写本地 MAMP 新建的 Host 站点名称以及对应的 Web 端口,选择 Xdebug:
配置好以上步骤后就可以本地调试了,网站根目录下新建一个 test.php 文件,内容为:
<?php
$a = 'Hello';
$b = 'World';
$c = $a . $b;
echo $c;
右键,按照下图来进行来 「Debug」:
此时会发现本地命令行下的程序调试功能是正常的:
除了 Debug 单个的 PHP 文件,也可以添加一个 PHP Web Page 将整个网站添加进来,点击「Edit Configurations」:
添加一个 PHP Web Page 即可:
最终效果
以之前的文章中的后台语言设置为例子,通过 PhpStorm + Xdebug 可以无需抓包,直接在 Debug 中修改值进行调试,最终的效果如下:
VSCode
插件推荐
✦Chinese (Simplified) Language Pack for Visual Studio Code:官方的简体中文包
✦PHP Debug:调试 PHP 必备扩展
✦Vibrancy:毛玻璃主题
✦One Dark Pro:颜色主题
✦vscode-icons-mac:文件图标主题
调试 MAMP
首先使用 VSCode 打开 MAMP 本地的站点源代码:
接着点击左侧的活动栏中的 Debug 图标,点击「创建 lanunch.json 文件」:
选择要调试的语言为 「php」 ,查看 luanch.json 文件配置是否符合你的实际情况:
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
...
...
...
总的来说效果还是不错的:
效果和 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