【sql注入】二次注入

原文地址

【sql注入】二次注入 – Yoyo&Kiki's Blog (mylovekiki.top)

注入原理

攻击者构造恶意的数据并存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。

防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

利用条件

  1. 插入恶意数据——构造恶意语句并进行数据库插入数据时,虽对其中特殊字符进行了转义处理,但在写入数据库时仍保留了原来的数据;
  2. 引用恶意数据——开发者默认存入数据库的数据都是安全的,在进行调用时,直接从数据库中取出构造的恶意数据,没有进行进一步的检验。

注入实例

Sqli-labs-24

审计代码

在注册新用户时,用mysql_escape_string()函数对输入数据进行字符转义;

mysql_escape_string()与mysql_real_escape_string() 完全一样,均转义字符串中的特殊字符(\x00 \n \r \ ‘ ” \x1a),除了 mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string() 并不接受连接参数,也不管当前字符集设定。

在更改密码时,直接从session中取username,为进行过滤放入修改密码的语句;

实操

插入恶意数据:创建新用户;

username:batman’#

password:123321

单引号虽被转义,但在插入数据库时反斜杠没有被带入;

引用恶意数据:登录并修改密码;

New Password:111111

此时在后端实际执行的代码为:

UPDATE users SET PASSWORD='111111' where username='batman'#' and password='$curr_pass'

batman’# 的单引号对前面的单引号进行了闭合,#注释掉了后面的语句,就相当于对batman进行了改密;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值