《⿊客攻防技术宝典web实战篇》第⼆版----全部答案
第2章:核⼼防御机制
1.      为什么说应⽤程序处理⽤户访问的机制是所有机制中最薄弱的机制?
典型的应⽤程序使⽤三重机制(⾝份验证、会话管理和访问控制)来处理访问。这些组件之间⾼度相互依赖,其中任何⼀个组件存在缺陷都会降低整个访问控制机制的效率。例如,攻击者可以利⽤⾝份验证机制中的漏洞以任何⽤户⾝份登录,并因此获得未授权访问权限。如果能够预测令牌,攻击者就可以假冒成任何已登录⽤户并访问他们的数据。如果访问控制不完善,则任何⽤户都可以直接使⽤应该受到保护的功能。
2.      会话与会话令牌有何不同?
会话是服务器上保存的⼀组数据结构,⽤于追踪⽤户与应⽤程序交互的状态。会话令牌是应⽤程序为会话分配的⼀个特殊字符串,⽤户需要在连接提出请求的过程中提交该字符串,以重新确认⾃⼰的⾝份。
3.      为何不可能始终使⽤基于⽩名单的⽅法进⾏输⼊确认?
许多时候,应⽤程序可能会被迫接受与已知为“良性”输⼊的列表或模式不匹配的待处理数据。例如,许多
⽤户的姓名包含可⽤在各种攻击中的字符。如果应⽤程序希望允许⽤户以真实姓名注册,就需要接受可能的恶意输⼊,并确保安全处理这些输⼊。
4.        攻击者正在攻击⼀个执⾏管理功能的应⽤程序,并且不具有使⽤这项功能的任何有效证书。为何他仍然应当密切关注这项功能呢?攻击者可以利⽤任何访问控制核⼼机制中的缺陷未授权访问管理功能。此外,攻击者以低权限⽤户⾝份提交的数据最终将向管理⽤户显⽰,因此,攻击者可以提交⼀些恶意数据,⽤于在管理⽤户查看这些数据时攻破他们的会话,从⽽对管理⽤户实施攻击。
5.        旨在阻⽌跨站点脚本攻击的输⼊确认机制按以下顺序处理⼀个输⼊:
(1) 删除任何出现的<script>表达式;
(2) 将输⼊截短为50个字符;
(3) 删除输⼊中的引号;
(4) 对输⼊进⾏URL解码;
(5) 如果任何输⼊项被删除,返回步骤(1)。
是否能够避开上述确认机制,让以下数据通过确认?
“><script>alert(“foo”)</script>
是。如果没有第4步,此机制将是可靠的,能够过滤其旨在阻⽌的特定项⽬。但是,由于输⼊在执⾏过滤步骤后被解码,攻击者只需要对有效载荷中的选定字符进⾏URL编码,就可以避开这种过滤:
">
如果⾸先执⾏第4步,或根本不执⾏该步骤,攻击者将不可能避开上述过滤。
第3章:Web应⽤程序技术
1.        OPTIONS⽅法有什么作⽤?
OPTIONS⽅法要求服务器报告可⽤于特定资源的HTTP⽅法。
2.        If-Modified-Since和If-None-Match消息头的作⽤是什么?它们为何引起攻击者的兴趣?
If-Modified-Since消息头⽤于指定浏览器最后⼀次收到被请求的资源的时间。If-None-Match消息头⽤于指定实体标签,在最后⼀次收到被请求的资源时,服务器与被请求的资源⼀起发布该标签。
在上述两种情况下,这些消息头⽤于⽀持浏览器中的内容缓存,服务器通过它们指⽰浏览器使⽤资源的
缓存副本,⽽⾮资源的完整内容(如果这样做没有必要)。
在攻击应⽤程序时,浏览器可能已经缓存了攻击者感兴趣的资源(如JavaScript⽂件)副本。如果删除这两个消息头,就可以覆写浏览器的缓存信息,确保服务器以攻击者希望查看的新的资源副本做出响应。
3.        当服务器设置cookie时,secure标签有什么意义?
secure标签⽤于向浏览器发出以下指⽰:只应通过HTTPS连接、绝不能通过未加密的HTTP连接重新提交cookie。
4.        常⽤状态码301与302有什么不同?
301状态码告诉浏览器被请求的资源已永久移动到其他位置。在当前浏览器会话期间,如果浏览器需要访问最初请求的资源,它将使⽤在301响应中指定的位置。
302状态码告诉浏览器被请求的资源已临时移动到其他位置。下次浏览器需要访问最初请求的资源时,它将从最初请求的位置请求此资源。
5.        使⽤SSL时,浏览器如何与Web代理实现互操作?
浏览器向代理发送⼀个CONNECT请求,将⽬标主机名和端⼝号指定为此请求中的URL。如果代理允许该请求,它将返回⼀个状态码为200的HTTP响应,使TCP连接保持开放,并在随后作为指定⽬标的纯TCP级中继。
第4章:解析应⽤程序
4.        Web服务器的⼀个响应包含以下消息头:
Server:Apache-Coyote/1.1
这表⽰服务器使⽤何种技术?
如果该消息头是准确的,说明服务器正运⾏Apache Tomcat。Tomcat是⼀种Java Servlet容器,因此应⽤程序可能使⽤的是Java和JSP技术。
第5章:避开客户端控件
1.      通过客户端传送的数据如何阻⽌破坏性攻击?
可以使⽤保存在服务器上的密钥对数据进⾏加密或散列处理,就像选择性地使⽤ASP.NET ViewState⼀
样。除⾮攻击者以某种⽅式获得密钥,否则他们将⽆法加密任意数据,或计算出任意数据的有效散列。但是,攻击者仍然能够将⼀种情形中的数据⽤于另⼀种情形——例如,可以⽤廉价商品的加密价格替代昂贵商品的加密价格。为防⽌这种攻击,应⽤程序应在受保护的数据中包含⾜够的上下⽂信息,以便于确认所采⽤的数据源⾃同⼀情形——例如,可以将产品代码和价格组合在⼀个加密对象中。
2.      应⽤程序开发者希望阻⽌攻击者对登录功能发动蛮⼒攻击。由于攻击者可能以多个⽤户名为⽬标,开发者决定将登录尝试失败次数保存在⼀个加密cookie中,阻⽌任何失败次数超过5次的请求。有什么办法能够避开这种防御?
这种防御很容易突破。攻击者不需要提交跟踪登录尝试失败次数的cookie。他们可以在浏览器中禁⽤cookie,或使⽤⾃动化脚本不通过相关cookie提交请求。
其他防御措施包括使⽤CAPTCHA控件暂时阻⽌攻击者,或在登录失败次数达到五次后阻⽌源IP地址,但是,这样做可能会对使⽤代理或NAT防⽕墙的多个⽤户造成负⾯影响。
3.        某应⽤程序包含⼀个执⾏严格访问控件的管理页⾯。该页⾯上有⼀个连接到另⼀台Web服务器的诊断功能链接。只有管理员才能够访问这些功能。不执⾏另⼀种验证机制,下列哪⼀种(如果有)客户端机制可⽤于为诊断功能提供安全的访问控件?要选择⼀个解决⽅案,是否还需要了解其他信息?
(1) 诊断功能能够检查HTTP Referer消息头,证实请求由主管理页⾯提交。
(2) 诊断功能能够验证收到的cookie,证实其中包含访问主应⽤程序所需的有效会话令牌。
(3) 主应⽤程序可在请求的⼀个隐藏字段中设置⼀个⾝份验证令牌。诊断功能能够确认这⼀点,证实⽤户在主应⽤程序中有⼀个会话。
(1) 攻击者可以将Referer消息头设置为任意值,因此它不是执⾏任何访问控制检查的安全⽅法。
(2) 这种⽅法仅在包含诊断功能的Web服务器为源Web服务器的⽗域或⼦域,且对会话cookie进⾏了相应地审查时有效,否则cookie将不会被提交到诊断服务器。将需要为诊断服务器实施后端机制,以确认随源服务器⼀起提交的令牌。
(3) ⽆论诊断服务器的域名是什么,这种⽅法都有效。只要⾝份验证令牌不可预测,并且以安全⽅式传输(请参阅第7章),这种⽅法就是安全的。此外,还需要实施⽤于验证令牌的后端机制。
4.      如果⼀个表单字段的属性为disabled=true,那么它就不会和表单的其他内容⼀起提交。如何才能改变这种情况呢?
有两种基本办法:
(1) 可以拦截提交表单的请求,并添加被禁⽤的参数。
(2) 可以拦截包含表单的响应,并删除disabled=true属性。
5.      应⽤程序可采取什么⽅法确保客户端执⾏了输⼊确认?
应⽤程序没有办法可以确保客户端执⾏了输⼊确认。在客户端上执⾏的各种操作完全由⽤户控制。
第六章:攻击验证机制
1. 在测试⼀个使⽤joe和pass证书登录的Web应⽤程序的过程中,在登录阶段,在拦截代理服务器上看到⼀个要求访问以下URL的请求:
如果不再进⾏其他探测,可以确定哪3种漏洞?
(a) 由于证书在该URL的查询字符串中传送,因此,这些证书将⾯临通过浏览器历史记录、Web服务器和IDS⽇志或直接在屏幕上显⽰⽽遭到未授权泄露的风险。
(b) 证书通过未加密HTTP连接传送,因⽽易于被位于⽹络适当位置的攻击者拦截。
(c) 密码为⼀个包含四个⼩写字母的英⽂单词。应⽤程序并未实施任何有效的密码强度规则。
2. ⾃我注册功能如何会引⼊⽤户名枚举漏洞?如何防⽌这些漏洞?
通常,⾃我注册功能⾮常易于受到⽤户名枚举攻击,因为⽤户可以选择⾃⼰的⽤户名,并且应⽤程序不允许⽤户注册现有⽤户名。
应⽤程序可以通过以下两种⽅法防⽌攻击者通过滥⽤⾃我注册功能来实施⽤户名枚举攻击:
(a) 应⽤程序可以⽣成⾃⼰的⽤户名,然后在每名新⽤户提交了所需的个⼈信息后向其分配⼀个⽆法预测的⽤户名。
(b) 可以在⾃我注册过程的第⼀个步骤要求⽤户输⼊他们的电⼦邮件地址。然后,应⽤程序向⽤户发送⼀封电⼦邮件,该邮件包含⼀个URL,⽤户可以使⽤该URL继续注册过程。如果提供的电⼦邮件已注册,则在电⼦邮件中向⽤户通知这⼀情况。
3. 某登录机制由以下步骤组成:
(a) 应⽤程序要求⽤户提交⽤户名和密码;
(b) 应⽤程序要求⽤户提交值得纪念的词中的两个随机选择的字母。
应⽤程序为何要求⽤户分两个阶段提供所需的信息?如果不这样做,登录机制将存在什么缺陷?
要求⽤户提交值得纪念的词中的两个随机选择的字母,⽽不是整个单词,其原理在于:即使攻击者截获了⽤户在⼀次登录过程中提交的所
有证书,他仍然⽆法使⽤这些证书再次登录,因为这时应⽤程序会要求⽤户提交另外两个字母。
如果应⽤程序在⼀个步骤中要求⽤户提交全部所需信息,那么它必须提前选定随机选择的字母,⽽此时它并不知道正在进⾏验证的⽤户的⾝份。这意味着,即使攻击者只知道值得纪念的词中的两个字母,他仍然可以通过重复加载登录表单,直到应⽤程序请求那两个单词,从⽽使⽤截获的证书登录。
为避免这种缺陷,应⽤程序必须在⽤户每次成功登录后选择另外两个单词,并将其存储在⽤户配置⽂件中,直到⽤户再次成功登录。当⽤户在登录的第⼀个阶段确认⾃⼰的⾝份后,将从⽤户配置⽂件中检索这两个字母,并要求⽤户提交相同的字母。这样,即使攻击者在⼀次登录中获取了⽤户证书,他仍然需要等待⾮常长的⼀段时间,直到应⽤程序再次要求⽤户提交相同的字母。
4. ⼀个多阶段登录机制要求⽤户⾸先提交⽤户名,然后在后续阶段中提交其他信息。如果⽤户提交了任何⽆效的数据,将⽴即返回到第⼀个阶段。
这种机制存在什么缺点?如何修复这种漏洞?
尝试猜测有效证书的攻击者可以轻松确定单个数据项是否有效。攻击者可以利⽤应⽤程序的这种⾏为将
蛮⼒攻击问题细分成⼀系列单独的问题。
要避免这种漏洞,可以要求应⽤程序即使在攻击者提交了⽆效数据项后仍继续完成所有登录步骤,并在最后⼀个步骤完成后返回常规“登录失败”消息,⽽不论是哪个数据项导致了登录失败。这样做可以显著增加攻击者使⽤蛮⼒猜测⽤户证书时所需提交的请求数。
5. 应⽤程序在登录功能中整合了反钓鱼机制。在注册过程中,每名⽤户从应⽤程序提供的⼤量图⽚中选择⼀幅特殊的图⽚。登录机制由以下步骤组成:
(1) ⽤户输⼊其⽤户名和出⽣⽇期;
(2) 如果这些信息⽆误,应⽤程序向⽤户显⽰他们选择的图⽚,如果信息有误,则随机显⽰⼀幅图⽚;
(3) ⽤户核实应⽤程序显⽰的图⽚,如果图⽚正确,则输⼊他们的密码。
反钓鱼机制的作⽤在于:它向⽤户确认,他们使⽤的是真实⽽⾮“克隆”的应⽤程序,因为只有真正的应⽤程序才能显⽰正确的图⽚。
反钓鱼机制给登录功能造成什么漏洞?这种机制是否能够有效阻⽌钓鱼攻击?
攻击者可以利⽤反钓鱼机制将⽤于猜测有效证书的过程划分成两个阶段。攻击者可以通过两次完成步骤(1)来核实特定⽤户名和出⽣⽇期是否有效。如果两次返回了同⼀幅反钓鱼图⽚,则说明猜测的证书肯定有效;否则即⽆效。攻击者可以通过脚本攻击迅速遍历⽬标⽤户的所有出⽣⽇期,从⽽猜测出正确的值。
更糟糕的是,这种机制并不能有效阻⽌钓鱼攻击。克隆Web应⽤程序将收到⽤户在步骤(1)中提交的⽤户名和出⽣⽇期,并可以将这些信息直接提交给原始应⽤程序,以获取在步骤(2)中向⽤户显⽰的正确图⽚。如果告知⽤户通过该图⽚来核实应⽤程序的真实性,则这种机制实际上可能会起到反作⽤,并可能导致⽤户登录他们在其他情况下并不会信任的钓鱼⽹站。
第7章:攻击会话管理
1. 登录⼀个应⽤程序后,服务器建⽴以下cookie:
Set-cookie: sessid=amltMjM6MTI0MToxMTk0ODcwODYz;
⼀个⼩时后,再次登录并得到以下cookie:
Set-cookie: sessid=amltMjM6MTI0MToxMTk0ODc1MTMy;
通过这些cookie,可以得出什么推论?
sessid cookie包含⼀个Base64编码的字符串。解码收到的两个cookie可得到以下值:
jim23:1241:1194870863
jim23:1241:1194875132
解码后的cookie包含三个以分号分隔的数据项。初看来,这三个值可能包含⽤户名、数字⽤户标识和⼀个不断变化的数值。最后⼀项包含10个数字,看起来像⼀个Unix时间值。转换这两个值后得到以下信息:
Mon, 12 Nov 2007 12:34:23 UTC
Mon, 12 Nov 2007 13:45:32 UTC
这表⽰创建会话的时间。
因此,会话令牌似乎由有意义的⽤户相关数据和⼀个可预测的数据项构成。理论上,可以实施蛮⼒攻击来猜测发布给其他应⽤程序⽤户的令牌。
2. 某个应⽤程序使⽤由6个字符组成的数字字母会话令牌和由5个字符组成的数字字母密码。它们全都由
某种⽆法预测的算法随机⽣成。其中哪⼀个最有可能成为蛮⼒猜测攻击的⽬标?列出影响你做出决策的各种不同因素。
与由5个字符组成的密码相⽐,由6个字符组成的会话令牌的可能值要多得多。因此,似乎较短的密码是最有价值的攻击⽬标。
但是,针对密码的蛮⼒攻击与针对会话令牌的蛮⼒攻击之间存在⼀些重要的差异。在尝试猜测密码时,必须同时提交⽤户名和密码,因此每个请求最多只能针对⼀个账户发动攻击,甚⾄可能⽆法针对任何账户发动攻击。你可能已经知道⼀些⽤户名,或者能够枚举出⽤户名,或者可能需要同时猜测⽤户名和密码。登录机制可能包含多个阶段,或者响应速度较慢。登录机制还可能实施了账户锁定机制,这会显著降低
你的攻击速度。
另⼀⽅⾯,在尝试猜测会话令牌时,通常可以同时针对多个⽤户。应⽤程序中可能有20、2000或0位已登录⽤户。如果某位⽤户当前并未登录,则⽆法以这种⽅式对其实施攻击。在收到⼤量⽆效令牌时,应⽤程序根本没有办法实施任何类型的“锁定”。正常情况下,令牌猜测攻击的速度⾮常快,通常,包含⽆效令牌的请求会⽴即收到包含错误消息或重定向的响应。
简⾔之,这个问题并没有确定的答案。哪⼀个是最有价值的⽬标,将取决于你的⽬的和应⽤程序的其他因素。如果许多⽤户都已登录并且只需要攻破其中⼀位⽤户,则最好是针对会话实施攻击。如果希望攻破某个极少登录的管理账户,则实施密码猜测攻击会更加有效。
3. 登录位于以下URL的⼀个应⽤程序后:
服务器建⽴以下cookie:
Set-cookie: sessionId=1498172056438227; domain=foo.wahhapp.
com; path=/login; HttpOnly;
然后访问下⾯的URL。浏览器会将sessionId cookie提交给哪些URL?(选出全部答案。)
(2) 否。其中的域与cookie的域范围不同,也不是它的⼦域。
(3) 是。其中的域是范围中指定的域的⼦域,且路径与范围相匹配。
(4) 是。其中的域和路径均与cookie范围相匹配。虽然采⽤了HTTP协议,但并未指定secure标记,因此仍然会传送该cookie。
(5) 是。其中的域与cookie范围相匹配。由于路径范围在/login后并没有斜线,因此,该范围将不仅包括路径/login/,⽽且包括任何其他
与/login前缀匹配的路径。
(6) 否。其中的路径与cookie范围不匹配。
(7) 否。其中的域是在范围中指定的域的⽗域。
(8) 否。其中的域与cookie的域范围不同,也不是它的⼦域。
4. 所针对的应⽤程序除使⽤主会话令牌外,还使⽤每页⾯令牌。如果收到⼀个不按顺序发送的每页⾯令牌,整个会话将被终⽌。假设发现了某种缺陷,可通过它预测或截获应⽤程序发布给当前正在访问应⽤程序的其他⽤户的令牌,那么是否能够劫持他们的会话?
攻击者仍有可能实施会话劫持攻击。如果攻击者获得了发布给某个⽤户的令牌,就可以⽴即使⽤那些令牌提出请求,并且服务器将接受这些请求。但是,如果该⽤户随后向应⽤程序提出另⼀个请求,其提交的每页⾯令牌将出现顺序错误,整个会话将被终⽌。因此,如果⽤户仍然在与应⽤程序交互,则实施攻击的可能性会⾮常低。如果攻击者只希望利⽤⽤户的权限执⾏特定操作,则可以实施⼀次脚本攻击,在有限的时间间隔内执⾏所需操作。
5. 登录⼀个应⽤程序后,服务器建⽴以下cookie:
Set-cookie: sess=ab11298f7eg14;
单击“退出”按钮后,应⽤程序执⾏以下客户端脚本:
document.location=”/”;
通过这种⾏为,可以得出什么结论?
退出功能存在缺陷。
上述脚本将使浏览器中当前保存的会话令牌失效,也就是说,随后的任何请求将不会提交之前的令牌值。然后,该脚本将启动⼀个指向应⽤程序起始页⾯的重定向。任何访问受保护功能的尝试将遭到拒绝,因为相关请求并不属于通过验证的会话的⼀部分。
但是,客户端应⽤程序并未将已执⾏了退出操作这⼀信息传达给服务器。服务器上的⽤户会话将仍处于活动状态,如果将之前发布的令牌提交给服务器,服务器将继续接受该令牌。在会话超时或以其他⽅式
被清除之前,这种情况会⼀直持续。在这段时间内,已通过某种⽅式截获或猜测出令牌值的攻击者就可以继续使⽤令牌来劫持⽤户的会话。
第8章:攻击访问控制
1. ⼀个应⽤程序可能通过使⽤HTTP Referer消息头实施访问控制,但它的正常⾏为并没有公开表露这⼀点。如何检测出这种缺陷?
cookie阻止好还是不阻止好选择⼀系列你有权访问的重要应⽤程序功能。通过提交经过修改的Referer消息头或不带该消息头的请求访问以上每⼀项功能。如果应⽤程序拒绝这些请求,则说明它很可能易于受到攻击。然后,尝试通过另⼀个不具有相关权限的⽤户提出相同的请求,但每次提交原始的Referer消息头。如果应⽤程序现在接受这些请求,则说明应⽤程序肯定易于受到攻击。
2. 登录⼀个应⽤程序后,被重定向到以下URL:
应⽤程序似乎向MyAccount.php页⾯提交⼀个⽤户标识符。已知的唯⼀标识符是⾃⼰的标识符。如何测试应⽤程序是否使⽤这个参数以不安全的⽅式实施访问控制?
应测试以下测试(按效率排序):
(1) 使⽤相同的语法格式将uid值修改为其他值。如果应⽤程序仍然返回你⾃⼰的账户资料,则说明应⽤程序可能不易于受到攻击。
(2) 如果能够注册或以其他⽅式访问另⼀个⽤户账户,可以使⽤该账户登录以获得其他⽤户的uid值。然后使⽤⾃⼰的原始⽤户权限,并⽤这个新uid值替代⾃⼰的uid值;如果这时应⽤程序显⽰有关其他⽤户的敏感数据,则说明应⽤程序易于受到攻击。
(3) 使⽤⼀段脚本从⾃⼰的uid获得数千个值,并确定(如果提交这些值)应⽤程序是否会返回任何其他⽤户的资料。
(4) 使⽤⼀段脚本请求介于0和9999999999之间的随机uid值(在本⽰例中),并确定应⽤程序是否会返回任何其他⽤户的资料。
3. 因特⽹上的⼀个Web应⽤程序通过检查⽤户的来源IP地址实施访问控制。为什么这种⾏为可能存在缺陷?
攻击者可以假冒其他⽤户的IP地址,虽然实际上要做到这⼀点可能极其困难。更重要的是,如果因特⽹上的多个终端⽤户位于同⼀Web代理服务器或NAT防⽕墙之后,则这些⽤户可能共享同⼀IP地址。
在这种情况下,要使基于IP的访问控制发挥效率,⼀种⽅法是将其作为深层防御措施,以确保尝试访问
管理功能的⽤户位于组织的内部⽹络中。当然,那些功能还应由强⼤的⾝份验证和会话处理机制进⾏保护。
4. 某应⽤程序的唯⼀⽤途是为公众提供可搜索的信息仓库。该应⽤程序并未使⽤任何验证或会话管理机制。该应⽤程序应执⾏何种访问控制?
该应⽤程序并未对访问权限进⾏任何⽔平或垂直划分,因此没有必要实施访问控制来区分不同的个体⽤户。
即使所有⽤户均属于同⼀类别,应⽤程序仍然需要限制⽤户可以执⾏的操作。⼀个强健的解决⽅案是应⽤最低权限原则,以确保应⽤程序体系架构中的所有⽤户⾓⾊具有运⾏应⽤程序所需的最⼩权限。例如,如果⽤户只需要对数据的读取访问权限,则应⽤程序应使⽤⼀个低权限账户(仅具有对相关表的只读权限)来访问数据库。
5. 在浏览⼀个应⽤程序的过程中遇到⼏个应防⽌未授权访问的敏感资源,它们的⽂件扩展名为.xls。这种情况为何应⽴即引起注意?
这些⽂件为Excel电⼦表格,它们属于静态资源,应⽤程序⽆法对其实施任何访问控制(如通过动态脚本)。应⽤程序可能会通过其他⽅法(如Web服务器层)来保护这些资源,但通常情况下并⾮如此。应⽴即检查是否可以不经验证⽽访问这些资源。
第9章:攻击数据存储区
1. 如果要通过实施UNION攻击、利⽤SQL注⼊漏洞获取数据,但是并不知道最初的查询返回的列数,如何才能查明这个值?
可以通过两个简单的⽅法确定列数。其⼀,可以SELECT每个列中的类型中性值NULL,并逐渐递增列数,直到应⽤程序返回数据,表明指定了正确的列数,例如:
' UNION SELECT NULL--
' UNION SELECT NULL, NULL--
' UNION SELECT NULL, NULL, NULL--
请注意,在Oracle上,需要在上述每种情况的最后⼀个NULL后添加FROM DUAL。
另外,可以注⼊ORDER BY⼦句并递增指定列,直到引发错误,表明请求了⽆效的列:
' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--
2. 已经确定⼀个字符串参数中的SQL注⼊漏洞,已经确信数据库为MS-SQL或Oracle,但当前⽆法获得任何数据或错误消息确定到底是哪个数据库。如何才能查明这⼀点?
⼀种确认数据库类型的简单⽅法,是使⽤数据库特定的字符串串联语法在所控制的查询中构建某个良性输⼊。例如,如果原始参数值为London,则可以轮流提交以下数据项:
'||' London
'+'London
如果第⼀个数据项导致和原始参数值相同的⾏为,说明数据库可能为Oracle。如果第⼆个数据项导致和原始参数值相同的⾏为,说明数据库可能为MS-SQL。
3. 已经在应⽤程序的许多位置提交了⼀个单引号,并通过得到的错误消息确定⼏个潜在的SQL注⼊漏洞。下列哪⼀种⽅法能够以最快的速度确定专门设计的输⼊是否会对应⽤程序的处理过程造成影响?
(a) 注册⼀个新⽤户
(b) 更新个⼈资料
(c) 注销服务
虽然看似违背常理,但⽤户注册功能可能是最安全的。注册功能通常使⽤INSERT语句,如果修改这些语句,并不会影响到其他记录。⽤于更新个⼈资料的功能可能使⽤条件性UPDATE语句,如果注⼊' or 1=1--之类的有效载荷,可能会导致数据表中的所有记录遭到修改。同样,注销功能可能使⽤条件性DELETE语句,如果操作不当,也可能影响到其他⽤户。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。