跨站漏洞解析-小韩网站编程安全系列一(2)

作者:小韩 来源:蓝色经典 时间:2007-07-13 10:06:00 

构建跨站脚本攻击

哈哈,如果你是一个坏坏的用户,那么看到这里你一定很开心了,你认为自己将学会如何做一名骇客,不过我只能很遗憾的告诉你,想都不要想,呵呵,重复我经常说的一句话,以下内容禁止心智不成熟的未成年人观看,其中涉及的内容仅作为教学和研究使用,严禁利用这里所讲授的知识进行不法侵害行为。

在这里我拿出以前做的几个案例笔记(全文大多数都发表在了《黑客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/user.php?action=mod&userid=38,然后将其另存到本地,然后修改form控件的action属性,打开后提交,程序提示修改成功,看来是允许外部提交的(其实也可以直接看代码的……嘿嘿,我不是懒嘛)。

因为嫌PA的页面太不符合WEB标准,做自动提交的时候总是出现javascript错误,我们来自己构造一个表单,通过查看源代码,我们可以构造一个只有几个必填字段的表单,然后在body标签后加属性onLoad,值为javascript:document.forms[0].submit(),即当页面载入时自动提交表单。
这里我们还有一个要注意的地方,就是自己的userid,在构造表单的时候我们要用到这个值,怎么获得userid呢,我们需要登陆后在cookies里找pauserid的值。

在这个案例中,我们在构造跨站利用时候采取了一种十分“恶毒”的手段,就是插入一个iframe指向我们自己的网页,在这个网页中,我们完整的复制了原始代码中的表单部分,并将某些内容修改为我们需要进行的操作,最后再让这个表单自动提交。

标签:跨站,漏洞,安全
0
投稿

猜你喜欢

  • Google AdSense:广告放在网页什么位置?

    2009-02-01 14:52:00
  • Matt Cutts访谈 关于Google索引和301重定向等

    2010-09-15 17:14:00
  • IT人才创业失败的16大原因

    2008-05-22 17:23:00
  • 10种提高WordPress访问速度的方法

    2010-03-22 10:01:00
  • 网站价值判断之网民回头率

    2008-05-20 18:43:00
  • 竞合将是未来中国网络视频产业的主旋律之一

    2009-10-16 09:23:00
  • DeDecms SEO优化经验谈(适用于任何网站)

    2010-12-08 16:21:00
  • Windows2003服务器安装及设置教程—文件及文件夹权限篇二—给文件夹设置权限一

    2010-02-02 15:30:00
  • 谷歌是如何做代码审查的

    2011-08-05 19:04:02
  • 如何处理IIS超时事件?

    2010-06-26 19:20:00
  • 如何在Windows Server 2003中配置DNS

    2008-12-23 15:56:00
  • 网宿科技:发展提速真的“差钱”

    2009-10-30 07:22:00
  • 大型网站架构不得不考虑的10个问题

    2010-03-13 15:21:00
  • DEDE:footer调用新方法,解决整站调用footer

    2009-05-12 10:49:00
  • 技巧:加固外网上的IIS服务器安全

    2009-08-29 13:57:00
  • 让的FileSystemObject(fso)对象更加安全

    2007-09-20 13:05:00
  • 如何让网站在百度搜索引擎尽快收录

    2008-12-08 09:10:00
  • 教你设置Discuz! 7.1编辑器

    2009-11-06 13:31:00
  • Godaddy的windows主机支持PHP吗?

    2010-04-16 13:12:00
  • 网络草根月赚3000的十种方法

    2008-01-28 21:01:00
  • asp之家 网站运营 m.aspxhome.com