问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
信呼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文件导入数据库中  将源码拉入到phpstudy的WWW目录下,配置phpstudy  访问该地址localhost:82,进入安装页面,点击知道了  之后进入本地配置,输入自己的数据库密码、获取信呼官网key(需要登录)之后,点击直接提交   之后就得到默认的账号密码  进入到首页登录,输入账号、密码   漏洞分析 ---- 来到`index.php`分析代码  从`$rock`对象中获取`rewriteurl`参数的值,并赋给`$_uurl`变量。 **如果`$_uurl`不为空,则进行以下操作:** - 清除`$_GET`数组中的`m`、`d`和`a`参数。 - 将`$m`设置为`$_uurl`的值。 - 使用`_`分割`$_uurl`,根据分割结果设置`$d`、`$m`和`$a`。 - 解析`$_SERVER['REQUEST_URI']`中的查询字符串,并将参数添加到`$_GET`数组中 **如果`$_uurl`为空,则从`$rock`对象中获取`m`、`d`和`a`参数的值。** **分析代码** 所以,如果没有进行登陆,我们需要给m、d、a三个参数分别传入相对应的值。在POC中使用get传参 `?m=openmodhetong|openapi&d=task&a=data` `/webmain/task/openapi/openmodhetongAction.php`  通过跟进到这里我们会发现a后面的参数是对应方法的名字 `nickName`对应的方法是`dataAction`,所以poc里面a的参数的值为`data`  从这个地方也能看出来,  `m`的值是调用openapi,在源码目录下找到这个地方  `d`的值是一个固定的值为`task`  **然后进入到task/openapi/openmodhetongAction.php的dataAction方法中**  该方法是通过get方法依次获取请求中的`moblie、xcytype、nickname`等参数,并将这些参数赋值给`uarr`数组中, 之后根据`row($where)`的返回值不同给`$uarr['adddt']`或`$uarr['optdt']`赋值,最后调用`record`方法进行数据库查询 我们进入到get方法中查看是否有什么过滤、点击ctrl进入到get方法声明中  接着进入到`rockClass.php`中  这个方法只是判断是否进行get传参如果传参成功就进行赋值操作, 之后进行非空判断,调用`jmucade`方法()将其值返回。该方法中并没有对sql语句进行过滤 我们回到这个类的头部发现,重新定义了`\_\_construct()`魔术方法  当我们创建一个rockClass对象时,会自动调用这个魔术方法。这个魔术方法会过滤大部分sql注入一些敏感字符,如果想要造成sql注入就必须在字符串中不出现这些敏感字符 ```php '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中  发现这个`nickName`参数经过get传参后会进行dase64ecode方法进行base64解密, 那么如果我们将`nickNname`传入恶意的sql语句进行base64编码,就会绕过`rockClass.php`中的`\_\_construct`方法中的sql语句的过滤, 之后进行base64解密又拼接到sql语句造成sql注入的形成 POC --- ```php 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 ``` 漏洞复现 ---- 
发表于 2024-08-30 09:00:00
阅读 ( 8349 )
分类:
OA产品
1 推荐
收藏
0 条评论
请先
登录
后评论
xhys
12 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!