php培训

新闻中心

行业资讯

代码审计 phpcms 962 任意文件下载与前台SQL注入
2018-03-13 09:19| | 打印|

       

    最近做代码审计的时候发现phpcms 有更新,现在漏洞详情基本不公开,想要知道漏洞的利用方法只能自己审计了,通常可进行新旧版本的代码比较了,来定位旧版本的漏洞位置,便下载了phpcms 9.6.3与phpcms 9.6.1 和phpcms 9.6.2的源码进行比较和审计,发现phpcms 9.6.2 中存在任意文件下载补丁绕过和前台SQL注入,便撰写了本文做个记录,期待和师傅们的各种交流和讨论。

  如下图所示,可以直接绕过正则,但是要使用什么字符进行绕过并且还能正常访问到相应PHP文件呢?这里可以使用一些空白字符来进行绕过。

  代码中虽然使用了trim去除前后的空白字符,但是trim是存在安全隐患的。

  %81-%99间的字符是不会被trim去掉的且在windows中还能正常访问到相应的文件,如下图所示。

  因此通过使用%81-%99间的字符来绕过补丁进行任意文件下载,需要构造好a_k的值,才能进行下载,利用代码分析就不在做了与之前的phpcms 9.6.1漏洞是一样的,如下是利用方法的操作步骤:

  第三步:将GET请求中的a_k参数的值设置为第二步请求获得的YDVIB_att_json参数的值,并进行如下请求。

  最后点击”点击下载”的按钮进行如下请求,便可以下载/caches/configs/system.php文件,得到里面的’auth_key’

  再通俗些的话:sys_auth方法对cookie中包含auth的参数名对应的密文值,先使用配置文件中的auth_key进行sys_auth得到的值作为第一次解密后的值,然后使用配置文件中的auth_key的值与客户端请求的IP拼接做MD5加密的值做为新的key,第一次解密后的值与新的key最后传入sys_auth进行解密得到最终的明文。

  使用配置文件中的auth_key的值与客户端请求的IP拼接做MD5加密的值做为新的key,使用新的key与明文进行sys_auth得到的值作为第一次加密的密文,然后使用配置文件中的auth_key作为key与第一次加密的密文传入sys_auth得到的值作为最终的密文,也就是cookie字段名称中包含auth的参数对应的值。

  如下是将各个文件中的加密解密方法抓取出来稍作修改,在本地进行payload的加解密操作:

  最终利用的现象,cookie中的YDVIB_auth参数名称,前缀是安装时候生成的可能不一样,可以在配置文件中找到对应的值,可以先注册普通用户然后看服务端下发的cookie中字段名称中xxx_auth的参数名称,便是存在漏洞的位置。

  phpcms 9.6.2 版本的任意文件下载补丁可绕过,导致可下载配置文件,获得key,然后利用得到的key可以进行SQL注入,当然key还可以进行很多其他操作,本篇没有涉及,如果师傅们有好的示例或文章,期待一起交流。


版权所有:PHP教程,株洲PHP培训,IT培训机构|
扫描二维码
关注PHP培训
官方微信
返回顶部