php代码审计学习(baijiacms v4代码审计-system任意命令执行)
前言
最近及将来一段时间都会利用空闲的时间学习PHP代码审计
记录代码审计学习过程,最近在公众号上看到一篇baijiacms的代码审计分享,因此在没看具体审计内容流程的情况下,先自己学着审计一波。
一、危险函数查找
- 使用Seay审计工具进行自动审计发现危险函数 system
2. 转到system 函数所在的 includes\baijiacms\common.inc.php 文件,可以看到system函数在file_save函数中,进一步查看哪里调用有file_save函数
查看file_save函数调用
发现\system\weixin\class\web\setting.php 调用了file_save函数,进行跟进调用处
system\weixin\class\web\setting.php 代码内容,从代码来看是一个文件上传类似的功能点
二、访问测试
根据\system\weixin\class\web\setting.php文件所在路径拼接url路由。
拼接路由url,跳到该功能点,测试
在file_save函数进行断点调试查看代码执行流程,f7跟进
到此,发现 需要 $setting[‘image_compress_openscale’] 的值为真才可以进到system危险函数执行命令。
由于image_compress_openscale值默认为0,想办法看看image_compress_openscale的值可不可以设置,查看全局image_compress_openscale是不是可以赋值的。
全局搜索 image_compress_openscale 赋值
跟到image_compress_openscale 赋值的 netattach.php文件
所在路径 system\manager\class\web\netattach.php
根据文件拼接url路由,访问功能点,该功能点就是开启图片压缩比例功能赋值image_compress_openscale为1,开启之后重新登录后台
三、 构造 payload,触发漏洞
开启image_compress_openscale之后,重新进行断点调试,手动拼接一下system函数执行内容:
system(‘convert-quality 80 C:/phpstudy_pro/WWW/baijiacms4.4/test1.txt’);
正常流程 :执行完后会在C:/phpstudy_pro/WWW/baijiacms4.4/ 目录下生成一个 test1.txt文件
payload 构造:
分析:system()函数执行内容,在windows执行多条可以 类型管道符可以使用 符号 “|” 或者 “&”
windows文件命名规则:不可以包含以下字符,如果包含以下字符则创建文件会失败
\/:*?"<>|
在此,windows执行多条命令可以使用&符号,windows文件创建,文件名中也可以包含&符号
构造文件名执行whoami: test1&whoami&.txt
system('convert-quality 80 C:/phpstudy_pro/WWW/baijiacms4.4/test1&whoami&.txt');
达到任意命令执行
总结
新手审计,我太拉了