信呼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注入就必须在字符串中不出现这些敏感字符
'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注入的形成
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
12 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!