test
前言
最近由于肺炎疫情的原因在家没事,决定趁此机会学学代码审计,从网上找了款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文件,看到文件的命名规则,
文件命名规则为当天时间的时间戳+数据库用户+数据库密码,并且是未授权访问