PHP代码审计-emlog6.0.0

举报
亿人安全 发表于 2023/05/24 21:38:19 2023/05/24
【摘要】 一.项目搭建:使用phpstduy+mysql进行环境搭建。输入数据库名和登录用户名、密码之后,进入下一步。成功登录后台地址。二、代码审计:全局分析:分析网站根目录下/index.php包含的头文件/init.php,发现,其中对GET,POST等进行处理的只有第二十一行的函数doStripslashes()。跟踪该函数,发现该函数作用居然还是去除转义字符,所以可以说,全局对GET,POST...

一.项目搭建:

使用phpstduy+mysql进行环境搭建。

输入数据库名和登录用户名、密码之后,进入下一步。

成功登录后台地址。

二、代码审计:

全局分析:

分析网站根目录下/index.php包含的头文件/init.php,发现,其中对GET,POST等进行处理的只有第二十一行的函数doStripslashes()。

跟踪该函数,发现该函数作用居然还是去除转义字符,所以可以说,全局对GET,POST数据实际上是毫无过滤的。

漏洞分析:

1.SQL注入漏洞1

进入/admin/comment.php第46行语句

$ip = isset($_GET['ip']) ? $_GET['ip'] : '';发现未对参数的输入进行过滤。

跟踪该函数delCommentByIp()

在/include/model/comment_model.php中第152行中将该参数拼接到SQL语句,由单引号来进行包裹。

经过分析之后,发现是未对用户的输入是进行过滤的。

漏洞复现:

进入插件功能模块处,然后进行上传文件,f12查看网页源代码,获取token。

然后使用burptuiste进行测试,发现出现报错注入。

2.任意文件删除漏洞1

进入/admin/data.php

在第143-144行存在未过滤变量$_POST['bak']并直接拼接到unlink中。

接着进入/admin/blogger.php代码中存在危险函数unlink,跟踪变量$icon_1,该变量来自80行中的sql查询字段photo返回结果,跟踪语句31行中变量$photo通过POST传入,有一些过滤操作,但是我们可以进行绕过。

然后向上 查找, 去找它的调用方式。

漏洞复现:

先通过POST将构造的任意路径变量$photo更新到数据库中($action=update),再通过$action=delicon触发unlink($icon_1),进行任意文件删除

使用burpsuite进行抓包,成功删除x.php文件。

3.数据库备份上传getshell

进入/emlog/init.php 中

发现变量 $action,通过GET方式传入$action[]数组的形式,会出现SQL注入漏洞。

漏洞复现:

进入数据功能处,然后进行备份文件。

在文件中写入phpinfo

接着提示访问报错,我们换一种方式写入。

进入本地文件进行查看,发现文件已经成功写入。

成功访问到phpifo。


4.文件上传漏洞

进入/admin/plugin.php页面可以上传一个zip压缩包,并在后台将压缩包解压成文件

跟踪emUnZip()函数。

漏洞复现

然后使用.zip文件进行测试。成功上传文件。


5.存储型XSS漏洞

/admin/write_log.php添加文章存在html代码形式,尝试直接添加<script>alert('xss')</script>

跟踪到/admin/save_log.php文件

$content变量未对用户的输入进行过滤。

漏洞复现:

进入评论页面。输入xss的payload

然后点击查看。

成功实现弹框。

6.SQL注入漏洞2:

进入admin/navbar.php,发现这里接受POST传入的pages参数,遍历调用addNavi

跟进addNavi函数

发现未对用户的输入进行过滤,导致sql注入漏洞产生。

漏洞利用

进入自定义导航处。

然后进行报错注入尝试。

使用sqlmap进行验证。

7.SQL注入漏洞3

进入data.php,发现bakstart 未对用户的输入进行过滤。

漏洞复现:

POST /www.emlog6.com/src/admin/data.php?action=bakstart HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 96
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/www.emlog6.com/src/admin/data.php?action[]
Cookie: em_plugin_new=block; commentposter=1; postermail=178499%40qq.com; posterurl=http%3A%2F%2F1; XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a223864646366663361383066343138396361316339643464393032633363393039222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d; PHPSESSID=4ia7lpsune36918ksppu61a8dq; EM_TOKENCOOKIE_caff76b1035523472f95e14586cabce5=cdfe196eb124564199f08c42e5970d1f; EM_AUTHCOOKIE_M7UXVI3lOecv3OwT3uWOBeOai1TmLrM1=admin%7C%7C6cf405b484dd316c6f2e1ecc5edfbcf9
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

table_box%5B%5D=emlog_attachment'&bakplace=local&zipbak=y&token=cdfe196eb124564199f08c42e5970d1f

8.任意文件删除2:

进入删除插件功能处。

跟进preg_replace这个函数。

发现对其中部分字符进行过滤,我们可以进行绕过。

漏洞复现:

进入插件功能处,然后点击删除。然后进行抓包。

在文件目录添加一个测试文件。

然后成功删除测试文件。

REF:
https://blog.51cto.com/u_15847702/5808324

https://www.cnblogs.com/cHr1s/p/14262968.html

https://foxgrin.github.io/posts/15210/

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。