这里又调用了authcode方法,我们看一下该方法是怎么玩的。
类似于DZ论坛的加密方式,我们从这里可以知道,该程序是有authkey的。
我们回头继续看一下代码逻辑。
可以看到$uid是未经过任何处理,直接带入到数据库当中的。这里我们如果通过一些方式拿到authkey,那么这个点可以做权限维持。当然,authkey是存放在数据库当中的。如图:
但是遗憾在笔者并没有找到破解authkey的方法(前台注入另说)。
我们回过头来继续通读。
可以看到包含/model/doc.class.php并实例化,在271行调用了doc对象的get_unpubdoc方法。我们跟进。
涉及到网站业务逻辑的词条操作,使用SELECT进行查询。
我们回过头来继续审计。
这里init_template方法是用来定义$this->view是template(View)类的实例化,template类我们限制先放到这里不说,到后面我们审计到模板注入时再拿过来细说。
回过头来继续审计。
init_global方法主要调用网站内的业务信息。这里主要关注在261-262行身上。
我们跟进writeLog方法,看一下该方法是如何定义的。
可以看到登录后台的一系列操作都会被写入到日志当中,笔者这里日志被写入到了data/logs/202012_adminaccess.php文件中,如图:
我们回过头来继续通读。
init_mail方法检测/data/mail.exists文件是否存在,如果存在则可以发送邮件等操作。
init_admin是来判断当前的登陆状态,如果非管理员则跳转到管理员登录界面。
控制器结构了解完毕后我们开始挖掘漏洞。
0x03 后台存储型XSS漏洞存储型XSS漏洞无非就是入库前可插入/修改成未被过滤的Js代码,在前端中显示出来。
在/control/admin_focus.php的doedit方法中。