首页 » 网站推广 » php55pccode技巧_代码审计xyhcms35后台随便率性文件读取

php55pccode技巧_代码审计xyhcms35后台随便率性文件读取

访客 2024-12-18 0

扫一扫用手机浏览

文章目录 [+]

欢迎关注微信"大众号渗透云条记

1序言

一个很老的cms了,感谢小阳师傅给的练手cms,以下仅为此cms个中一个任意文件读取漏洞和任意文件删除漏洞的审计条记。

php55pccode技巧_代码审计xyhcms35后台随便率性文件读取

2Cms目录剖析

拿到这个cms的时候创造是基于thinkphp3.2.3的框架构造开拓的,代码审计前,看了下thinkphp3.2.3的开拓手册,在看了整体目录和部分代码后,对目录的一个剖析(仅为个人见地):

php55pccode技巧_代码审计xyhcms35后台随便率性文件读取
(图片来自网络侵删)

└── uploads_code

├── App 默认运用目录

│ ├── Api (api接口)

│ ├── Common (公共模块,不能直接访问)

│ ├── Home (前台模块)

│ ├── Html (啥也没有)

│ ├── Manage (后台的功能模块)

│ ├── Mobile

│ └── Runtime (缓存)

├── Data 该当是一些后台的插件运用(默认便是那样的)

│ ├── config

│ ├── editor

│ ├── resource

│ └── static

├── Library cms图标

├── Include

│ ├── Common 公共函数目录

│ ├── Conf 配置文件目录

│ ├── Home

│ ├── Lang

│ ├── Library

│ ├── Mode 模型目录

│ ├── Runtime 缓存日志

│ └── Tpl

├── Install cms安装目录

│ ├── css

│ ├── images

│ ├── inc

│ └── tpl

├── Public 资源文件目录

│ ├── Home

│ └── Mobile

├── avatar

│ └── system

└── uploads 该当是一些上传后文件的存储位置

├── abc1

├── file1

├── img1

└── system

index.php 首页

xyhai.php 后台

3任意文件读取漏洞

先用seay对代码进行了一个自动审计,然后优先级是先看app目录下的审计结果。

根据seay的审计结果,定位到一个任意文件读取漏洞在/App/Manage/Controller/TempletsController.class.php下

连续通过seay工具定位到详细位置,创造漏洞是在edit函数下。

代码如下:

public function edit() {

$ftype = I('ftype', 0, 'intval');

$fname = I('fname', '', 'trim,htmlspecialchars');

$file_path = !$ftype ? './Public/Home/' . C('CFG_THEMESTYLE') . '/' : './Public/Mobile/' . C('CFG_MOBILE_THEMESTYLE') . '/';

if (IS_POST) {

if (empty($fname)) {

$this->error('未指定文件名');

}

$_ext = '.' . pathinfo($fname, PATHINFO_EXTENSION);

$_cfg_ext = C('TMPL_TEMPLATE_SUFFIX');

if ($_ext != $_cfg_ext) {

$this->error('文件后缀必须为"' . $_cfg_ext . '"');

}

$content = I('content', '', '');

$fname = ltrim($fname, './');

$truefile = $file_path . $fname;

if (false !== file_put_contents($truefile, $content)) {

$this->success('保存成功', U('index', array('ftype' => $ftype)));

} else {

$this->error('保存文件失落败,请重试');

}

exit();

}

$fname = base64_decode($fname);

if (empty($fname)) {

$this->error('未指定要编辑的文件');

}

$truefile = $file_path . $fname;

if (!file_exists($truefile)) {

$this->error('文件不存在');

}

$content = file_get_contents($truefile);

if ($content === false) {

$this->error('读取文件失落败');

}

$content = htmlspecialchars($content);

$this->assign('ftype', $ftype);

$this->assign('fname', $fname);

$this->assign('content', $content);

$this->assign('type', '修正模板');

$this->display();

}

声明了3个变量

$ftype 文件类型

$fname 文件名

$file_path 文件路径

然后进行了一个判断是否为POST传输,这段代码整体该当是对文件起一个保存的浸染。
非post传输的则会直接跳过这段代码

连续向下,将$fname 进行base64编码后进行输出,判断fname是否为空,非空则会拼接成完全的文件路径,然后判断文件是否存在,然进行读取文件内容。
然后会将整内容这些显示在修正模板上。

利用方法:

(Ps:由于/App/Manage/是后台功能,以是此漏洞是须要进行后台登录的)

将须要进行读取的文件base64编码即可,例如读取我电脑上phpstudy默认天生的index.html文件

../../../../../index.html

http://127.0.0.1/xyhcms3.5/uploads_code/xyhai.php?s=/Templets/edit/fname/Li4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbA==

4任意文件删除漏洞

同样在这个文件下,还存在一个任意文件删除漏洞。
在124行的del函数下

这里的逻辑跟前面的edit函数 的任意文件读取差不多的。

将fname变量进行base64编码

然后判断传入的参数是否存在,进行文件地址拼接后实行删除等操作。
利用方法也一样

http://127.0.0.1/xyhcms3.5/uploads_code/xyhai.php?s=/Templets/del/fname/Li4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbA==

标签:

相关文章

php常量率低技巧_PHP 常量详解教程

PHP 常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。注释...

网站推广 2024-12-19 阅读0 评论0