PHP代码审计-emlog
本文主要对emlog这个cms进行渗透测试与审计,对多个中高危漏洞复现与分析。
一.项目搭建: ======= 使用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代码形式,尝试直接添加 跟踪到/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://blog.51cto.com/u%5C_15847702/5808324) <https://www.cnblogs.com/cHr1s/p/14262968.html> <https://www.geekmeta.com/article/1118334.html>
发表于 2023-05-31 09:00:00
阅读 ( 6196 )
分类:
漏洞分析
2 推荐
收藏
0 条评论
Arthur
8 篇文章
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!