百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

SQL注入详解 sql注入详解 pdf下载

liebian365 2024-10-28 17:15 8 浏览 0 评论

一、SQL注入

  • 注入攻击的本质,是把用户输入的数据当做代码执行。这里有两个关键条件,

  • 第一个是用户能够控制输入;

  • 第二个是原本程序要执行的代码,拼接了用户输入的数据。

var sql = "select *  from tableName  where  name='" + "test" + "'";

这个“拼接”的过程很重要,正是这个拼接的过程导致了代码的注入。

如果是一条update/delete语句,就可能会造成严重的后果。

在SQL注入的过程中,如果网站的Web应用程序抛出异常信息,比如攻击者在参数中输入一个单引号“'”,引起执行查询语句的语法错误,而错误信息显示在页面上,对于攻击者来说,构造SQL注入的语句就可以更加得心应手了。

当Web应用程序不显示异常信息,可以使用“盲注”(Blind Injection)的技巧。

二、盲注(BIind Injection)

所谓“盲注”,就是在服务器没有错误回显时完成的注入攻击。服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”,所以攻击者必须找到一个方法来验证注入的SQL语句是否得到执行。

最常见的盲注验证方法是,构造简单的条件语句,根据返回页面是否发生变化,来判断SQL语句是否得到执行。

比如,一个应用的URL如下:

http://localhost:88/person.aspx?id=2

执行的SQL语句为:

select *  from tableName  where  id=2

如果攻击者构造如下的条件语句:

http://localhost:88/person.aspx?id=2 and 1=2

实际执行的SQL语句就会变成:

select *  from tableName  where  id=2 and 1=2

因为“and 1=2”永远是一个假命题,所以这条SQL语句的“and”条件永远无法成立。对于Web应用来说,也不会将结果返回给用户,攻击者看到的页面结果将为空或者是一个出错页面。

为了进一步确认注入是否存在,攻击者还必须再次验证这个过程。因为一些处理逻辑或安全功能,在攻击者构造异常请求时,也可能会导致页面返回不正常。攻击者继续构造如下请求:

http://localhost:88/person.aspx?id=2 and 1=1

当攻击者构造条件“and 1=1”时,如果页面正常返回了,则说明SQL语句的“and”成功执行,那么就可以判断“id”参数存在SQL注入漏洞了。

在这个攻击过程中,服务器虽然关闭了错误回显,但是攻击者通过简单的条件判断,再对比页面返回结果的差异,就可以判断出SQL注入漏洞是否存在。这就是盲注的工作原理。

三、Timing Attack

利用 MySQL的BENCHMARK()函数,可以让同一个函数执行若干次,使得结果返回的时间比平时要长;通过时间长短的变化,可以判断出注入语句是否执行成功。这是一种边信道攻击,这个技巧在盲注中被称为Timing Attack。

或者使用微软SQL Server的 waitfor delay '0:0:5' 它用来指定等待的时间。如果将该语句成功注入后,会造成数据库返回记录和Web请求也会响应延迟特定的时间。由于该语句不涉及条件判断等情况,所以容易注入成功。根据Web请求是否有延迟,渗透测试人员就可以判断网站是否存在注入漏洞。同时,由于该语句并不返回特定内容,所以它也是盲注的重要检测方法。

比如构造的攻击参数id值为 :

select * from employee where id=1 if(SUBSTRING(DB_NAME(),1,1)='t') waitfor delay '0:0:5'

这段sql判断数据库名的第一个字母是否为t。如果判断结果为真,则会通过waitfor delay '0:0:5'造成SQL执行延时;如果不为真,则该语句将很快执行完。攻击者遍历所有字母,直到将整个数据库名全部验证完成为止。

四、数据库攻击技巧

找到SQL注入漏洞,仅仅是一个开始。要实施一次完整的攻击,还有许多事情需要做。将介绍一些具有代表性的SQL注入技巧。了解这些技巧,有助于更深入地理解SQL注入的攻击原理。

