【粉丝福利】PHP代码审计之wuzhicms(二)

简介: 【粉丝福利】PHP代码审计之wuzhicms

3.csrf

在测试功能点:系统设置 => 权限管理 => 添加管理员 处我们点击提交

1dd54a2b55a6d95d9f0d35be54167e6f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

89975120fe0c8fd119c543bc403c5a3b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过提示我们了解到必须存在一个前台账户,然后才可以将前台账户绑定为系统管理员,而前台账户是可以注册的。

7bab493a0113e9ca53bdf03a7f226f83_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5f826d29466b9230c16d3eb16db8e847_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

路径:

/index.php?m=core&f=power&v=add&&_su=wuzhicms

e109cce38470d40de40ed219963cac81_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过路由找到对应代码

从最上面的注解就可以看出 add() 函数是用于添加管理员的,35-37行代码判断是否点击提交操作,然

后判断用户名是否为空,不为空则将传入的 username 值赋值给 $username

abe690b6fb2fb052ace65c2130679aa1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在代码38行处根据用户名

从数据库中取出前台账户,如果该前台用户不存在则会提示如下内容,也就是我们上面的提示,在40行代码判断该用户是否已经是管理员,而44-51行代码是判断添加管理员时是否设置密码.

1165995fd7717ba22fe6cb1f84421a79_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2f719a11b7aad03909684750184165b7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4.目录遍历

通过全局搜索 glob 函数发现一处功能点处可能存在目录遍历,这里的 glob() 函数中 $dir 参数可控

17503d9f4cf15885ff0166b37f8cada0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

上面代码29行通过 template() 函数渲染 listing.tpl.php 文件,将我们目录下的内容遍历出来并显示在前端页面。

a6449bd628810e970b7de649b032a6c5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

添加我们所需要的 dir 参数,由于上面的代码存在过滤且这里仅仅是将传入的内容替换为空而且只替

换一次,通过 ...../// 的形式来绕过该处的过滤实现目录遍历

cbf55d876351b1ea5a4cc4be00a69a6d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

bcafbce893f9509846539ae44c0f6eac_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

5.任意文件删除

全局搜索危险函数 unlink() ,发现该处存在一个 my_unlink() 函数调用了 unlink() 函数并

且通过注解也可以大致了解到该函数是用来删除附件的,这里的 $path 参数传递需要删除的文件。

接下来我们的思路是两点:一是看哪些功能点调用了 my_unlink() ,二是看调用处 $path 是否可以控制。

be35a6d4d14b8def3a9227e7eee0ca6f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过上面的思路,我们 Ctrl+鼠标左键 点击该函数,发现有三处功能点调用了 my_unlink() 函数。

这里我们发现其中一处 del() 函数调用了该功能点进行文件删除.

90863c2656b45fd63d676596e7cf6221_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

上面的176、177行代码需要我们传入两个参数id、url,这里需要看看177行代码处的remove_xs()函数中进行了哪些过滤。

23fe846f9c40719909a7334b539470e3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过上面一系列的过滤最终返回我们过滤后的内容。

b5545fea4960b46d456e4cafbf981a16_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

ca93183876ccb8d64604afed78b5322e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

我们再接着看代码,我们如果传入id参数,这里的path参数是从数据库中拿到的,我们不能控制。

4bc8abe2faaabdb582165880e41d3bb2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

如果不传入id参数则会走下面的else,在207行代码处判断我们传入的 path 是否在数据库中,如果不在就

会进入208行代码,对我们传入的 $path 进行删除

04428ccbb5f481ba464be1d1cc488cb6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

漏洞复现:

2456eba2b67e843132885cc91ee15c30_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

我们看到数据包中的路由其实与我们分析的代码是一样的.

GET /www/index.php?v=del&url=qr_image/mobile.png&m=attachment&f=index&_su=wuzhicms&_menuid=29&_submenuid=52 HTTP/1.1
Host: www.wuzhicms.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.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
Connection: close
Referer: http://www.wuzhicms.com/www/index.php?dir=.%2Fqr_image&m=attachment&f=index&v=dir&_su=wuzhicms&_menuid=29&_submenuid=52
Cookie: PHPSESSID=k652a136tnltn7n1obr88jo5h6; fbp_uid=QO%2BEiNPcY77ztIj3VwL07Q%3D%3D; fbp_username=qPFUCdQQfkRNinLQXE3qZA%3D%3D; fbp_wz_name=CfApQiRkuXByfw7AqHDG5A%3D%3D; fbp_siteid=MCakL%2FitF2Mz8zst4dyFvQ%3D%3D; fbp_userkeys=u0CzDoL6HLYQwPI%2Ffgo2bg%3D%3D
Upgrade-Insecure-Requests: 1

在更目录下创建一个 ceshi.txt 用于测试

b6da1f6a1438ca3812ec496e59169eb6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

成功将test.txt删除。

66b81312bdd2ef8dbb176df1f6e70bc6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


sql注入(后台)

先直接全局搜索select

5783a751df6f3a039d66d9043d30fc7a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过全局搜索 在这个地方 发现调用了这个函数

4732199b0db4a5f371aa2a3d3ed9efaa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

然后查看传递的参数

主要传递的是55行这个$where参数 传到了函数

b985f81e0fc3a1297e454156b9bde54e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

继续看$keywords 因为这个没调用函数 但是调用了一个$GLOBALS来获取值

这里就又要介绍下$GLOBALS

97e48b905798e197b7ef74a5187406a9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在这个文件看见了广告管理的注释

129153e9998f3c780c8e65c6b9a7baaf_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

ff3a5ab80705872e481c7b2dadf52c32_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

相关文章
|
安全 小程序 PHP
PHP代码审计(七)Rips源代码审计系统使用教程
上一篇中提到的Seay源代码审计系统是由C#编写的winform程序,现在已经停止更新了,但是,还是比较好用的。 PHP代码审计还有另一个工具,也是一个神器Rips
319 0
|
4月前
|
JSON PHP Apache
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
41 1
|
4月前
|
SQL 安全 API
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
107 4
|
4月前
|
前端开发 网络安全 PHP
PHP代码审计之MVC与ThinkPHP简介
PHP代码审计之MVC与ThinkPHP简介
42 2
|
4月前
|
监控 安全 网络安全
PHP代码审计之简单思路方法
PHP代码审计之简单思路方法
157 1
|
6月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
7月前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)
|
NoSQL 关系型数据库 MySQL
使用redis实现关注粉丝功能(php版) 2020-07-12染念 染
redis不用说啥了,比mysql有的是可以吹的地方,于是很多人选择用redis来实现这类操作频繁的场景 @(汗) 但是下午第一次安装redis花了好多时间... 这里借用[button href="https://www.jianshu.com/p/e3f0b98a78bc"]Redis实现用户关注功能[/button]的思路
60 0
|
XML 开发框架 .NET
代码审计之PHP基础铺垫
代码审计之PHP基础铺垫
90 0
|
24天前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
32 0