概述

从外部带入参数,进行用户注册等等数据插入操作的时候,我们料定程序员会用到mysql的 insert语句。 如果传入的参数没有过滤,则必然存在注入漏洞。
类似这样的SQL语句:

  1. INSERT INTO Persons VALUES ('Bill', '170cm', 'Xuanwumen 10', 'Beijing')

改造成伪代码是:

  1. $name=$_GET["name"];
  2. $sql="insert into mytables values('$name', '170cm','xuamwumen 10','beijing')";
  3. $result=mysqli->execute($sql);

如果可以成功完成sql语句的闭合,则可以完成sql的语句注入。 正确的闭合insert语句是关键。可以改写为:

  1. insert into mytables values('111',1,2,3);delete from mytables; #', '170cm','xuamwumen 10','beijing')

要点提示
在mysql里,多个语句之间的执行靠的是;号来隔离。我们把sql语句执行里多条语句一起执行的方式称之为堆叠执行。

案例提示
image.png
则这个语句的伪代码可以推测为:
insert into members values(1,2,3,4,5,6);
为了方便,我们就从地址这里入手。