`
chyx72
  • 浏览: 35723 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转]跨站漏洞解析及预防

阅读更多
转:百度文库
不算前言的前言
好像已经很久没有写过安全方面的文章了,所谓安全圈子里面,大家也许认为玄猫消失了,不过,我想,作为骇客的玄猫也许从来没有出现过吧。没错的,我是玄猫,如果前两年你看过《黑客X档案》或者《黑客手册》这样的民间安全杂志,那么你也许见过这个名字。
或者,很抱歉的,你的站点有时会出现过“玄猫啊玄猫……”这样的提示框或者文字,那么我很遗憾,我写的漏洞利用工具被人滥用到你的网站上了,蓝色理想里的程序员、站长想必不少,我在这里也向你道个歉。

什么是跨站脚本攻击
OK,我们就进入正文吧。按照惯例,我先给出“跨站脚本攻击”的“官方定义”。
跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
在这个定义里面提到了三个要点:
第一、 What-为什么会产生跨站脚本攻击。
跨站脚本攻击的产生是因为程序员在写程序时候的考虑不周,当然,也可能是根本没有考虑。安全方面有一句著名的话叫做,“永远也不要相信用户的输入”。看到这里,作为普通用户的你,先别急着鄙视我对你的不信任,作为可用性专家的你,也别急着骂我不重视用户,作为程序员的你,要去用凉水洗把脸,精神一下了。
你在以前写程序时,有没有考虑,用户所输入的内容显示在网站上时,会不会有什么问题呢。
什么问题?先抛开我这里的主题跨站脚本攻击而言,你有没有发现,有时用户输入的内容,导致了你的页面变形?这时你除了说,Oh,这个用户真麻烦之外,是否还考虑,为什么会变形呢。
我们举个实例来说,你写了一个页面,用来显示用户输入的文章,这里显示用户部分的地方是这样的:
<div id="content"><%=sArticleContent'这里我们假设这个变量是从数据库里面取出的用户输入的文章内容%></div>
如果用户输入的都是像我这篇文章一样的普通文字,那么自然是没有问题,啊,可是如果出现一个二把刀的用户,他一定想写一些html代码来装饰他的文章,而恰恰他只写了<h1>,忘记了后面的闭合标签,那么会出现什么……哈哈,你的页面的后面部分全部被<h1>了,字体大的没法看。之前你精心设计的页面全部乱成了一锅粥。
在这个实例里面,用户输入的只是普通的html字符,那么,他如果输入javascript字符呢,恩,如果我是一个坏坏的喜欢搞恶作剧的用户,我也许会输入:<script>while(1==1){alert('这个站长是个笨蛋');}</script>。那么会发生什么? 对!在这个页面被访问的时候,你无辜的访问者会发现,无论他怎么按“确定”,那个顽固的提示框都会喋喋不休。
简单来说,这就是一次跨站脚本攻击了。
在这次攻击里面,我,这个坏坏的喜欢恶作剧的用户,利用你,这个永远相信用户输入的程序员忘记过滤我所输入的可能对其他访问者造成危害的代码内容这个缺陷,成功的进行了一次恶作剧—跨站脚本攻击。
第二、 Who-谁可以利用跨站脚本攻击。
关于“who”这个问题,我想在上面的内容里,你大致了解了,这里我再唠叨一下,不仅仅是喜欢恶作剧的用户可以用,甚至有时普通的用户,输入时不小心的也会导致你页面出现一些未期料的问题。
当然,我们最不希望的就是,有骇客利用这个漏洞了,至于他能够利用到什么程度,还请你往下面拉一点,看“跨站脚本攻击有什么危害”。
第三、 How much-跨站脚本攻击有什么危害。
所谓安全圈子里的某些“黑客”往往对跨站漏洞嗤之以鼻,认为那不过是在客户那里玩玩就算了,作为被称之为跨站王的某鱼同学(现在已然是Discuz公司的系统安全工程师了)的徒弟我来说,我认为这是非常幼稚的一种看法。
说小了,跨站攻击可以简单的就使你的页面布局混乱不堪,而更严重的是,既然骇客可以写入html代码,那他简直可以干你想到的或者你想不到的任何事情了。譬如……<iframe src="网页木马地址" width="0" height="0"></iframe>就可以非常容易的在你的网站上插入指向一个网页木马的隐藏的框架了(通常被称之为“挂马”)。
作为网站管理员的你,如果简单的认为,跨站漏洞只可以对访问者造成侵害的话,那就错了。别忘记,在访问带有受到跨站攻击的网页时,你的身份也是普通用户,一方面,如果你中了他放的木马,那么从你机子上就可以轻易的下载到ftp软件中的密码信息,另一方面,如果这个时候你已经登录了管理,那么他是不是可以构造一个管理页面,并且以你的身份,让你不知不觉的操作呢,这是完全可能的,并且是经常出现的。
构建跨站脚本攻击
哈哈,如果你是一个坏坏的用户,那么看到这里你一定很开心了,你认为自己将学会如何做一名骇客,不过我只能很遗憾的告诉你,想都不要想,呵呵,重复我经常说的一句话,以下内容禁止心智不成熟的未成年人观看,其中涉及的内容仅作为教学和研究使用,严禁利用这里所讲授的知识进行不法侵害行为。
在这里我拿出以前做的几个案例笔记(全文大多数都发表在了《黑客X档案》中),在案例中进行分析说明,大家不要小看这些案例,这些案例中大多数都是网上有大量网站使用的知名程序,可想而知危险之大。
案例一:Discuz4.1.0论坛出现的WAP跨站漏洞
Discuz论坛允许使用手机访问论坛wap目录来访问论坛,用wap方式访问论坛时可以查看帖子和发送帖子、短消息等,但是其服务器端的处理过程并没有过滤wap方式发帖的标题,使得我们可以输入特殊构造的字符而引发跨站攻击。
作为程序员的你认为用户在使用手机WAP方式访问论坛时候就不可能写入恶意代码从而不能攻击而不对WAP部分进行处理吗?那你就错了,实际上,有很多软件可以模拟访问WAP,Opera就可以,在PC上使用某些特定的客户端软件(WinWAP、Opera)等,访问WAP网站,即可以输入跨站字符,这里可以在标题中输入<script>alert('XSS')</script>,当PC用户访问论坛时,就会触发这些代码。
从这个案例中,你应当学到,不要认为客户端的限制就可以疏忽对用户输入的检测和过滤了,只要可以通过HTTP协议访问,那么无论客户端是什么,有什么限制,都是不安全的。
案例二:“飞骋”网站日记跨站漏洞。
首先来看飞骋日记服务,一般来说对于像日记这种一个人写,N多人看的东东,我们要考虑的就是XSS跨站漏洞了。在下面的内容中,我们试着用代码< script>alert(“玄猫啊玄猫,玄猫要高考咯”)</script>来测试能不能在页面上运行我们的Javascript脚本。
我们打开一个写日记的页面,先测试内容能不能写跨站脚本,日记标题随便写,内容写个<script>alert(“玄猫啊玄猫,玄猫要高考咯”)</script>,然后去看看,不难看到,我们写的script被替换成了s cript,(图一)中间多了个空格,再来改变大小写试试,内容写<Script>alert(“玄猫啊玄猫,玄猫要高考咯”)< /script>,还是不行,看来要想个变通的方法了,我们找找还有哪些是可以输出的,对了,标题,可是有的朋友会有疑问,标题就让写10个字,不够啊,我们再来把文件保存到本地,研究form的验证:232行有个<FORM id=frmAnnounce name=frmAnnounce onsubmit="return checkform();"的代码,不难看出,这个onsubmit触发的函数就是检查标题字数的代码,我们删掉onsubmit="return checkform();",然后把action补全,标题内填入<script>alert(“玄猫啊玄猫,玄猫要高考咯”)< /script>,内容随便写些东西,提交,在随后刷新出的页面里,优雅得弹出了我们的对话框,跨站成功。

在这个案例中,首先进行了最简单的测试内容的输入,即弹出一个对话框,而此时发现网站代码对script进行了过滤,这时再次尝试Script,如果程序员仅简单的过滤了script时,则Script可能是可用的,但是最终发现还是不行,那么则转到标题处,显然标题处通过maxlength这个属性限制了文本框所能输入的最长字节数,并且使用js脚本来检测了用户的输入,这些当然都不成为问题,我们只要将页面保存到本地,就可以修改了,删除 maxlength属性和验证的js代码后,再提交即可。
从这个案例中你应当学到:
1、 过滤危险字符时候考虑字符是否可以以大写变换的方式绕过验证
2、 Js脚本检测用户输入合法性是无效的。
3、 用户可能直接向服务器提交数据,并且这里我告诉你,所谓防止外部提交的代码是绝对无效的,那个方法是通过检测HTTP_REFFER的HTTP头来实现的,而其实这个HTTP头也是可以伪造的。
案例三:PhpArticle2密码输入错误记录跨站漏洞PhpArticle是一款基于php+mysql的整站文章系统,页面清爽、速度快,并且功能比较完善,尤其是后台有个记录别人尝试登陆时输入的错误密码的功能……比较实用……还可以偷窥别人都习惯用什么密码(一般人尝试密码的时候总是按照自己的习惯来尝试别人的密码),但是我突然想到,如果我们尝试在错误的用户名或者密码中输入特殊字符呢……
进入后台登陆页面,然后用户名和密码分别写我们构造的用于测试的跨站代码。
“用户名”中填写:
<script>alert("XSS")</script>
“密码”中填写:
<script>alert("XSS")</script>
然后我们用管理员的密码去登陆后台,查看“管理日志->非法登陆记录”,这时弹出了第一个对话框,点击“确定”后又出现了第二个对话框,看来这两个地方是存在跨站漏洞的。
好的,既然确定了有跨站漏洞,我们来思考下应该怎么利用比较能达到收益最大化……这里要来一个提升网站用户权限的利用。
这里有必要先给不熟悉PhpArticle的朋友介绍下,在后台改管理员密码的地方是要求填写当前密码的,所以我们是无法利用的,其他操作我也暂时没有想出好的利用方法,现在我们要做的就是把我们自己注册的用户添加到系统的管理员组中,达到提升权限的目的。
当我们可以在页面插入任意代码的时候,我们其实有许多选择,譬如插入javascript脚本内容,当限制提交字符数的时候我们可以插入 javascript脚本文件(<script src=""></script>这样),还可以插入iframe在页面中隐藏一个任意网页(骇客用来挂马),这里我们的思路是利用管理员登陆的身份来提升权限,所以我们就模仿程序的用户管理页面,来仿造一个页面,并使用iframe的方法插入这里。
好了,先来看如何构造表单。
在构造表单之前我们要确定下这个表单是否允许外部提交,我们以管理员身份登陆后,打开会员编辑这个页面:http://www.xxx.cn/admin/us...,然后将其另存到本地,然后修改form控件的action属性,打开后提交,程序提示修改成功,看来是允许外部提交的(其实也可以直接看代码的……嘿嘿,我不是懒嘛)。
因为嫌PA的页面太不符合WEB标准,做自动提交的时候总是出现javascript错误,我们来自己构造一个表单,通过查看源代码,我们可以构造一个只有几个必填字段的表单,然后在body标签后加属性onLoad,值为javascript:document.forms[0].submit(),即当页面载入时自动提交表单。
这里我们还有一个要注意的地方,就是自己的userid,在构造表单的时候我们要用到这个值,怎么获得userid呢,我们需要登陆后在cookies里找pauserid的值。
在这个案例中,我们在构造跨站利用时候采取了一种十分“恶毒”的手段,就是插入一个iframe指向我们自己的网页,在这个网页中,我们完整的复制了原始代码中的表单部分,并将某些内容修改为我们需要进行的操作,最后再让这个表单自动提交。
如何防止跨站脚本攻击
我想通过上面的内容,你已经深切的领会到了,跨站脚本攻击的危害是非常大的,那么,如何防止这个漏洞呢。
最简单的办法,就是将用户输入的内容进行HTML转义,这样你不必考虑用户输入什么内容,内容中有哪些危险的字符需要过滤,例如在ASP中,我们可以使用Server.HtmlEnCode()来转义,php中可以使用htmlspecialchars()这个函数。
但是,这种方法并不能称为最优解,这其实是一种消极的方法,因为用户输入的内容可能有危险,那么就将其全部转义。而比较好的方法就是通过正则表达式来进行替换,当然,UBB代码也是起到这个作用的,程序员将HTML代码禁用,取而代之以约定的少量UBB来代替HTML,从而起到好的效果。
这里由于篇幅原因,我就不详细列出各UBB函数的详细内容了,这里我列出一些常见的和很少人了解的跨站方法,供你参考是否已经对这些方式进行了过滤。

[Copy to clipboard] [ - ]
CODE:
<IMG SRC="javascript:alert('XSS');">
<IMG SRC='vbscript:msgbox("XSS")'>
<IMG SRC=javascript:alert("XSS")>(采用HTML实体)
<IMG SRC=j&#97;v&#97;s&#99;ript&#58;&#97;lert&#40;& #39;&#88;&#83;&#83;&#39;&#41>(使用utf8字符集)
<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x
65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
<IMG SRC="jav&#x09;ascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<DIV STYLE="width: expression(alert('XSS'));">(注意,使用expression是十分灵活的,例如,如果你过滤了 expression,他还可以使用exp/**/resssion,你过滤了/**/,他还可以使用exp/*sometext*/ression)
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<OBJECT TYPE="text/x-scriptlet" DATA="http://ha.ckers.org/script...
分享到:
评论

相关推荐

    Web安全测试中常见逻辑漏洞解析

    相比于常见的SQL注入和XSS跨站脚本等漏洞,逻辑漏洞的危害可能更大,因为它们允许攻击者绕过常规的安全防护,直接利用业务流程的缺陷来窃取信息、篡改数据甚至破坏系统。以下是几种常见的逻辑漏洞类型及其预防策略:...

    Web渗透测试-常见漏洞解析课件

    本课件“Web渗透测试-常见漏洞解析”旨在深入探讨这一主题,帮助学习者理解和掌握如何有效地进行Web应用安全评估。 首先,我们要了解渗透测试的基本流程。它通常包括信息收集、漏洞扫描、漏洞利用、权限提升和清理...

    跨站脚本攻击实例解析

    ### 跨站脚本攻击实例解析 #### 一、跨站脚本攻击(XSS)概述 跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的网络安全威胁,通常发生在网站未能正确处理用户输入的数据时。这种攻击通过注入恶意脚本到...

    解决BEA WebLogic Platform 8.14跨站点脚本编制漏洞问题

    "解决BEA WebLogic Platform 8.14跨站点脚本编制漏洞问题" 这个标题表明了我们关注的核心是BEA WebLogic Platform 8.14版本的安全问题,特别是针对跨站脚本(XSS)攻击的解决方案。BEA WebLogic是一个由Oracle公司...

    ASP 中防止漏洞的高级代码

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要讲述的是如何在ASP(Active Server Pages)环境中使用一段特定的代码来防止SQL注入等常见的安全漏洞。下面将详细解析该段代码的功能及其工作原理...

    Web渗透技术及实战案例解析

    这可能包括SQL注入、跨站脚本(XSS)、文件包含漏洞、命令注入等常见问题。 接下来,一旦发现漏洞,渗透测试者将尝试利用这些漏洞,如通过SQL注入获取数据库敏感信息,或者利用XSS进行钓鱼攻击。在权限提升阶段,...

    安全之路:Web渗透技术及实战案例解析(第2版) 高清带标签

    这些漏洞可能包括SQL注入、跨站脚本(XSS)、文件包含漏洞、命令注入、未授权访问等。了解这些漏洞的原理和利用方法是进行有效渗透测试的关键。 SQL注入是一种常见的Web安全问题,当用户输入的数据未经验证直接与...

    phpcmsv9最新利用工具

    《phpcmsV9系统安全与漏洞利用解析》 phpcmsV9是一款广泛应用的开源内容管理系统,以其强大的功能和易用性深受广大网站开发者喜爱。然而,随着系统的广泛使用,安全问题逐渐凸显,其中就包括了描述中提到的“phpcms...

    DVWA漏洞测试平台分析.v1.0.zip

    这个平台包含了各种常见的Web应用漏洞,如SQL注入、XSS跨站脚本、文件包含、命令注入等,让使用者能够在可控环境中学习和实践网络安全攻防技术。 在《DVWA漏洞测试平台分析.v1.0》中,我们将深入探讨这些漏洞的原理...

    XSS跨站脚本攻击

    ### XSS跨站脚本攻击详解 #### 一、XSS跨站脚本攻击概述 XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的Web应用安全威胁,其核心在于利用网站对用户输入数据的处理不当,允许攻击者注入恶意脚本到网页中,...

    漏洞扫描软件---阿D

    然后,它可能会尝试模拟攻击来验证漏洞的存在,如尝试SQL注入或跨站脚本攻击;最后,阿D会生成详细的报告,列出所有发现的问题和建议的解决方案。 皇家安全部落.lnk和皇家安全部落.reg可能与软件的快捷方式和注册表...

    安全之路:Web渗透技术及实战案例解析(第2版)

    2. **漏洞分类与检测**:Web应用中的安全漏洞多种多样,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)、文件包含漏洞等。书中将详细解析这些漏洞的成因、危害及检测方法,帮助读者识别潜在的风险点。 3. **...

    E072-PHP应用安全-客户端脚本注入漏洞开发及渗透测试.pdf

    2. **跨站脚本攻击(XSS)**:恶意脚本可以窃取用户cookie,实现会话劫持,或者诱使用户执行有害操作,如点击钓鱼链接。 3. **权限提升**:攻击者可能利用XSS漏洞来模拟其他用户的权限,执行未授权的操作。 4. **传播...

    跨站脚本,参考学习

    跨站脚本(Cross-Site Scripting,简称XSS)是一种常见的网站安全漏洞,攻击者通过注入恶意脚本代码到信任的网页上,当用户浏览该网页时,嵌入其中的恶意脚本会被执行,进而窃取用户的敏感数据或进行其他非法操作。...

    瑞星系统安全漏洞扫描器

    《瑞星系统安全漏洞扫描器深度解析》 瑞星系统安全漏洞扫描器是一款专业级的安全工具,主要用于检测和识别计算机系统中的安全隐患,包括但不限于操作系统、应用程序和服务的各种已知和未知漏洞。这款扫描器通过深入...

    ASP常见的安全漏洞

    1. **代码审查**:定期进行代码审查,确保所有输入都被正确验证和过滤,避免SQL注入和跨站脚本(XSS)攻击。 2. **最小权限原则**:为应用程序分配最小必要的权限,限制对服务器资源的访问,特别是对文件系统和...

    web漏洞概述

    跨站脚本执行(XSS)漏洞允许攻击者注入可执行的脚本到动态网页中,影响用户浏览器。为防止XSS,应确保所有用户输入都被安全地转义,并使用内容安全策略(CSP)来限制浏览器执行的脚本。 SQL注入是通过在URL或表单...

    WEB 预防入侵.zip

    跨站脚本攻击之存储型第13节 中国菜刀打架语木马基本使用第14节利用00截断上传webshel​​l第15节代理脚本检测扩展名上传webshel​​l第16节南方企业内容管理系统漏洞第17节 apache解析漏洞上传shell第18节 绕过...

    【技术分享】漏洞分析:MyBB远程代码执行漏洞链分析 .pdf

    其中,第一个漏洞是自动嵌套URL持久化跨站脚本(XSS)漏洞(CVE-2021-27889),它允许未经授权的论坛用户在MyBB的线程、帖子和私人消息中注入存储型XSSPayload。这个漏洞的触发是由于MyBB软件未能有效过滤用户输入,...

    黑客学习资料,工具的使用,脚本的攻防。漏洞的使用

    攻击者可能利用脚本编写SQL注入攻击,或者通过XSS(跨站脚本)向用户浏览器注入恶意代码。而防御策略包括输入验证、编码转换、Content Security Policy等,以防止恶意脚本的执行。 漏洞的使用是黑客攻击的核心。一...

Global site tag (gtag.js) - Google Analytics