PHP代码审计-emlog6.0.0
一.项目搭建:
使用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/
- 点赞
- 收藏
- 关注作者
评论(0)