前言

最近由于肺炎疫情的原因在家没事,决定趁此机会学学代码审计,从网上找了款cms叫zzzcms,下载的php版的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)任意文件读取

首先来看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文件,看到文件的命名规则,


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

点击收藏 | 0 关注 | 1
登录 后跟帖