emlog 6.0.0审计
后台删除评论sql注入
admin/comment.php
当action为delbyip时,判断token,并且GET传入的ip地址未经过滤带入delcommentbyip方法。跟踪该方法。定义在include/model/comment_model.php的150行。
可以看出这个函数直接将传入的参数$ip,代入”SELECT DISTINCT gid FROM “.DB_PREFIX.”comment WHERE ip=’$ip’”进行sql查询,此过程中未发现任何过滤行为,我们只需通过封闭单引号然后进行报错注入。
在后台管理评论处选择根据ip删除评论并抓包。
payload:' and extractvalue(0x0a,concat(0x0a,(select+version())))#
需要进行url编码。
插件上传getshell
/admin/plugin.php
当action为upload_zip时,判断上传文件是否为空,然后判断后缀名是否为zip,之后调用emUnZip函数解压压缩包到目录../content/plugins/下。跟踪emUnZip函数。
在解压的过程中会对压缩包里的文件名称进行判断,如果你压缩包名称为test则压缩包里必须存在test.php文件,否者会进行报错。
上传点
!
存储型xss
/admin/link.php
当action为addlink时,通过addslashes函数进行转义处理,防止进行sql注入,但是未进行任何的html实体化,或者过滤处理。通过第44行代码可发现进行了正则匹配所以我们构造的payload需以http、ftp开头,才能进型数据插入。之后通过addLink函数插入。跟踪该函数。
发现直接将数据插入数据库。
当action为空时,调用getLinks函数,跟踪发现
直接查询数据库,而后跟踪输出函数。
发现直接通过echo函数进行输出。
模板文件上传getshell
根据刚才的上传漏洞发现在admin/template.php页面也调用了emUnZip函数解压。
成功上传。