当前位置: 首页 > news >正文

渗透之sql注入联合查询的注入

sql注入产生的原因:


        由于程序过滤不严谨,导致用户有一些异常输入,最终触发数据库的查询。所以会出现sql注入这个问题。有些恶意的人就会利用这些信息导致数据库泄露。

	注意:一般我们存在注入点我们会查询管理员的账号和密码;但是我们现在是在前端页面下的,我们并不知道管理员的数据在哪个数据库哪张表下的。(我们需要知道在哪个数据库,哪张表,哪个字段下;这个是前提)当我们发现一个注入点是首先将前置条件查询出来:1.mysql的版本号 	select version();2.mysql的权限(用户),如果当前为root那么入侵成功率就很高。  select user();3.当前所在的数据库问题1:你现在有普通用户的权限,查到了管理员的账号和密码:1.管理员的后台找不到 2.管理员的密码破解不了此时该怎么办?回答:挖掘存储型XSS

第一关实际操作:

1:前端输入                

        在这里我们搭建了一个sql注入的靶场,如下图所示,在web的前端页面中使用id来接受用户传递进来的值。将值传递给后端进行处理。

后端处理代码:如下图可知前端web页面输入的值由id传递给后端的sql代码中处理。

2:逃逸单引号

        我们这里就可以思考如何控制用户的输入触发数据的额外查询。要是传递进来的sql语句能够被执行就好了。但是传递进来的所有值都被单引号包裹,全部被变成了字符串,这是我们就要思考如何逃出单引号的包围。

当我们传递进来的不是1,而是1’  时:就会报错,报错的原因就是多了一个单引号,如下图:

       

        这里提示我们有语法错误,那么就意味着我们已经逃逸出了单引号,但是后面还有一个单引号所以会报错。此时我们需要闭合单引号。我们可以使用注释将后面的单引号注释掉:

我们这里的注入点为 1'  ,但是后面还有一个单引号,我们需要将后面的另一个单引号注释掉;
mysql中的三种注释方法:“-- ”:注意后面的空格在web的url中我们需要写为“+”,“--+”#/* */

如下图:并没有报错,说明我们找到了注入点并可以成功的闭合,我们就可以在此处插入sql注入。

我们查看后端页面:

3.使用联合查询进注入

爆破列数:

        使用联合查询需要有一个前置条件,两个表的列相同。我们怎么能够知道这个表有几列?

解决方法:

此时我们就需要一个函数 order by:
                        order by 是排序的意思,通常来说我们是通过字段来排序的,但是order by后面也可以以跟数字;
                        order by 1 :表示根据第一列来排序
                        order by 2 :表示根据第二列来排序

如下图,如果order by后面的数字大于真实的列数时就会报错:我们就可以查出列数:

在sql靶场中进行操作:

当order by  3时页面正常显示,当order  by 4时页面报错,说明我们当前所处的表有3列:

联合查询

我们前面已经知道这张表的列数了,所以这里写三个参数。

如上图,联合查询后还是没有任何变化,原因:

  • 原因:联合查询的条件是前面的条件为假,后面的联合查询才能为真,就意味着前面的已经查到了所以后面的就不执行了。此时我们需要使前面的条件为假,我们有两种方案:
            1:查一个不存在的id
            2:第二种使使用负号

如下图:当传递进来的id为负数,前面的为假,联合查询后面的为真。在name和password字段上就显示2,3。

这里我们发现,前端页面显示的是2,3字段,说明数据就出在这两个字段上。“1”也可以出数据但是没法在前端页面上显示。

此时可以就可以控制2,3字段的内容:

查数据库名,版本号,用户:

将2,3字段替换:查数据库和版本

此时我们就查出了数据库和数据库的版本:

查用户:

爆破表名:

既然已经知道注入点在2,3字段,我们从该字段下手。

之前我们知道自己的数据库名,叫做: security。那么现在我们需要知道本数据库下有哪些表。

此外我们知道数据库存在一个系统自带的数据库: information_schema ;其中包含表的信息。

我们就可以通过查询这个数据库中的信息吧当前数据库下的表全查出来:

注意:基本上mysql中都会存在information_schema这个系统自带的数据库。但是这个数据库只有root用户才能访问,由于我们上面已经查询到了当前的用户为root,所以我们就直接利用它。如果不是root用户还有其他的数据库可以替代它。

我们去查看information_schema数据库具体信息:其中叫tables表中有我们想要的信息,我们可以使用这张表查询我们想要的信息:

开始爆破表名:如下图就爆破出了当前数据库下的所有表名。

在下面几张表中最可能储存用户和密码信息的为users表。但是我们不知道该表的字段名,所以我们继续利用information_schema来爆破字段名。

id=-1%27%20union select 1,group_concat(table_name),3  from information_schema.tables   where table_schema="security"  --+

爆破列名:

在information_schema中,列名在:columns这张表中。

开始爆破表名:如下图就吧列名爆破出来了。

id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema="security" and table_name="columns"--+

爆破具体值:

因为我们现在知道表名以及字段名,我们就可以直接查询(users这张表在本数据库下面):

d=-1' union select 1,group_concat(username,0x3a,password),3 from users--+        

到此,我们成功的完成了一次注入!

http://www.lryc.cn/news/341269.html

相关文章:

  • NLP transformers - 文本分类
  • QT 开发COM(ActiveX)组件基础介绍和方案验证
  • [1673]jsp在线考试管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 每日一算法
  • Spring Cloud Gateway直接管理Vue.js的静态资源
  • 14.集合、常见的数据结构
  • NLP从入门到实战——命名实体识别
  • 接口测试工具-postman介绍
  • 日志中看到来自User Agent go-http-client / 1.1的大量请求(go-http-client 1.1)服务器爆了
  • yolov8 区域声光报警+计数
  • 《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框
  • 用Go实现一个无界资源池
  • Apache Seata基于改良版雪花算法的分布式UUID生成器分析2
  • 13、揭秘JVM垃圾回收器:面试必备知识,你掌握了吗?
  • 治疗耳鸣患者案例分享第二期
  • 数据加密的方法
  • Android BINDER是干嘛的?
  • 运维各种中间件的手动安装(非常详细)
  • 【Android】Android应用性能优化总结
  • FBA头程海运发货流程是怎样的?
  • 二、VLAN原理和配置
  • stackqueue类——适配器模式 双端队列deque(C++)
  • SpringCloud知识点梳理
  • 【NOI】C++程序结构入门之分支结构二
  • web自动化系列-使用普通模式编写测试用例以及存在问题(十六)
  • VSCode 配置 Qt 开发环境
  • 【Jenkins】持续集成与交付 (七):Gitlab添加组、创建用户、创建项目和源码上传到Gitlab仓库
  • L1-017 到底有多二
  • 常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet
  • python笔记 | 哥德巴赫猜想