Mysql 储存过程注入

栏目: 数据库 · Mysql · 发布时间: 5年前

内容简介:mysql有着储存过程这个功能, 这次作者刚好遇到注入点在调用储存过程的sql注入.mysql可以通过以下语句创建一个储存过程sp_name是名字, 为IN的参数是入参,为OUT的参数为返回值

Mysql 储存过程注入

mysql有着储存过程这个功能, 这次作者刚好遇到注入点在调用储存过程的 sql 注入.

基本知识

mysql可以通过以下语句创建一个储存过程

CREATE PROCEDURE sp_name(IN param1 INT,OUT param2 INT)
BEGIN
   # code
END

sp_name是名字, 为IN的参数是入参,为OUT的参数为返回值

调用储存过程的语句

CALL sp_name(1);

注入分析

从语法我们可以分析出我们的输入可能出现在两处,和作为参数进入储存过程

CALL <储存过程名注入点>(<储存过程参数注入点>);

首先如果对参数过滤不严,无需进入储存过程就可以直接注入.用以下语句为例

CALL test([可控点])

由于是直接执行,所以我们可直接注入语句例如 (select 1) .由于语法问题,这个括号是必须的,这语句就变成了

CALL test((select 1))

这种注入和普通注入差别不大,已有技巧基本可以套用.

如果参数不可控,但是方法名可控也可以进行注入.但是首先要得知一个存在的储存过程名,然后通过注释后续语句来进行自己语句

CALL [可控]()

示例poc

test((select updatexml(1,concat(0x7e,(select @@version),0x7e),1))) --

可以看到和参数注入差距不大,只是用于参数不可控,或被安全处理的情况.

最后一种可能,在储存过程中出现.虽然储存过程被认为非常安全,但是实际上如果编写不慎 例如进行动态sql拼接 还是会出现注入的.. 例如

# 来自网上的一个例子 _field和_table是参数
SET @strSql = CONCAT('SELECT ',_field,' FROM ',_table);
PREPARE stmt FROM @strSql;
EXECUTE stmt;

最后附上我遇上的一个漏洞代码

<?php
if (isset($_POST['mode'])) {
    @$m = new mysqli('localhost', 'root', '123456', 'UseStudio_Develop');
    /*省略错误处理*/
    $ary = explode('&', $_POST['mode']);
     if (count($ary) == 1) {
        $sql = 'CALL ' . $m->real_escape_string($ary[0]) . '()';
    } else {
        $sql = 'CALL ' . $m->real_escape_string($ary[0]) . "('";
        for ($i = 1; $i < count($ary); $i++) {
            $sql.= $m->real_escape_string($ary[$i]);
            if ($i < count($ary) - 1) {
                $sql.= "','";
            }
        }
        $sql.= "')";
    }
    
    //执行查询,获取结果集
    $res = $m->query($sql);
    // 省略返回的代码
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网飞传奇

网飞传奇

[美]吉娜·基廷 / 谭永乐 / 中信出版社 / 2014-1-1 / 42

飞的历史充满了传奇色彩,它的崛起伴随着复杂斗争、幸运转折、个人背叛……它自身的历史比它出租的那些电影还要更富有戏剧性。网飞在1997年建立,而建立的原因仅仅是因为创始人伦道夫和哈斯廷斯没有按时归还租借的DVD,还要缴纳因此而产生的滞纳金。 1999年,网飞公司摒弃了百视达的“每片付租”模式,转而采用了一种订阅模式:用户只需要支付固定费用,就能尽情租片观赏,免去了到期还片日、滞纳金、运费和手续......一起来看看 《网飞传奇》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码