问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求教谁给讲讲SQL注入攻击的步骤

发布网友 发布时间:2022-04-21 22:04

我来回答

3个回答

懂视网 时间:2022-04-07 21:03

这里,$EMAIL是由用户通过表单提交的电子邮件地址,而这段较长的查询提供的应用符号,是为了使得这个$EMAIL成为一个真正的字符串。我们不知道 这个数据域的确切的名字或者是于此相关的数据表的名字,但是我们却了解他们的特性,而此后我们将会得到一些很好的猜测结果。

当我们输入steve@unixwiz.net‘ - 留意那个结尾的引号 - 这将产生出一个如下构建的SQL:

  1. SELECT fieldlist FROM table WHERE field = ‘steve@unixwiz.net‘‘; 

当这个SQL被执行的时候,SQL分析器发现了多余的引号,从而中止了工作,并给出一个语法错误。而这个错误如何表述给用户,取决于应用程序内部错误修复 的过程,但是这通常不同于“电子邮件地址不存在”的错误提示。这个错误的响应是致命的第一通道,既用户的输入没有被正确的清理,而因此应用程序成为了破解 的美食。

由于我们输入的数据显然位于WHERE子语句中,让我们用合法的SQL方式改变一下这个子句的本貌并看看会发生什么。通过输入任何一种‘OR ’x‘=x语句,结果SQL成为:

  1. SELECT fieldlist FROM table WHERE field = ‘anything‘ OR ‘x‘=‘x‘; 

因为应用程序没有真正的对这样的查询有所考虑,而仅仅是构建一个字符串,以致于我们使用的引号使得一个单元素的WHERE子句,变成了一个双元素的子句, 而且’x‘=x字句是确定为真的,无论第一个字句是什么。(有一种更好的方式来确保“始终为真”,这部分我们后面会谈及)

不过与“真实”的查询不同,本应当一次返回一个单独的项,这个版本必然会返回成员数据库里面的每一个项。唯一的可以发现应用程序在这种情况下会做什么的方式,就是尝试。不断尝试,我们留意到以下结果:

你的登录信息已经发送到 random.person@example.com.

我们一般都会把查询返回的第一行作为作为猜测的主要入口。这哥们确实从E-mail里拿回了他的密码,同样这个邮件可能会让他感到吃惊并且会引起怀疑。

