专栏首页FreeBufHongcms 3.0.0后台SQL注入漏洞分析

Hongcms 3.0.0后台SQL注入漏洞分析

* 本文作者:BlackWater,本文属FreeBuf原创奖励计划,未经许可禁止转载。

一、背景介绍

HongCMS是一个轻量级的中英文企业网站系统,访问速度极快,使用简单,程序代码简洁严谨,功能强大,完全免费开源,可用于建设各种类型的中英文网站,同时它是一个小型开发框架。

二、漏洞描述

程序在后台进行清空数据库操作时对传入的数据库名过滤不严格,可插入和执行恶意sql语句。

三、影响版本

Hongcms < 3.0.0

四、漏洞细节

首先,我们登录到网站后台管理定位到系统-→数据库维护。

系统默认情况下只允许我们对sessions和vvc数据表进行清空操作,我们随机选择一个,此处我使用vvc表来进行分析,随后我们点击清空按钮并结合phpstorm对执行流程进行动态调试。为了方便大家能清楚地看清执行过程,笔者已经在关键的函数位置设置了断点。

首先程序在APP.php第170行使用call_user_func函数对接受的参数进行动态函数回调:

跟进operate:

将数据表名称传递给ForceStringFrom函数,继续跟进ForceStringFrom:

ForceStringForm通过$_GET[$VariableName]获取我们传递的tablename参数值并传递给了ForceString,跟进ForceString

ForceString判断Invalue是否为字符串之后随即将值传递给给EscapeSql,函数进行安全过滤,继续跟进。

首先函数判断了gpc是否开启,如果开启则使用stripslashes进行过滤,否则将使用htmlspecialchars并对\0和空格字符进行了替换,随后判断mysql_real_escape_string或mysql_escape_string函数是否存在,并调用相应的函数进行编码,否则使用addslashes。随后程序进入switch语句进行动作匹配,根据不同的action参数值进行相应的操作。

我们定位到emptytable,程序将tablename值传入了EmptyTable函数。

跟进EmptyTable。

在这里我们看到定义了要执行的sql语句,并将其传入了exe函数,跟进exe。

Exe接收了传递的sql语句后随即进行了执行,并返回执行结果。

最后调用PrintResults将结果打印到后台显示,我们可以看到在整个执行过程中程序仅仅使用了内置的函数和简单的替换函数对传入的参数值进行了安全处理,而这些函数是可以被绕过的。

五、漏洞复现

经过上一节的分析,下面我们就要着手构造我们的sql语句,同样我们定位到数据表操作的页面点击要清空的数据表,随后我们用burp截断来修改我们的数据表名称来注入我们构造的sql语句。

此处我们将数据表名称改为where vvcid=1 orupdatexml(2,concat(0x7e,(version())),0) or

同样我们来跟踪我们传入的参数值:

可以看到我们成功的绕过了程序的安全防护并正确的进行了返回,我们继续往下走看看最终的要执行的sql语句,是否是我们想要的结果。

看到执行的sql语句和我们预想的一样,我们返回后台页面看看执行的结果:

可以看到当前使用的数据库版本已经被查询了出来。

六、修补措施

系统已停止维护,可以考虑自行安装WAF进行防护。

* 本文作者:BlackWater,本文属FreeBuf原创奖励计划,未经许可禁止转载。

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第一只WiFi蠕虫的诞生:完整解析博通WiFi芯片Broadpwn漏洞(含EXP/POC)

    过去的几个月里,Android 和 iOS 数十亿台设备中都曾出现过可怕的 WiFi 远程代码执行漏洞 BroadPwn。谷歌 7 月初发布了修复补丁,而苹果则...

    FB客服
  • 一个二进制POC的诞生之旅CVE-2018-0802

    背景 在潜伏17年的“噩梦公式”漏洞(CVE-2017-11882)被曝光修补之后,之前的漏洞程序EQNEDT32.EXE在windows 10系统下仍然没有开...

    FB客服
  • LIFX智能灯泡漏洞泄露WIFI密码

    最近有安全研究人员报告LIFX灯泡存在漏洞,黑客可以在距离灯泡30米内获取灯泡连接的WIFI密码。LIFX灯泡使用aes加密wifi密码,其加密密钥是固定的,通...

    FB客服
  • Reddit 如何实现大规模的帖子浏览计数

    对浏览计数有四个主要要求,满足这四项要求比听起来要复杂得多。 -- Krishnan Chandra 本文导航 ◈ 计数方法 08% ◈ 总结 88% 编译自 ...

    企鹅号小编
  • Spring Boot处理REST API错误的正确姿势

    如何正确的处理API的返回信息,让返回的错误信息提供更多的含义是一个非常值得做的功能。 默认一般返回的都是难以理解的堆栈信息,然而这些信息也许对于API的客户...

    ImportSource
  • GitHub上传文件不能超过100M的解决办法

    honey缘木鱼
  • 数据层应该分为两个部分,这样可以更好的“分工”,各自研究自己的功能

         数据层应该分为两个部分(并不是说一定要变成两层)第一个部分是处理SQL语句,包括存储过程的名称,存储过程的参数(一下的SQL语句都包含存储过程名称和存...

    用户1174620
  • 业界 | 斯坦福大学Brainstorm神经形态芯片:未来计算的新方向

    选自Nextplatform 作者:Nicole Hemsoth 机器之心编译 参与:李泽南、李亚洲 随着摩尔定律终点的临近和机器学习对计算需求的提升,人们对于...

    机器之心
  • 实时错误 '91' :对象变量或with块变量未设置

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • SQL注入的原理

    Sql注入攻击  SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作...

    cn0sec

扫码关注云+社区

领取腾讯云代金券