zzzcms php 1.7.5版本代码审计初探
2020-02-24 10:22:03 Author: xz.aliyun.com(查看原文) 阅读量:380 收藏

1.7.5版本

1. 后台寻找

后台寻找方法,该后台大部分admin+三位数字,所以可以采用爆破的方式获取后台地址 该后台地址为admin371

2. 验证码问题

(1) 管理员登录面验证码登录

在 admin371/login.php 19行可以看出get_cookie('adminname')不为空就可以绕过,如何获得get_cookie('adminname')的值

在24行可以看出如果存在密码的话会返回cookie中adminpass值,根据返回的adminpass的形式可以推断出adminname的值

可以看到adminpass为zzz920_adminpass,所以推断adminname为zzz920_adminname

可以看到已经在无验证码的情况下已经登录成功了

(2)验证码不刷新不过期

在inc/zzz_main.php中582行可以看到从SESSION中取code的值,在inc/imgcode.php中只要不刷新就不会重新生成code,导致验证码不过期

3. 前端XSS漏洞

http://127.0.0.1/plugins/template/login.php?backurl=1%20onmouseover%3dalert(9516)%20y%3d 该onmouseover事件在移动到登录注册时会触发

对传入的backurl并没有做任何防护

4. 登录后任意文件读取

(1)任意文件读取一

首先来看防护规则,不允许出现./

看 safe_path 只能是upload template runtime路径下的

所以构造/runtime/..\config/zzz_config.php 即可绕过防护

(2)任意文件读取

(参考文档: https://blog.dyboy.cn/websecurity/162.html)

首先来看restore函数,mysql数据库,发现path是可控的,看955行,跟进到load_file函数

在zzz_file.php文件中,如果存在该path,则通过file_get_contents读取

然后现在的想法是如何输入出来,跟进到db_exec()函数
在zzz_db.php中,看str_log把sql语句写入到了log中

在zzz.file.php中,跟进到str_log文件,看到文件的命名规则,

文件命名规则为当天时间的时间戳+数据库用户+数据库密码,并且是未授权访问


文章来源: http://xz.aliyun.com/t/7239
如有侵权请联系:admin#unsafe.sh