欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

HDWiki v6.0最新版referer注入漏洞

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

近期在审计HDWiki 6.0最新版cms的时候发现由referer导致的sql注入问题。SQL注入我们知道是由于代码与数据没有严格区别限制分离而导致的问题,OWASP TOP 10常年把SQL注入放在TOP 1的位置,可知SQL注入的危害以及影响力是很大的。
SQL注入我们一般平时寻找的时候习惯性的只从GET,POST提交的数据进行测试(比如跑sqlmap的时候),但是其实如果我们仔细一想注入产生的条件是什么,SQL注入是客户端提交的数据未严格过滤限制进入数据库执行而导致的问题,只要是与数据库可以交互的地方都可能存在SQL注入问题,这点白盒审计的时候经常会遇到,比如cookie注入,User-Agent注入,referer注入,X-Forwarded-For注入等,这些点都是可以与数据库进行交互的,如果未作严格限制,就会导致注入问题。
0×01 白盒审计
源码信息:HDwiki v6.0
问题文件: \hdwiki\control\user.php
漏洞类型:sql注入
站点地址:http://kaiyuan.hoodong.com/download/
环境:php版本小于5.4且开启gpc
具体安装就不讲了,遇到问题可以百度一下哈。
安装成功之后进入主界面如下,

可以看到存在登录页面,好我们去看下登录部分存不存在问题;
通过白盒审计工具seay我们找到登录部分为control/user.php

 
  可以看到dologin()函数里add_referer()函数,继续跟进此函数;

在model/user.class.php文件里,超全局变量$_SERVER['HTTP_REFERER']带入数据库而执行,也就是referer参数,但是我们看到前面存在haddslashes函数,是用来过滤的,继续跟进此函数;
在lib/string.class.php文件里

此函数确实是过滤用户输入的,当gpc未开启的时候使用addslashes()函数进行过滤,当开启gpc的时候直接返回,那么问题就来了,当php开启gpc的时候直接返回字符串,但是gpc是只针对$_GET,$_POST,$_COOKIE三种超全局变量进行过滤的,即referer是不受限制的,还有gpc在php版本大于等于5.4之后是弃用的,所以当php版本小于5.4的时候只要php开启gpc,referer就不受任何过滤直接带入数据库执行,所以就存在注入问题了。
0×02 漏洞利用
此处由于没有任何数据的回显只能通过盲注进行SQL注入,我们使用延时注入,我们使用抓包工具burpsuite抓取登录界面如下;
http://127.0.0.1/HDWiki-v6.0UTF8-20170209(2)/hdwiki/index.php?user-login

可以看到没有referer参数,我们手工添加referer并且带上payload;
$this->db->query("UPDATE ".DB_TABLEPRE."session SET referer ='".string::haddslashes($_SERVER['HTTP_REFERER'])."' WHERE sid='".base::hgetcookie('sid')."'");   
由于带入数据库的时候是UPDATE语句并且使用WHERE语句所以我们不能使用and需要使用where接入payload并且使用注释符过滤后面程序原有的语句,最终payload为;
referer:' where if((substr((select password from wiki_user where username='admin'),1,1))='e',sleep(3),0)#
但是刚开始测试的时候发现延迟不了,后来发现需要登陆进去,可以随便注册一个账号进去。

可以看到成功延时注入,当管理员账号密码第一位为’e'的时候延时三秒返回。
0x03POC
用python完成poc把管理员账号的密码打出来;

测试结果如下;

成功打出admin的密码信息了。
 

近期在审计HDWiki 6.0最新版cms的时候发现由referer导致的sql注入问题。SQL注入我们知道是由于代码与数据没有严格区别限制分离而导致的问题,OWASP TOP 10常年把SQL注入放在TOP 1的位置,可知SQL注入的危害以及影响力是很大的。
SQL注入我们一般平时寻找的时候习惯性的只从GET,POST提交的数据进行测试(比如跑sqlmap的时候),但是其实如果我们仔细一想注入产生的条件是什么,SQL注入是客户端提交的数据未严格过滤限制进入数据库执行而导致的问题,只要是与数据库可以交互的地方都可能存在SQL注入问题,这点白盒审计的时候经常会遇到,比如cookie注入,User-Agent注入,referer注入,X-Forwarded-For注入等,这些点都是可以与数据库进行交互的,如果未作严格限制,就会导致注入问题。

www.wnhack.com

0×01 白盒审计
源码信息:HDwiki v6.0
问题文件: \hdwiki\control\user.php
漏洞类型:sql注入
站点地址:http://kaiyuan.hoodong.com/download/
环境:php版本小于5.4且开启gpc
具体安装就不讲了,遇到问题可以百度一下哈。
安装成功之后进入主界面如下,

可以看到存在登录页面,好我们去看下登录部分存不存在问题;
通过白盒审计工具seay我们找到登录部分为control/user.php

 
  可以看到dologin()函数里add_referer()函数,继续跟进此函数;
www.wnhack.com
在model/user.class.php文件里,超全局变量$_SERVER['HTTP_REFERER']带入数据库而执行,也就是referer参数,但是我们看到前面存在haddslashes函数,是用来过滤的,继续跟进此函数;
在lib/string.class.php文件里

此函数确实是过滤用户输入的,当gpc未开启的时候使用addslashes()函数进行过滤,当开启gpc的时候直接返回,那么问题就来了,当php开启gpc的时候直接返回字符串,但是gpc是只针对$_GET,$_POST,$_COOKIE三种超全局变量进行过滤的,即referer是不受限制的,还有gpc在php版本大于等于5.4之后是弃用的,所以当php版本小于5.4的时候只要php开启gpc,referer就不受任何过滤直接带入数据库执行,所以就存在注入问题了。
0×02 漏洞利用
此处由于没有任何数据的回显只能通过盲注进行SQL注入,我们使用延时注入,我们使用抓包工具burpsuite抓取登录界面如下;
内容来自无奈安全网

http://127.0.0.1/HDWiki-v6.0UTF8-20170209(2)/hdwiki/index.php?user-login

可以看到没有referer参数,我们手工添加referer并且带上payload;
$this->db->query("UPDATE ".DB_TABLEPRE."session SET referer ='".string::haddslashes($_SERVER['HTTP_REFERER'])."' WHERE sid='".base::hgetcookie('sid')."'");   
由于带入数据库的时候是UPDATE语句并且使用WHERE语句所以我们不能使用and需要使用where接入payload并且使用注释符过滤后面程序原有的语句,最终payload为;
referer:' where if((substr((select password from wiki_user where username='admin'),1,1))='e',sleep(3),0)#
但是刚开始测试的时候发现延迟不了,后来发现需要登陆进去,可以随便注册一个账号进去。
copyright 无奈人生

可以看到成功延时注入,当管理员账号密码第一位为’e'的时候延时三秒返回。
0x03POC
用python完成poc把管理员账号的密码打出来;

测试结果如下;

成功打出admin的密码信息了。
  无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。