二次注入

Posted by CoCo1er on 2018-10-13
Words 689 and Reading Time 2 Minutes
Viewed Times

二次注入

  1. 二次注入:在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身还是恶意数据。

    在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的 时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注 入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。

  1. 普通注入与二次注入的区别
  • 普通注入:

​ 在url中直接构造语句,立即生效;

​ 容易被扫描工具扫描到,防范起来更容易.

  • 二次注入:

​ 通常先构造语句(有被转义字符的语句);

​ 构造的恶意语句存入数据库;

​ 第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查);

​ 二次注入更加难以被发现.

  1. 原理详解

​ 假如有一个网站管理员的用户名为:root 密码为:123456789 ,攻击者注册了一个账号 : root’— 密码为:123

因为账号当中有特殊字符,网站对于特殊字符进行了转义,一次注入在这就行不通了。虽然账号被转义了,但是他在数据库当中任然是以 root’— 的方式被储存的。

现在攻击者开始实施正真的攻击了,他开始对账号修改密码。普通网站修改密码的过程为:先判断用户是否存在———>确认用户以前的密码是否正确————>获取要修改的密码————->修改密码成功。 在数据库中 — 表示注释的意思,后面的语句不会执行,而root后面的那个单引号又与前面的 ‘ 闭合,而原本后面的那个单引号因为是在 — 之后,所以就被注释掉了,所以他修改的其实是root账号的密码。


下面甩一个CTF—web题实例:(服务器应该不会关的叭..)

http://106.75.72.168:3333/login.php

知识点:

二次注入,sql查询时16进制默认转为字符串

注意点:

可能会出现浏览器编码问题导致页面源码中的hint乱码.

注册账号最好抓包注册.