加入收藏 | 设为首页 | 会员中心 | 我要投稿 海洋资讯信息网 (https://www.haijunwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

ASP 变量 从多米Cms SQL注入漏洞学习代码审计

发布时间:2022-10-27 13:00:55 所属栏目:Asp教程 来源:
导读:  0x00 前言

  最近,在逛 @周佩雨 phithon师傅的【代码审计】小密圈时,偶然看到了Thinking师傅写的针对多米(DuomiCms)影视管理系统 V1.32前台SQL注入漏洞的分析文章,对该套CMS的全局过滤规则进行绕过。恰
  0x00 前言
 
  最近,在逛 @周佩雨 phithon师傅的【代码审计】小密圈时,偶然看到了Thinking师傅写的针对多米(DuomiCms)影视管理系统 V1.32前台SQL注入漏洞的分析文章,对该套CMS的全局过滤规则进行绕过。恰好之前我也审计过这套CMS,学习下Thinking师傅的思路,从动态调试的角度分析这个漏洞,同时写出针对该漏洞的完整利用代码。
 
  0x01 环境搭建
 
  DuomiCms V1.32(下载地址:omg2hei/Vulnerability-Env)
 
  PHPStudy
 
  Notepad++
 
  0x02 漏洞分析
 
  根据CNVD漏洞报告(cnvd.org.cn/flaw/show/CNVD-2017-22079)的描述:
 
  多米(DuomiCms)影视管理系统 V1.32前台存在SQL注入漏洞。该漏洞由于系统cardpwd变量未对用户提交的数据进行过滤,远程攻击者可利用漏洞获取数据库敏感信息。
 
  可知,漏洞的入口点在cardpwd变量,所以如果你不熟悉这套CMS也没有关系,我们可以重点关注cardpwd变量及其上下文代码段。
 
  通过Notepad++全局搜索cardpwd变量,可以看到cardpwd变量最初是在duomi\member\mypay.php的第47行通过POST的方式传入并赋值给变量$pwd的。
 
  asp.net session变量_asp insert into变量_ASP 变量
 
  一般来讲,在审计代码前要先分析下Web应用的url路由,才能知道如何构造链接可以执行到存在漏洞的函数。这里由于多米CMS没有做过多的访问限制,可以通过访问.php文件的方式直接访问(127.0.0.1/member/mypay.php),故省去了对url路由的分析环节。
 
  看一下mypay.php前几行的代码:
 
  ASP 变量_asp insert into变量_asp.net session变量
 
  asp.net session变量_ASP 变量_asp insert into变量
 
  由第9-17行、第27-35行可知,要想执行到后面cardpwd参数赋值操作等代码要满足两个条件:
 
  系统未关闭会员功能前台要处于用户登陆状态
 
  ASP 变量_asp.net session变量_asp insert into变量
 
  当然还要满足$dm=='mypay'才能执行elseif分支内的代码。
 
  asp insert into变量_ASP 变量_asp.net session变量
 
  联系下$dm=='mypay'代码的上下文,并没有看到对$dm变量赋值的位置。看到第5行、第7行的文件包含函数,便想到去这两个文件中翻一下。
 
  asp.net session变量_ASP 变量_asp insert into变量
 
  在/duomiphp/common.php文件的第52-55行我们可以看到,此处接收了GET、POST、COOKIE的参数和值。
 
  $_k变量就是参数,$_v变量就是值。
 
  举个例子,当我们访问127.0.0.1/duomiphp/common.php?id=1这个url的时候(即发起一个GET请求),$_k变量被赋值为id,$_v变量被赋值为1,故${$_k}就成为了$id变量(此处有可能产生变量覆盖漏洞,暂时先不做展开分析)。
 
  那么当我通过GET、POST、COOKIE其中一种方式传入dm=mypay时,就完成了赋值的目的,elseif($dm=='mypay')条件成立,该判断分支内的代码会依次执行。
 
  结合
 
  view-source:http://127.0.0.1/member/mypay.php
  前端的代码:
 
  ASP 变量_asp.net session变量_asp insert into变量
 
  可以知道当我们执行充值操作时,向服务端发了一个GET参数dm=mypay,三个POST参数cardkey=xxx,cardpwd=xxx,cardb=%E5%85%85%E5%80%BC(此处为“充值”的url编码形式)。
 
  根据CNVD的漏洞描述cardpwd参数存在SQL注入漏洞,通过在卡号密码输入框这个位置加'引号的报错信息也可以证明这一点。
 
  asp.net session变量_asp insert into变量_ASP 变量
 
  看一下代码,在\member\mypay.php的第51-56行对$key,$pwd两个变量的值做了过滤,然后在后续的几行对变量的内容带入SQL语句中执行,因此如果我们可以绕过前面的过滤,那么就可以利用这个SQL注入漏洞。
 
  一、$notallow1正则表达式解读
 
  [^0-9a-z@\._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]{1,}
  分析正则表达式时可以使用Thinking师傅分享的一个网站:regex101.com/
 
  ^:代表开头,即首字符只能是0-9、a-z、@\._-中的任意一个
 
  {1,}:代表匹配前面的内容出现一个以上
 
  (union|sleep|benchmark|load_file|outfile):即括号内包含的任意字符
 
  总结一下这段正则表达式的意义是:
 
  匹配出现0-9a-z@\._-开头出现一个以上、中间带有union、sleep、benchmark、load_file、outfile、结尾仍为0-9a-z@\._-出现一个以上的字符串。
 
  绕过方法:
 
  /*!50000union select*/
 
  'or'1(通过注入该语句可以实现任意充值)
 
  ASP 变量_asp insert into变量_asp.net session变量
 
  二、步入GetOne()函数遇到的坑点
 
  通过233' /*500000union*/ select or '1,绕过了第52行的正则过滤,继续往下带入SQL语句执行,进入GetOne()函数,仍然存在过滤。
 
  翻一下$dsql->GetOne()函数的具体实现ASP 变量,在sql.class.php第276行
 
  先发出来占坑,未完待续。
 
  0x00 参考链接
 
  多米CMS最新版1.3版本注入 - 漏洞时代 - 最新漏洞_0DaY5.CoM
 
  【代码审计】小密圈
 

(编辑:海洋资讯信息网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章