`
todd_liu
  • 浏览: 66046 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

如何检测SQL注入和CSS攻击漏洞

阅读更多

http://www.symantec.com/connect/articles/detection-sql-injection-and-cross-site-scripting-attacks

在这两年中,安全专家应该对网络应用层的攻击更加重视。因为无论你有多强壮的防 火墙规则设置或者非常勤于补漏的修补机制,如果你的网络应用程序开发者没有遵循安全代码进行开发,攻击者将通过80端口进入你的系统。广泛被使用的两个主 要攻击技术是SQL注入[ref1]和CSS[ref2]攻击。SQL注入是指:通过互联网的输入区域,插入SQL meta-characters(特殊字符 代表一些数据)和指令,操纵执行后端的SQL查询的技术。这些攻击主要针对其他组织的WEB服务器。CSS攻击通过在URL里插入script标签,然后 诱导信任它们的用户点击它们,确保恶意Javascript代码在受害人的机器上运行。这些攻击利用了用户和服务器之间的信任关系,事实上服务器没有对输 入、输出进行检测,从而未拒绝javascript代码。

这篇文章讨论SQL注入和CSS攻击漏洞的检测技术。网上已经有很多关于这两种基于WEB攻击的讨论,比如如何实施攻击,他们的影响,怎样更好的编 制和设计程序防止这些攻击。 然而, 对如何检测这些攻击并没有足够的讨论。我们采用流行的开源的IDS Snort[ref 3],组建根据检测这些攻击的规则的正则表达式。附带,Snort默认规则设定包含检测CSS的方法,但是这些容易被避开检测。比如大多通过hex进制编 码,如%3C%73%63%72%69%70% 74%3E代替<script>避开检测。

依赖level of paranoia组织的能力,我们已经编写了多种检测相同攻击的规则。如果你希望检测各种可能的SQL注入攻击,那么你需要简单的留意任何现行的SQL meta-characters,如单引号,分号和双重破折号。同样的一个极端检测CSS攻击的方法,只要简单地提防HTML标记的角括号。但这样会检测 出很多错误。为了避免这些,这些规则需要修改使它检测更精确些, 当仍然不能避免错误。

在Snort规则中使用pcre(Perl Compatible Regular Expressions)[ref4]关键字,每个规则可以带或不带其他规则动作。这些规则也可以被公用软件如grep(文档搜索工具)使用,来审阅网络 服务器日志。 但是,需要警惕的是,用户的输入只有当以GET提交请求时,WEB服务器才会记录日记,如果是以POST提交的请求在日记中是不会记录的。

2. SQL注入的正则表示式

当 你为SQL注入攻击选择正则表示式的时候,重点要记住攻击者可以通过提交表单进行SQL注入,也可以通过Cookie区域。你的输入检测逻辑应该考虑用户 组织的各类型输入(比如表单或Cookie信息)。并且如果你发现许多警告来自一个规则,请留意单引号或者是分号,也许些字符是你的Web应用程序创造的 合法的在CookieS中的输入。因此, 您需要根据你的特殊的WEB应用程序评估每个规则。

依照前面提到,一个琐细的检测SQL射入攻击的正则表达式要留意SQL特殊的meta-characters 譬如单引号(’)双重扩则号(--),为了查出这些字符和他们hex等值数, 以下正则表达式适用:

2.1 检测SQL meta-characters的正则表达式

/(\%27)|(’)|(--)|(\%23)|(#)/ix

解释:

我 们首先检查单引号等值的hex,单引号本身或者双重扩折号。这些是MS SQL Server或Oracle的字符, 表示后边的为评论, 随后的都将被忽略。 另外,如果你使用MySQL,你需要留意 ’#’和它等值的hex的出现。注意我们不需要检查双重破折号等值的hex, 因为这不是HTML meta-character, 浏览器不会进行编码。 并且, 如果攻击者设法手工修改双重破折号为它的hex值%2D(使用代理像Achilles[ref 5]), SQL注入将失败。
加入上述正则表达式的新的Snort规则如下:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"SQL Injection - Paranoid"; flow:to_server,established;uricontent:".pl";pcre:"/(\%27)|(’)|(--)|(%23)|(#)/i"; classtype:Web-application-attack; sid:9099; rev:5;)

在本篇讨论中, uricontent关键字的值为".pl ", 因为在我们的测试环境里, CGI 程序是用Perl写的。uricontent关键字的值取决于您的特殊应用, 这个值也许是".php ", 或" .asp ", 或" .jsp ", 等。 从这点考虑, 我们不显示对应的Snort 规则, 但是我们会给出创造这些规则的正则表达式。 通过这些正则表达式你可以很简单的创造很多的Snort规则.在前面的正则表达式里, 我们检测双重破折号是因为:即便没有单引号的存在那里也可能是SQL射入点[ref 6]。 例如, SQL查询条目只包含数值,如下:

select value1, value2, num_value3 from database
where num_value3=some_user_supplied_number

这种情况,攻击者可以执行额外的SQL查询, 示范提交如下输入:

3; insert values into some_other_table

最后, pcre的修饰符’ i’ 和’ x ’ 是用于分别匹配大小写和忽略空白处的。 上面的规则也可以另外扩展来检查分号的存在。然而,分号很可以是正常HTTP应答的一部分。为了减少这种错误,也是为了任何正常的单引号和双重扩折号的出 现,上面的规则应该被修改成先检测=号的存。用户输入会响应一个GET或POST请求,一般输入提交如下:

username=some_user_supplied_value&password=some_user_supplied_value

因此, SQL 注入尝试将导致用户的输入出现在a = 号或它等效的hex值之后。

2.2 修正检测SQL meta-characters的正则表达式

/((\%3D)|(=))[^ ]*((\%27)|(’)|(--)|(\%3B)|(:))/i

解释:

这个规则首先留意 = 号或它的hex值(%3D),然后考虑零个或多个除换行符以外的任意字符,最后检测单引号,双重破折号或分号。

典型的SQL注入会尝试围绕单引号的用途操作原来的查询,以便得到有用的价值。讨论这个攻击一般使用1’or’1’=’1字符串. 但是, 这个串的侦查很容易被逃避,譬如用1’or2>1 --. 然而唯一恒定的部分是最初的字符的值,跟随一单引号,再加’or’。随后的布尔逻辑可能在一定范围上变化,可以是普通样式也可能是非常复杂的。这些攻击可 以相当精确被侦测,通过以下的正则表达式。2.3章节讲解。

2.3 典型的 SQL 注入攻击的正则表达式

/w*((\%27)|(’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

解释:
w* - 零个或多个字符或者下划线。
(\%27)|’ - 单引号或它的hex等值。
(\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -‘or’的大小写以及它的hex等值。

union’SQL 查询在SQL注入各种数据库中攻击中同样是很常见的。如果前面的正则表达式仅仅检测单引号或则其他的SQL meta characters ,会造成很多的错误存在。你应该进一步修改查询,检测单引号和关键字‘union’。这同样可以进一步扩展其他的SQL关键字,像’select’, ’insert’, ’update’, ’delete’, 等等。

2.4 检测SQL注入,UNION查询关键字的正则表达式

/((\%27)|(’))union/ix

(\%27)|(’) - 单引号和它的hex等值
union - union关键字

可以同样为其他SQL查询定制表达式,如 >select, insert, update, delete, drop, 等等.

如果,到这个阶段,攻击者已经发现web应用程序存在SQL注入漏洞,他将尝试利用它。如果他认识到后端服务器式MS SQL server,他一般会尝试运行一些危险的储存和扩展储存过程。这些过程一般以‘sp’或‘xp’字母开头。典型的,他可能尝试运行 ‘xp_cmdshell’扩展储存过程(通过SQL Server执行Windows 命令)。SQL服务器的SA权限有执行这些命令的权限。同样他们可以通过xp_regread, xp_regwrite等储存过程修改注册表。

2.5 检测MS SQL Server SQL注入攻击的正则表达式

/exec(s|+)+(s|x)pw+/ix

解释:
exec - 请求执行储存或扩展储存过程的关键字
(s|+)+ - 一个或多个的空白或它们的http等值编码
(s|x) p- ‘sp’或‘xp’字母用来辨认储存或扩展储存过程
w+ - 一个或多个字符或下划线来匹配过程的名称

3. 跨站脚本(CSS)的正则表达式

当发动CSS攻击或检测一个网站漏洞的时候, 攻击者可能首先使简单的HTML标签如<b>(粗体),<i>(斜体)或<u>(下划线),或者他可能尝试简单的 script标签如<script>alert("OK")</script>. 因为大多数出版物和网络传播的检测网站是否有css漏洞都拿这个作为例子。这些尝试都可以很简单的被检测出来。 然而,高明点的攻击者可能用它的hex值替换整个字符串。这样<script>标签会以%3C%73%63%72%69%70%74%3E出 现。 另一方面,攻击者可能使用web代理服务器像Achilles会自动转换一些特殊字符如<换成%3C、>换成%3E.这样攻击发生时,URL 中通常以hex等值代替角括号。

下列正则表达式将检测任何文本中包含的html的<、>。它将捉住试图使用< b>、<u>、或<script>。这正则表达式应该忽略大小写。我们需要同时检测角括号和它的hex等值(% 3C|<)。检测hex进制转化的整个字符串,我们必须检测用户输入的数字和%号,即使用[a-z0-9%] 。这可能会导致一些错误出现,不是大部分会检测到真实攻击的。

3.1 一般 CSS 攻击的正则表达式

/((\%3C)|<)((\%2F)|/)*[a-z0-9\%]+((\%3E)|>)/ix

解释:
((\%3C)|<) -检查<和它hex等值
((\%2F)|/)*-结束标签/或它的 hex等值
[a-z0-9\%]+ -检查标签里的字母或它hex等值
((\%3E)|>) -检查>或它的hex等值

Snort 规则:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NII Cross-site scripting attempt"; flow:to_server,established; pcre:"/((\%3C)|<)((\%2F)|/)*[a-z0-9\%]+((\%3E)|>)/i"; classtype:Web-application-attack; sid:9000; rev:5;)

跨站脚本同样可以使用<img src=>技术。现行默认的snort规则可以被轻易避开。

3.2章节提供了防止这种技术的方法。

3.2 "<img src" CSS 攻击正则表达式

/((\%3C)|<)((\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47))[^ ]+((\%3E)|>)/I

解释:
(\%3 C)|<) -<或它的hex等值
(\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47) -’img’字母或它的大小写hex等值的变化组合
[^ ]+ -除了换行符以外的任何跟随<img的字符
(\%3E)|>) ->或它的hex等值

3.3 CSS 攻击的极端的正则表达式

/((\%3C)|<)[^ ]+((\%3E)|>)/I

解释:

这个规则简单寻找<+除换行符外的任何字符+>。由于你的web服务器和web应用程序的构架,这个规则可能产生一些错误。但它能保证 捉住任何CCS或者类似CSS的攻击。

总结:

在 这篇文章中,我们提出了不同种类的正则表达式规则来检测SQL注入和跨站脚本攻击。有些规则简单而极端,一个潜在的攻击都将提高警惕。但这些极端的规则可 能导致一些主动的错误。考虑到这点,我们修改了这些简单的规则,利用了另外的样式,他们可以检查的更准确些。在这些网络应用成的攻击检测中,我们推荐将这 些作为调试你IDS或日志分析方法的起点。再经过几次修改后,在你对正常网交易部分的非恶意应答进行评估以后,你应该可以准备的检测那些攻击了。

这篇是翻译老外的文章,css 跨站攻击只需过滤掉html尖括号即可,擦,又被专家们忽悠了,网上盛传的

完整的XSS wrom安全检测实例示范,第一次就把标记对都过滤了,下面竟然还用标记测试,啥逻辑,我只想知道是怎么成功的,搞笑,误人

分享到:
评论

相关推荐

    SQL注入技术和跨站脚本的安全检测

    标题与描述概述的知识点主要集中在两个关键的网络安全领域——SQL注入和跨站脚本(Cross-Site Scripting,简称XSS或CSS)攻击。这两类攻击都是利用了应用程序的漏洞,尤其是那些没有对用户输入进行适当验证和过滤的...

    基于Selenium的SQL注入漏洞检测系统的研究.pdf

    SQL注入漏洞的成因主要是由于Web应用程序在处理用户输入时,未能正确地过滤和处理特殊字符,从而导致攻击者可以 inject恶意的SQL语句。 二、Selenium简介 Selenium是一个开源的自动化测试工具,主要用于Web应用...

    360提供的php防sql注入代码修改类

    SQL注入是一种利用网站应用程序的漏洞,通过输入恶意SQL语句来控制数据库的攻击手段。攻击者可以获取、修改、删除数据库中的敏感信息,甚至完全控制整个系统。为了防止SQL注入,我们需要遵循以下原则: 1. 使用...

    SQL注入漏洞演示源代码

    5. **日志和监控**:了解如何通过记录和分析异常请求来检测和预防SQL注入攻击。 6. **修复策略**:一旦发现SQL注入漏洞,如何进行补救,包括代码审查、漏洞修补和更新安全策略。 通过研究这个源代码,开发者可以...

    注入点批量扫描工具

    【标题】"注入点批量扫描工具"是一款专用于检测SQL注入漏洞的实用程序。这款工具设计的目的是通过自动化的方式,帮助网络安全专家或Web开发者找出网站中存在的SQL注入问题,以提高系统的安全性。 【描述】该工具的...

    PHP开发漏洞环境(SQL注入+文件上传+文件下载+XSS+万能密码+session/cookie的学习等等)

    本压缩包提供的"PHP开发漏洞环境"是一个专门用于学习和研究这些安全问题的实践平台,包括SQL注入、文件上传、文件下载、XSS跨站脚本攻击、万能密码攻击以及session和cookie管理等多个方面。 1. SQL注入:这是一种...

    PHP开发漏洞环境(SQL注入+文件上传+文件下载+XSS+万能密码+session/cookie+购物逻辑漏洞的学习等等)

    1. SQL注入:当用户输入的数据未经充分过滤或转义就直接用于SQL查询时,攻击者可能利用此漏洞执行恶意SQL命令。通过构造特定的输入,攻击者可以读取、修改甚至删除数据库中的敏感数据。例如,一个不安全的登录界面...

    基于ASP的留言本(防sql注入) v1.02.zip

    综上所述,"基于ASP的留言本(防sql注入) v1.02.zip"是一个具备防止SQL注入功能的ASP编程的留言本应用,其设计考虑了用户输入的安全性,提供了动态交互的用户界面,并通过不断迭代和改进提升了系统安全性。在部署和...

    XSS &amp; SQL注入

    XSS(Cross-Site Scripting,跨站脚本)和 SQL 注入是两种常见的 Web 安全漏洞。下面将详细介绍 XSS 和 SQL 注入的概念、原理和应用。 什么是 XSS? XSS,或者称为 CSS,代表着跨站脚本。基本上,XSS 意味着你可以...

    注入技术总结

    3. "注入.txt":可能涵盖了通用的注入技术,包括SQL注入和文本框内注入的概述和防范策略。 4. "文本框内注入.txt":可能专注于文本框内的攻击手法,如JavaScript注入和XSS攻击,以及相应的防护措施。 5. "绕过防注入...

    PHP+MYSQL 注入靶场

    **PHP+MYSQL 注入靶场*...通过这个靶场,你不仅可以提升SQL注入漏洞的检测和修复技能,还能了解到PHP和MySQL在Web应用安全中的重要性。记住,安全是Web开发的关键组成部分,理解和防范SQL注入是每个Web开发者的基本功。

    蓝色安全漏洞检测系统后台模板

    8. **安全漏洞检测**:系统可能包含各种检测工具和技术,如SQL注入检测、跨站脚本检查、弱口令扫描等,以全面评估网络安全状况。 9. **API接口**:模板可能预设了与后端服务通信的API接口,方便进行数据交换和功能...

    毕业设计完整版ASP+SQL美食网站设计(源代码+论文).zip

    7. **安全性**:ASP和SQL的组合需要注意安全问题,如SQL注入攻击和跨站脚本攻击。开发者需要使用预编译语句、参数化查询等方式防止SQL注入,同时对用户输入进行验证和过滤,避免跨站脚本漏洞。 8. **性能优化**:...

    WEB漏洞挖掘速成训练营.pptx

    此外,课程可能还会涉及SQL注入的防御手段,如使用预编译语句、输入验证、参数化查询等,以及使用自动化工具如sqlmap进行检测和利用的技巧。 总之,这门训练营涵盖了Web安全的重要领域,是网络安全专业人士学习和...

    帝国CMS 桂林网div+css模板

    8. **安全性**:帝国CMS本身具有一定的安全防护机制,例如防止SQL注入、XSS攻击等。模板设计时也会遵循安全原则,避免因模板漏洞导致的安全问题。 9. **性能优化**:优秀的模板应关注加载速度和资源利用率,可能...

    企业网站管理源码

    SQL注入记录功能使得系统能够跟踪和记录任何尝试执行SQL注入的尝试,这对于分析潜在的安全威胁和漏洞至关重要。当检测到SQL注入行为时,系统不仅记录相关事件,还可以根据预设策略封锁攻击者的IP地址,阻止其进一步...

    web应用常见安全漏洞.pdf

    Web应用中的安全漏洞是开发过程中必须重视的问题,主要包括SQL注入和跨站点脚本(XSS)攻击。这两种漏洞都可能导致严重的安全威胁,如数据泄露、用户信息被窃取,甚至整个系统的瘫痪。 **SQL注入**是一种攻击手段,...

    JSP+SQLSERVE

    3. **预编译语句(PreparedStatement)**:为了提高性能和防止SQL注入攻击,应使用预编译语句处理动态SQL。 4. **事务管理**:在处理多条数据库操作时,事务管理确保数据的一致性和完整性。例如,用户注册时,需要...

    Web安全技术及应用-项目2 Web开发基础

    【Web安全技术及应用-项目2 Web开发基础】主要涵盖了Web开发的基础知识,特别是与网络安全相关的方面,如SQL注入攻击的防护。以下是该主题的详细解释: **SQL注入攻击**是一种常见的网络安全威胁,通常发生在应用...

Global site tag (gtag.js) - Google Analytics