比如构造的攻击参数id值为以下,则是利用union select来分别确认表名admin是否存在,列名passwd是否存在:

select * from employee where id=1 union all select 1 from amdin
select * from employee where id=1 union all select 1,password from amdin

进一步,想要猜解出username和password具体的值,可以通过判断字符的范围,一步步读出来:

select *from employee where id=1 IF ASCII(SUBSTRING((select top 1 city from Customers),1,1))=49 WAITFOR DELAY '0:0:5'

这个过程非常的烦琐,所以非常有必要使用一个自动化工具来帮助完成整个过程。sqlmap.py就是一个非常好的自动化注入工具。

五、命令执行

在MS SQL Server中,则可以直接使用存储过程“xp_cmdshell”执行系统命令。

在MS SQL Server中,存储过程“xp_cmdshell”可谓是臭名昭著了,无数的黑客教程在讲到注入SQL Server时都是使用它执行系统命令:

exec master.dbo.xp_cmdshell 'cmd.exe dir c:'
exec master.dbo.xp_cmdshell 'ping'

除了xp_cmdshell外,还有一些其他的存储过程对攻击过程也是有帮助的。
比如

六、SQL自动注入工具

学习了SQL注入的相关知识和技术,当发现有SQL注入漏洞的时候,一般都需要发送大量的请求以便从Web应用程序后台的远程数据库中获取需要的信息,这种手动检测方法费时且效率较低,一些专门的软件可以帮助我们进行检测,正确运行这些软件只需要根据界面提示进行相关操作就可以了。这些软件主要有:

七、正确地防御SQL注入

从防御的角度来看,要做的事情有两件:

八、SQL注入的代码层防御:在编写Web应用程序时应该如何进行代码的防御

输入验证防御(JS前端)

输入验证是指在Web页面代码中,用户提交表单数据前,利用一定的规则对输入的数据进行合法性验证。这里的验证不仅要验证数据的类型,还应该利用正则表达式或业务逻辑来验证数据的内容是否符合要求。

Web服务器端数据验证

1、ASP.NET应用程序通过System.Web.HttpRequest类获取用户提交的输入。这个类中包含大量Web应用程序用于访问用户提交的数据的属性和方法。如下表所示:

收到的参数主要有4类,分别是Form参数、URL参数、Cookies参数和Session参数。例如在Web服务器端通过ASP获取这些参数的语句如下。

  • ① Form参数的读取:UserName= Request.Form["User1"];

  • ② URL参数的读取:UserName= Request.QueryString["User1"];

  • ③ Cookies参数读取:UserName=Request.Cookies["User1"];

  • ④ Session参数读取:UserName=Session["User1"];

检查输入数据的数据类型。比如输入时间、日期时,必须严格按照时间、日期的格式,等等,都能避免用户数据造成破坏。但数据类型检查并非万能,如果需求就是需要用户提交字符串,比如一段短文,则需要依赖其他的方法防范SQL注入。

通过代码过滤防御:过滤关键词

"xp_cmdshell","truncate","dump","net user","--","/*"
,"delete","update","insert","exec","count("
,"RESTORE","net localgroup","asc","execute","desc"
,"drop","truncate","char","grant","master","netlocalgroup administrators"

正确地防御SQL注入:

相关推荐

快递查询教程,批量查询物流,一键管理快递

作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...

一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递

对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...

快递查询单号查询,怎么查物流到哪了

输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...

3分钟查询物流,教你一键批量查询全部物流信息

很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...

快递单号查询,一次性查询全部物流信息

现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...

快递查询工具,批量查询多个快递快递单号的物流状态、签收时间

最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...

快递查询软件,自动识别查询快递单号查询方法

当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...

教你怎样查询快递查询单号并保存物流信息

商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...

简单几步骤查询所有快递物流信息

在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...

物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号

最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...

连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息

快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...

快递查询教程,快递单号查询,筛选更新量为1的单号

最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...

掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析

在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...

从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息

在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...

物流单号查询,在哪里查询快递

如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...

取消回复欢迎 发表评论: