热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

怎么快速获取access、SQLServer数据

1.使用access数据库的系统存在SQL注入漏洞;mssql数据库也支持这个技术2.需要知道欲爆数据所在的表的表名以及这个表下的一个字段名,一般都是id字段使用本技术显而易见的优势在于:1.可以不需要引号,过滤引号对本技术没有影响2.可以快速的知道敏感数据的

1.使用access数据库的系统存在SQL注入漏洞;mssql数据库也支持这个技术 2.需要知道欲爆数据所在的表的表名以及这个表下的一个字段名,一般都是id字段 使用本技术显而易见的优势在于: 1.可以不需要引号,过滤引号对本技术没有影响 2.可以快速的知道敏感数据的

  1.使用access数据库的系统存在SQL注入漏洞;mssql数据库也支持这个技术

  2.需要知道欲爆数据所在的表的表名以及这个表下的一个字段名,一般都是id字段

  使用本技术显而易见的优势在于:

  1.可以不需要引号,过滤引号对本技术没有影响

  2.可以快速的知道敏感数据的内容,而不必像以往一样慢慢的猜解,中文、特殊字符等等都通杀

  3.在SQL Server屏蔽了错误信息之后仍然可以快速得到敏感数据内容

  4.可以在不知道关键(欲知数据的)字段名的情况下仍然能够获取到欲知数据

  咋一看可能这个技术很难,其实很简单。一共有两个难点,一般的第一个难点在看到结果以后都很容易想到,但是第二个难点却的确有点点麻烦。

  首先看一个表格,是union的语法。这也是爆出数据的主要原理。如下图所示:

  当我们使用SQL Inject技术插入union语句以后,只要两个select查询得到的列数相同,那么整条SQL语句执行完成以后,得到的查询结果就变成了union后面select得到的数据。所以就有可能将我们所需要的数据爆出来。来看一个简单的例子:

  ?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20admin

  这是一个SQL Server的服务器,关闭了错误信息的回报,所以不能够按照以往的方法直接得到敏感数据。通过SQL Inject插入union语句以后,可以大胆的猜测到所执行的SQL语句变成了:

  select * from Soft where SoftID=3903 union select username,password,1,1,1 from admin

  那么在正常情况下显示Soft第1、2个字段值得地方就会显示admin的username和password字段,后面的3个1也是同理替代了。按照这个特性,我们当然也可以直接得到Admin_UserInfo表里面的username和password字段。构造的语句如下所示:

  ?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20Admin_UserInfo%20where%20username<>

  以上就是简单的利用union来实现对敏感数据的获取,而不通过复杂的暴力拆解。为了实现在不知道字段名同样能够得到其中的数据这个目的的时候,,我们当然就应该想到使用*来代替字段名。这样只要*所代表的字段再加上几个1的数目和脚本中的select查询表中的字段数目相同,那么就同样可以得到不知道字段名的数据了。

  考虑到这样一种情况,有这样一条语句:select id,hit,softname,softURL from soft where id=10。其中能够在网页中正常显示出来的字段是softname和softURL,那么我们在使用union的时候就应该调整*所在的位置,一般admin表中结构为id username password,那么在注入上面这条假设的语句的时候就应该这样构造SQL语句:select 1,* from admin。使*所代替的username和pssword字段处于softname和softURL两个字段的位置上,这样网页才能够将我们想要得username和password字段乖乖的交出来。当然这里只是最简单的一个例子来说明,有很多时候一个表里面可能有十几个字段,我遇到最长的是四十三个字段。那么脚本中使用select *来做查询的话,我们在构造union select就应该用1凑数到四十三个字段。其中当然是会有一些字段不被网页显示出来,这就需要考虑union select后面的*号所在的位置了。相信这个应该不用我多说了。

  上面说的语法完全符合SQL Server。但是Access和SQL Server相比较,真的是小巫见大巫了。在SQL Server里面,当我们使用select *,1,1,1 from admin语句查询得到的记录集合分别是:* 1 1 1。但是在access当中上面的这条语句查询的结果是1 1 1 *,也就是说无论你将*号处于这群1中间的什么位置上,*所代表的?葑苁谴τ诓檠?峁?淖詈竺妗S靡桓龈丛拥愕睦?幼魉得鳎?BR>?id=1916%20union%20(select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16%20from%20admin)

  这个站点使用的是access数据库,可以看到能够正常显示出来的字段是2、3、7、8、10、11,而后面的字段却不会显示出来,去掉14,15,16换上*号,页面同样显示出数字,也就是说admin中的字段数是三个,肯定是id username password这种结构,但是除了id字段其他的字段都不能够被猜测出名字。按照在上面SQL Server中所使用的方法移动*号的位置以求能够将敏感数据爆出来,在access中是不可行的。原因是access始终将*好所代替的字段放在查询数据集的最后面。Access查询出来的结果永远都是:1,2,3,4,5,6,7,8,9,10,11,12,13,*这个样子。为了将*好所代替的字段表示出来,我们必须将*所代替的字段移动到其他位置上。先看结果:

  ?id=1916%20union%20select%201,*%20from%20(((admin%20as%20a%20inner%20join

%20admin%20as%20b

%20on%20a.id=b.

id)%20inner%20join%20admin%20as%20c%20on%20c

.id=b.id)%20inner%20join%20admin%20as%20d%20on%20d.id=c.id)

%20inner%20join%20admin%20as%20e%20o

n%20d.id=e.id

  通过这样构造的语句的执行,最终查询得到的数据形式是

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

  1,a.id a.name a.pwd b.id b.name b.pwd c.id c.name c.pwd d.id d.name d.pwd e.id e.name e.pwd

  其中第3和第7个字段正好就是我们想要得username和password字段的值。这里我使用的是join语法,将两个表连接(相加)起来从而构造得到这样的一个满足我们要求的查询结果。

  Join分为全部连接、左连接和右连接,具体区别可以去查看SQL语法。在这里,access中我们不管选择哪一种连接方式效果都等同于全部连接。看一个简单的join语法

  SELECT *

  FROM (表1 INNER JOIN 表2 ON 表1.序号=表2.序号)

  INNER JOIN 表3

  ON 表1.序号=表3.序号

  转换为实例就是:

  select 1,2,3,4,*

  from ((admin as a inner join admin as b on a.id=b.id)

  inner join admin as c on c.id=b.id)

  inner join admin as d on d.id=c.id

  按照这种格式就可以把上面的那个url真正执行的SQL语句解出来,无非就是不断的使用join连接数据表admin,然后通过1来补齐前面的字段数目。只要语句构建得当,那么不知道字段名的数据全部都能够在页面中显示出来。这就是这个技术的难点所在了。

推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
author-avatar
手机用户2502939545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有