现在我们知道怎么在本地玩这条查询了,虽然目前我们还不知道我们看不到的那部分SQL结构是怎么拼起来的。但是我们通过逆向工程看到了三个不同的查询结果:

  • 您的登陆信息已经以Email形式发送给您
  • 我们无法识别您的Email地址
  • 服务端错误
  • 头两个响应是有效的查询的结果,最后一个是无效SQL造成的。 类似这样的响应结果会帮助我们更好的逆推服务端用来查询的SQL语句结构。

    预设字段映射

    我们要干的第一步就是猜字段名,首先我们合理的推测查询带了“email address” 和 “password”,所以可能的字段名选择会有“US Mail Address”  或者 “userid” 亦或者“phone number”  。当然最好能执行 show table,但是我们又不知道表名,貌似目前没什么明显的方法能让我们拿到表名。

    那就分步走吧。在每个例子里,我们会用我们已知的SQL加上我们自己的特殊“段”。我们已知的这条SQL的结尾是个Email地址的比对,那就猜下email是这个字段名吧

    1. SELECT fieldlist FROM table WHERE field = ‘x‘ AND email IS NULL; --‘; 

    如果服务器响应是报错,那基本上可以说明我们的SQL拼错了。但是如果我们得到任何正常的返回,例如“未知的邮件地址” 或 “密码已发送”  ,说明我们的字段名蒙对了。

    要注意的是,我们的“And” 关键字而没用“OR” 关键字,这么做是有目地滴。在上一步中,我们不关心到底是哪一个Email,而且我们不想因为蒙中某人的Email然后给他发了重置密码的邮件。这么搞那 哥们儿一定会怀疑有人对他的帐号搞三搞四。所以用“And”关键字拼上一个不合法的Email地址,这样服务端总是返回空结果集,也就不会给任何人发邮 件。

    提交上面的SQL代码段确实返回了“未知的邮件地址” 这么一个响应。现在我们确认了email地址的字段名是email。如果不是这么个响应,那我就再蒙“email_adress”或者“mail”亦或者 其他类似的。这个环节总是靠蒙的,但是蒙也得讲技巧和方法方式。

    这段SQL的用意是我们假设预设的SQL查询中的字段名是 email ,跑一下看看是不是有效。我不会管你到底有没有匹配的Email,所以用了个伪名“x” , “--” 这个标示是表示SQL的起始。这样SQL解析到这就会把它直接当成一条命令,而“--”后面的会是一个新的命令,这样就屏蔽掉了后面的那些不知道的玩意 儿。

    下一步,我们来猜下其他比较明显的字段名: "password","userid","name" 和类似的。每次我们只蒙一个名字,当返回结果不是“服务端错误” , 那就说明我们蒙对了。

    1. SELECT fieldlist FROM table WHERE email = ‘x‘ AND userid IS NULL; --‘; 

    通过这一步,我们蒙出来了下面几个字段名:

  • email
  • passwd
  • login_id
  • full_name
  • 肯定还有更多其他的(把HTML页面表单的 <Input   name="XXXXX"> 拿来做参考是个非常不错的选择)后来我又挖了一下但是没挖出来更多的字段名。 到目前为止,我们还是不知道这些字段所属的表的表名--咋个弄呢?

    搜寻表名

    应用内建的query已经把表名放在语句中,但我们不知道表的名字。有几种方法可以找到这些插入在语句中表名(以及其他的表名)。我们用的是一种依赖于subselect的方法。

    下面这个单独的query

    1. SELECT COUNT(*) FROM <i>tabname</i> 

    返回表中记录的数量,当然,若表名是无效的,则查询失败。我们可以把这个查询放入我们的查询语句中来探查表名。

    1. SELECT email, passwd, login_id, full_name 
    2.   FROM <i>table</i> WHERE <b>email</b> = ‘<span>x‘ AND 1=(SELECT COUNT(*) FROM <i>tabname</i>); --‘</span>; 

    我们实际上并不关心表中有多少记录,我们关心的是表名是否有效。通过试探不同的猜测,我们最终确定members是数据库中的有效表名。但是,这是这个查 询中所用的表名吗?为此,我们需要另一个使用table.field的查询:这只在表名的确是查询中的表名时才工作,而不仅仅当表存在时工作。

    1. SELECT email, passwd, login_id, full_name 
    2.   FROM members 
    3.  WHERE email = ‘<span>x‘ AND members.email IS NULL; --</span>‘; 

    当这个语句返回 "Email unknown"时,可以确认我们的SQL正确执行了,并且我们成功的猜出了表名。这对后面的工作很重要,但我们先临时使用一下另一种方法。

    弄几个帐号先

    目前我们搞到了members表结构的部分信息,但是我们只知道一个用户名,就是之前我们蒙中的那个发了邮件通知的那个用户名。当时我们只得到了邮件地址,但是拿不到邮件内容。所以我们得再弄几个有效得用户名,高端洋气上档次的最好。

    我们的从公司的网站开始人肉,找到那些人物介绍的页面,一般都是介绍公司内部人员的。这些介绍里大多都有这些人的Email地址和名字。就算没有这些信息也没啥,咱兜里还有货。

    思路是这样的,提交一个带有“Like” 关键字的SQL,这样我们可以对Email地址或者用户名做些模糊匹配,每次提交如果返回“我们已发送您的密码至邮箱”那也就是说我们的模糊查询有效了,而且邮件也真的发了!!!。这么干虽然我们能拿到邮件地址,也意味着对方会收到邮件并引起警觉,所以  慎用!!

    我们能做email、full_name(或者其他字段)的查询,每次放入%这个通配符执行如下的查询:

    1. SELECT email, passwd, login_id, full_name 
    2.   FROM members 
    3.  WHERE email = ‘x‘ OR full_name LIKE ‘%Bob%‘; 

    暴力破解密码

    我们肯定可以在登陆页面尝试暴力破解密码,但是大多的应用都做了相应的防护手段。可能的防护会有操作日志,帐号锁定或者其他能大大降低我们效率的手段或设备,但是因为输入没有被过滤所以给我们绕过这些防护多了一些可能。

    我们将把密码和邮件名称的代码段加到我们已知的SQL里。在这个例子里我们会用一个倒霉催的哥们的邮箱,bob@example.com 然后试试我们准备的一些密码。

    1. SELECT email, passwd, login_id, full_name 
    2.   FROM members 
    3.  WHERE email = ‘bob@example.com‘ AND passwd = ‘hello123‘; 

    这条SQL是完整有效的,所以服务器铁定不能够报错,所以我们知道当服务器响应是“您的密码已经发送至您的邮箱” 这么个结果是我们就知道刚提交的那个密码就是我们要的密码。虽然倒霉催的Bob也收到了邮件并且一定会警觉,但是我们在他警觉之前就干完我们想干的了。

    这个过程可以在Perl下用脚本自动化完成,所以我们就去搞了搞Perl的脚本,结果写脚本的时候发现了另外一种方法来干这事。

    数据库不是只读的

    迄今为止,我们对数据库除了进行查询外,没做其他事。尽管SELECT是只读的,但不意味SQL就只能这样。SQL使用分号来中断一个语句, 如果对输入没有做正确的处理, 它就不能阻止我们在查询语句后面添加不相关的字符串。

    最恰当的一个例子就是这样:

    1. SELECT email, passwd, login_id, full_name   
    2.   FROM members   
    3.  WHERE email = ‘x‘; DROP TABLE members; --‘;  -- Boom!   

    第一部分提供了一个假的邮件地址 -- ‘x‘ -- 我们并不关系这个查询的返回,我们仅仅是给出了一个我们能够使用无关SQL指令的方式,一个尝试删除整个members表而真的是无任何关系的操作.

    这表明我们不仅仅可以切分SQL指令,我们还可以修改数据库,这完全是被允许的。

    加入一个新成员

    由上所得,我们获知了members表的部分的结构,尝试添加一个新的记录到这个表里面似乎是一个可拊掌称庆的方法:如果这能成功,我们就能够通过我们新插入的帐户来直接登陆了。

    这里,毫不惊奇的是,这只需要稍微加些SQL,我们把它放在不同的行从而让我们的展示更易理解,不过从头到尾这一部分其实仍然是一个字符串:

    SELECT email, passwd, login_id, full_name 

      FROM members 

     WHERE email = ‘x‘; INSERT INTO members (‘email‘,‘passwd‘,‘login_id‘,‘full_name‘)  VALUES (‘steve@unixwiz.net‘,‘hello‘,‘steve‘,‘Steve Friedl‘);--‘; 

    即便是我们真的确定了表的名字以及使用的字段都是正确的,在成功的实施攻击之前,仍然有一些障碍:

    1. 可能,在表单上,我们并没有足够的空间来直接输入这些文本(尽管,可以使用脚本来解决这个问题,而这并不是很简便的事情)
    2.  web应用程序的用户可能并没有在members表上的插入权限。
    3.  毫无疑问,members表里面有一些别的字段,有一些可能需要初始化的数据,而这可能导致插入失败。
    4.  即便是可以达到插入一个新的记录,应用程序可能会出现不当的行为,因为自动插入的时候有一些字段使用的是NULL。
    5.  一个有效的“成员”可能不仅仅需要在members表里面的一个记录,而是和别的表有着数据上的关联,(如,“访问权限”),所以添加一个数据到一个表中,可能并不充分有效。

    对于手头的案例而言,我们遇到了#4或者是#5上面的障碍 - 我们无法真正确定是哪一个 - 因为在主登陆界面上,输入上面的用户名+密码的时候,返回了一个服务器上的错误。这就是说,那些我们没有用到的字段可能是必要的字段,而尽管如此,它们仍 然没有被正确的处理。

    这里,一个可行的方法,就是猜测别的字段,但是这可以保证是一个长时间而且耗费劳力的过程:虽然你可能可以猜测出来那些“显而易见”的字段,但是却很难构建出整个应用程序的组织图像。

    所以,最后我们选择走另一条不同的路。

    邮给我一个密码

    我们意识到虽然不能添加一条新的记录在members表中,但我们可以通过修改一个存在的记录, 这也获得了我们的证明是可行的。

    从先前的步骤中,我们知道bob@example.com在系统中有一个帐号,我们使用SQL注入更新了他的数据库记录为我们的邮件地址:

    1. SELECT email, passwd, login_id, full_name 
    2.   FROM members 
    3.  WHERE email = ‘x‘; UPDATE members SET email = ‘steve@unixwiz.net‘ WHERE email = ‘bob@example.com‘; 

    运行这个之后,我们当然会收到"we didn‘t know your email address"消息,但这是预期的提供了不正确的邮件地址。UPDATE操作并不会向应用程序通知, 因此他被悄然执行了。

    我们可以用更新后的邮件地址,使用常规的"I lost my password"链接 - 一分钟后就会受到这样的邮件:

    1. From: system@example.com 
    2. To: steve@unixwiz.net 
    3. Subject: Intranet login 
    4.  
    5. This email is in response to your request for your Intranet log in information. 
    6. Your User ID is: bob 
    7. Your password is: hello 

    现在,就可以使用标准的登录流程进入系统,作为一个高等级的职员。这是一个高权限用户,远远高于我们INSERT创建的受限用户。

    我们发现这个内网站点的信息比较全,甚至还有一个全用户列表。所以我们可以合理的推测很多内网站点会有公司Windows网络帐号,并且用的是同样的密 码。目前我们很明显可以拿到内网的用户密码,而且我们在公司防火墙找到了一个开放的PPTP模式的的VPN端口让我们很方便的做些登陆尝试。

    我们手动抽查了一些帐号,没成功。而且不知道到底服务端是因为“错误的密码”还是“内网帐号和Windows帐号不同”而拒绝登陆的。反正就是个没干成。不过我嚼得自动化的工具应该能让这步简单点。

    其他一些方法

    在这次渗透中,我们觉得其实已经挖的足够深了,不过还可以用其他的方法。我们就先看看我们现在想到一些普适性不是很高的方法。

    我们同时也注意到了不是所有的方法都是数据库无关的,有些方法得依赖特定的数据库。

    调用XP_CMDSHELL

    Microsoft的SQL Server 有一个存储过程 “XP_CMDSHELL” 允许执行任意的操作系统命令,如果这项功授权给Web用户调用的话,那基本上网站肯定会遭黑。我们现在干的都被限制在了Web应用和数据库这个环境下,一 旦能执行操作系统命令,防御再好的应用服务器也没辙了。调用这个存储过程的权限一般会赋给管理员帐号,但是还是存在授权给低级别用户的可能。

    数据库结构深度挖掘

    这个应用登陆后能干的事太多了,在我看来实在没啥必要再去挖了。不过在其他一些特殊的环境下我们的这些方法也许不够用。如果能深度挖掘数据库的结构,我们 会发现更多的方法来黑掉站点。你可以试着看看其他的提交切入点(例如“留言板”,“帮助论坛”等等)。不过这都是对应用环境的强依赖而且还得靠有一定技术 含量的瞎蒙。

    减轻危害

    我们相信web应用的开发者,通常不会去想那些“令人意外的输入”,但是安全人员会(包括那些“坏人”),所以这里有三个宽泛的方法,可以用来除害。

    过滤输入,这是绝对重要的事情,过滤用户的输入,从而确保他们的输入没有包含具有威胁的代码,无论是对于SQL服务器,或则是HTML本身都要考虑。某人 最初的想法来剥掉“恶意代码”,例如引号,分号或者是转义符号,其实这种尝试是被误导了的。尽管找出来些具有威胁的字符很容易,但是很难把他们全部找到。 web的语言种到处都是特定的字符以及奇特的组合(包括那些用来表达同一些字符的另类模式),而努力去鉴定那些没有被授权的“恶意代码”很可能不会成功。 换而言之,与其“除去那些已知的恶数据”,倒不如“去掉所有良好数据之外所有的内容”:这其中的分别是至关重要。如前 - 我们的例子中 - 一个电子邮件地址仅能包括以下字符:

    1. abcdefghijklmnopqrstuvwxyz 
    2. ABCDEFGHIJKLMNOPQRSTUVWXYZ 
    3. 0123456789 
    4. @.-_+ 

    用没有意义的文字是不益的,应该早点拒绝这么做,这可能会产生一些错误信息,这样不仅可以帮助我们抢先SQL注入,而且可以让我们及时发现拼写错误以至于不会让错误存入数据库。

      电子邮件的一些选项

    我们应该要特别的注意邮件地址,它会给验证编程带来麻烦的,因为,每个人看起来对邮件地址的“有效性”都有自己的想法,不用一个好的邮箱地址是不光彩的,这样你将遇到你想不到的文字。

    这方面的真正权威是RFC 2822(比大家耳熟能详RFC822内容还多),里面包含了什么是允许的比较范的定义。如果邮箱地址接受&和*(和其它普通字符比较)是不好的,但是其它的,包括这篇文章的作者,都会对“大多数”邮件地址满意。

    那些采用严格方法的人应该充分的认识到不包括这些邮件地址的后果,特别是认为现在有很好的技术能够解决那些“奇怪”的字符所带来的安全问题。

    请注意“过滤输入”并不意味着“移除引号”,因为即使一个“正规”的字符也会很麻烦,在这个例子中,一个整型数字ID值被拿来和用户的输入做比较(叫数字型PIN):

    1. SELECT fieldlist FROM table WHERE id = 23 OR 1=1;  -- Boom! Always matches! 

    不过实际情况是我们很难把输入项完全过滤掉潜在危险字符。“日期项”,“邮件地址”,或者“整形” 用上面的办法过滤是可以的。但是在真实环境中我们,我们还得用到其他的方法。

    输入项编码/转义

    虽然现在可以过滤邮件地址或者电话号码,但是貌似“Bill O‘Reilly” 这样的合法的名字你是很难处理的,因为“ ’ ” 这个单引号是合法的输入。于是有人就想到在过滤到单引号的时候我再加一个单引号这样就没问题了,其实这么干得出大事。

    1. SELECT fieldlist FROM customers 
    2.  WHERE name = ‘Bill O‘‘Reilly‘;  -- 目前这样是OK的 

    但是,这个方法很容易就被绕过去了。像MySQL允许 ‘ 这个输入,然后如果有人造一段SQL “ ‘; DROP TABLE users;” ,你又给单引号加了个单引号,那就变成

    1. SELECT fieldlist FROM customers 
    2.  WHERE name = ‘‘‘; DROP TABLE users; --‘;  -- 删表了 

    ‘ ‘ ‘就被新加的单引号分成一个字符串(按照前面的过滤方法这里判断有一个单引号,所以过滤后再单引号后面加一个单引号),后面接的是常见的SQL恶意代码。 其实不仅仅有反斜线的情况,还有Unicode编码和其他编码规则或者其他的过滤漏洞都会给程序员挖坑。俺们都知道,实现输入过滤的绝对安全是超级难滴, 这就是为啥很多数据库接口都提供了相关功能。当同样的内容被系统自带的字符串过滤或字符串编码处理后会好很多。例如调用MySQL的函数 mysql_real_escape_string() 或者 perl  DBD 的$dbh->quote($value)方法. 这些方法都必用的。

    参数绑定(预编译语句)

    虽然数据库自带的过滤是个不错的实现,但是我们还是处在“用户输入被当成 SQL语句的一部分 ”这么个圈子里,其实要跳出这个圈子还有一个实现,就是参数绑定。基本上所有的主流数据库都提供这种接口。这种方法提前预编译了SQL语句的逻辑,然后对 参数预留了位置(就是“ ?1  ?2” 这种的)。这样语句在执行的时候只是按照输入的参数表来执行。

    Perl环境的例子:

    1. $sth = $dbh->prepare("SELECT email, userid FROM members WHERE email = ?;"); 
    2.  
    3. $sth->execute($email); 

    感谢Stefan Wagner帮我写了个java的实现

    不安全版

    1. Statement s = connection.createStatement(); 
    2. ResultSet rs = s.executeQuery("SELECT email FROM member WHERE name = " 
    3.                              + formField); // *boom* 

    安全版

    1. PreparedStatement ps = connection.prepareStatement( 
    2.     "SELECT email FROM member WHERE name = ?"); 
    3. ps.setString(1, formField); 
    4. ResultSet rs = ps.executeQuery(); 

    这儿$email是从用户表单中获取来的数据,并且是做为位置参数#1(即第一个问号)传递进来的,因此在任 何情况下,这个变量的内容都可以解析为SQL语句。引号、分号、反斜杠、SQL注释表示法-其中的任何一个都不会产生任何特殊的效果,这个因为它们“只是 数据”。这不会对其他东西造成破坏,因此这个应用很大程度上防止了SQL注入攻击。

    如果对这个查询进行多次重用(这个查询只解析一次)的话,还可以提高性能。然而与获得大量的安全方面的好处相比,这个是微不足道的。这还可能是我们保证互联网应用安全所采取的一个重要的措施。

    限制数据库权限和隔离用户

    在目前这种情况下,我们观察到只有两个交互式动作不在登录用户的上下文环境中:“登录”和“给我发送密码”。web应用应该使用尽可能少权限的数据库连接:仅对members表具有查询权限,对其它表没有任何访问权限的数据库连接。

    这样做的结果是:即便是“成功地”进行了SQL注入攻击,也只能取得非常有限的成功。这种情况下,我们不能做最终授权给我们的任何更新(UPDATE)请求,因此为了能够实现更新(UPDATE)请求,我们不得不寻求其他解决方法。

    一旦web应用确定了通过登录表单传递认证凭证是有效的话,那么它将把这个会话切换到一个具有更多权限的数据库连接上。

    对任何web应用来说,从不使用sa权限几乎是理所当然的事情。

    强调一下,虽然俺们在这次演示中选择“忘记密码”这么个功能点,不是因为这个功能点本身不安全,而是普遍存在各站点的几个容易遭受攻击的功能点之一。如果你把关注点放在如何通过“忘记密码”来进行渗透的话,那你就跑偏了。

    这篇文章的本意不是全面覆盖SQL注入的精髓,甚至连教学都算不上。其实只是我们花了几个小时做的一单渗透测试的工作纪录。我们也见过其他的文章讲SQL注入的技术背景,但是都只是展示了渗透结束后的成果而没有细节。

    对数据库的访问采用存储过程

    当一个数据库服务器支持存储过程时,请使用存储过程执行这个应用的访问行为,这样(在存储过程编写正确的情况下)就完全不需要SQL了。

    通过把诸如查询、更新、删除等某个动作的规则封装成一个单独的存储过程,你就可以根据这个单独的存储过程和所执行的商务规则额对其进行测试和归档。(例如,“增加新的订单”存储过程在客户超过了信用限制的情况下可能拒绝添加这个订单。)

    对简单的查询来说,这么做可能仅仅获得很少的好处,不过当这个操作变的越来越复杂(或者是在多个地方使用这个操作)的情况下,给这样操作一个单独的定义就意味着维护这个操作将更简单而且这个操作的功能会更强壮。

    注意:总可以编写动态构建查询语句的存储过程:这么做并不会防止SQL注入-它只不过把准备/执行过程正确地结合在一起,或者只不过把SQL语句与提供保护的变量直接捆绑在一起。

    但是那些结果需要大量的背景知识才能看的懂的,而且我觉得渗透的细节也是很有价值的。我们正常情况下是拿不到源码的,所以渗透人员的逆向黑盒渗透的能力也是有价值的。

    我要感谢David Litchfield 和 Randal Schwartz 对本篇文章的技术贡献,和Chris Mospaw 牛逼的排版设计。(© 2005 by Chris Mospaw, used with permission)

    原文链接:http://www.unixwiz.net/techtips/sql-injection.html

    译文链接:http://www.oschina.net/translate/sql-injection-attacks

    SQL注入攻击

    标签:

    热心网友 时间:2022-04-07 18:11

    第一步:SQL注入点探测。探测SQL注入点是关键的第一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户输入未进行有效验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。
    第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法有很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断,还可以使用特定函数来判断。
    第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的,通过构造特殊的SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
    第四步:查找Web后台管理入口。Web后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
    第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。

    热心网友 时间:2022-04-07 19:29

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串
    sql注入攻击的基本步骤

    1. 探测和发现SQL注入点 攻击者首先会尝试确定网站哪些输入点可能存在SQL注入漏洞。他们可能会通过输入一些特殊的字符或字符串来测试网页的反应,这些特殊字符可能包括引号、分号等,用以观察服务器返回的错误信息,从而确定是否存在注入的可能。有时候攻击者还会使用自动化工具来扫描网站的所有输入点,快速寻找...

    求教谁给讲讲SQL注入攻击的步骤

    第一步:SQL注入点探测。探测SQL注入点是关键的第一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户输入未进行有效验证,则存在SQL注入漏...

    什么是sql注入攻击

    1. 原理简述:攻击者在输入字段中输入恶意的SQL代码片段,这些代码被应用程序接受并执行,进而控制数据库中的数据和查询流程。如果应用程序没有正确地验证或转义用户的输入,攻击者就可以利用这些漏洞执行任意SQL命令。2. 攻击过程:当用户在表单中输入数据时,如果后端程序没有对用户输入进行严格的验证和过...

    什么是sql注入攻击?

    1. 对用户输入进行严格的验证和过滤,确保输入的安全性。2. 使用参数化查询或预编译语句,避免直接拼接SQL语句。3. 对数据库进行最小权限原则设置,确保即使发生注入,攻击者也难以造成较大破坏。4. 定期进行安全审计和代码审查,及时发现和修复潜在的安全漏洞。了解并防范SQL注入攻击是保障数据库安全的重...

    如何对一个网站进行SQL注入攻击

    1.POST注入,通用防注入一般限制get,但是有时候不限制post或者限制的很少,这时候你就可以试下post注入,比如登录框、搜索框、投票框这类的。另外,在asp中post已被发扬光大,程序员喜欢用receive来接受数据,这就造成了很多时候get传递的参数通过post/cookie也能传递,这时如果恰好防注入程序只限制了get,...

    常见Web攻击- SQL 注入

    SQL注入是黑客常见的攻击手段。黑客通过向网站输入非法SQL代码,使服务器执行非授权操作,如非法查询、修改、删除数据库中的数据。SQL注入攻击的过程是:网站接收用户的非法SQL代码,未作安全处理地将其并入正常SQL语句,从而实现非法操作。防范措施包括:使用参数化查询,绑定变量传递用户输入;使用ORM框架,...

    求教~谁给讲讲SQL注入攻击的步骤

    SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据...

    【DVWA实战篇】12分钟学会 SQL 注入攻击实战

    在低级别SQL注入实战中,通过手工注入发现DVWA网站存在漏洞。首先,在安全级别为Low的页面中,通过GET方式注入,观察报错信息判断数据库类型,然后逐步利用'字符和#符号进行测试,确定字符型注入,进一步通过联合查询获取表名、字段名和敏感信息。自动化工具SQLMap可以协助探测数据库和表信息,甚至解密密码。在...

    轻松的方式科普什么是sql注入攻击

    所谓SQL注入式攻击,就是的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

    seedlab——SQL注入攻击

    SQL注入攻击是恶意修改SQL语句,利用web应用漏洞执行非法操作,获取数据库信息。攻击者通过在输入中插入SQL命令,使服务器执行非授权操作。在动态表单和请求中插入恶意SQL可以实现这一过程。三、实验环境 实验在Ubuntu(32-bit)和seedlab环境中进行。四、实验步骤 1.搭建MySQL环境和创建数据库表。2.构建实验...

    黑客入侵攻击的一般步骤 sql注入攻击的原理 网络攻击的六个步骤 网络攻击的步骤是 网络攻击的五个步骤 网络攻击的一般步骤有哪些 网络攻击的一般步骤是 简述黑客攻击的步骤 黑客常见的攻击步骤
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    当孩子面对挑战时,我们如何鼓励他们积极面对? 如何帮助孩子走出挫折 当孩子遇到困难时应该怎么引导? 如何帮助孩子克服学习上的困难和挑战? 孩子遇到挫败感时,家长应该如何鼓励孩子? 怎么提升孩子在成长过程中应对困难的能力? 天津市老年人优待证 四个超级有效的男性强根壮阳之术 星期天早上问候语 炒饭烩饭128道 内容提要 SQL注入哪些工具最有效 如何防范SQL注入式攻击 用什么软件可以检测自己的本地网站是否有sql注入漏洞 SQL注入点检测 网站web扫描中对于SQL注入漏洞扫描比较好的有哪些呢? 如何使用sqlmap扫描sql注入漏洞 如何批量找SQL注入 手机没有SIM卡,但能上网,是怎么回事?求解 sqlmap可以批量检测注入点吗,如果可以,方法是什么? 手机里不装卡,靠网络能够运行吗? 公认最好的SQL注入扫描工具是哪个 智能手机怎么不插手机卡也能上网 ?? SQL注入漏洞扫描工具有哪些 计算机对我们的贡献 计算机专业的核心课程是什么???有几门课程??? 大学计算机专业用什么教材? 计算机考研,难吗 关于计算机的法律规定有哪些 计算机专业有哪些课程,从什么开始学起,顺序是怎... 推荐有关计算机的书籍 appscan扫描sql注入怎么解决 如何利用sql注入攻击删除文件 sql注入漏洞如何修复 有台虚拟主机有数百个站点,有什么工具可以批量扫描... sql注入攻击方法有哪些 一个扫描网站加注入的工具包? 冻品验收应注意事项 治疗孩子咳痰喘,有什么有效的方式? 现在的生鲜冻品能买吗?会不会还有病毒? 小孩感冒咳嗽气喘怎么办 小孩咳嗽(伴轻微气喘)差不多一个月了,期间一直在... 海鲜类的冻品和冰鲜到底有什么区别? 冻品的介绍 我小孩一直发烧,咳嗽,气喘怎么治疗 周长怎么计算? 冻品肉类和鲜活肉类的口感上有什么本质区别? 周长计算公式 为什么冻品要从山东进货 孩子咳嗽,医生说是哮喘,怎么治呀? 周长计算公式?