代码审计 | HDWiki v6.0最新版referer注入漏洞

0×00概述

近期在审计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是只针对_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的密码信息了。

*本文原创作者:davichi8282,本文属FreeBuf原创奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

最新Django2.0.1在线教育零基础到上线教程(五)1-3

演示地址: http://mxonline.mtianyan.cn 教程仓库地址1: https://github.com/mtianyan/DjangoGe...

6246
来自专栏YG小书屋

ElasticSearch 介绍

6113
来自专栏云时之间

Python学习系列:使用pyqt5搭建简单图书管理系统(2)

在上一篇文章里我们简单的说了一下图书管理系统的设计思路,这一篇文章我们将设计一下此系统的数据库.

2163
来自专栏沃趣科技

翻译系列第八弹: 高级知识ASM file extent map

原作者:Bane Radulovic 译者: 庄培培 审核: 魏兴华 DBGeeK社群联合出品 当ASM创建一个文件时(例如数据库实例要求创建一个数...

4615
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用MySQL 5.6配置Galera集群

集群通过不同服务器分发更改来为数据库添加高可用性。如果其中一个实例失败,则其他已可以的实例还能继续服务。

2500
来自专栏Laoqi's Linux运维专列

KVM虚拟主机管理篇

5793
来自专栏码代码的陈同学

Mysql thread 与 OS thread

本文作为 Mysql插入2.6亿条垃圾数据后会发生什么? 、手工重现Mysql插入的”2.6亿”垃圾数据 的续篇,初始目的是想看看kill掉执行中的事务对应的o...

4665
来自专栏Danny的专栏

【SSH快速进阶】——Hibernate自动建表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1494
来自专栏乐沙弥的世界

percona-toolkit的安装及简介

    MySQL数据库是轻量级、开源数据库的佼佼者,其功能和管理,健壮性与Oracle相比还是有相当的差距。因此有很多功能强大第三方的衍生产品,如percon...

1101
来自专栏不止思考

架构师带你玩转分布式锁

当某个资源在多系统之间,具有共享性的时候,为了保证大家访问这个资源数据是一致的,那么就必须要求在同一时刻只能被一个客户端处理,不能并发的执行,否者就会出现同一时...

911

扫码关注云+社区

领取腾讯云代金券