2

万圣夜快乐

 2 years ago
source link: https://upclinux.github.io/2015/10/31/halloween/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

万圣夜快乐

2015-10-31     vjudge1     活动 XSS

今天是万圣夜(Halloween),正好也是社团文化节晚会。

大家肯定都知道,其实我们是不太关心节目的,而且协会缺少妹子,演不出什么好节目,所以我们临时决定,在晚会上搞了一个“不给糖就捣蛋:jack_o_lantern:”(Trick-or-theat)的活动。

今天不是万圣节

稍微纠正一下,10月31日并不是万圣节(All Saints’ Day),而是万圣夜(Halloween)。就像12月24日不是圣诞节(Christmas Day)而是圣诞夜(Christmas Eve)……其实都是淘宝搞促销的借口而已

晚会现场

这就是晚会现场,虽然我们没有人上台演出。

Trick-or-treat!

我们协会并没有上台演出(因为需要提前排练),而是在舞台两边的微信墙演出——就是拿微信关注“社团石大”公众号,然后在活动期间给公众号发文字,你的文字就能显示到微信墙上,从而参与互动。就是下图——

微信墙

那个大法风格文字不是我们的节目。

节目开始——我们的演员,向微信墙,发了一条信息:

萌萌哒<script>while(1);</script>

节目很短,一下子就演完了:ghost:

由于我们的准备不太充分,所以节目真的不精彩。下回我们会好好准备……

这也叫节目?

难道你没仔细看一下演员到底发了什么吗?我们的演员反映说,大屏幕黑了3分钟,投影仪(其实应该是操作投影仪的人)一直在重启,最后重新打开网页才上去……

发生了什么

我们的节目虽然很短,但是有一个响亮的名字——XSS(跨站脚本攻击)

首先谈谈微信墙。

微信实在是火得不得了,各种营销互动拉票集赞骗人活动都用微信,简直是腾讯的新帝国!因为微信提供了众多开发者接口(虽然不一定都给屌丝开放),但是在大家都不愿意安装新 APP 的情况下,使用微信作为一个轻 APP 实在是太划算了。

微信墙的原理就很简单了——一个经过设计狮精心制作的网页,后台 PHP+MySQL,隔几秒钟就把服务器里的留言显示出来(用 AJAX 技术避免浏览器的“刷新”)。至于微信墙做得怎么样,基本上取决于设计狮的水平。后端PHP+前端AJAX都普及到泛滥了,所以随便找个人都能把后台写出来。服务器的数据哪儿来呢?因为微信有接口,所以按照疼讯的接口文档编程就行了。

因为微信太火了,所以事实上根本都用不着编程——百度上一搜一大把。稍微懂点技术就行,如果拿 Windows 当服务器,甚至都不用敲命令:smirk:

接着谈谈我们的“节目”。

XSS 有很多种形式。精心构造的 XSS 可以达到破坏或窃取数据的目的。当然,作为一个晚会的“节目”,我们就只写了一个最简单的 while(1)。(其实演员还不知道这个东西是啥呢!)

因为微信墙后台太简单了,而且没有哪个正常人会像孙悟空那样大闹天宫晚会(特意安排的不算),所以编程的人肯定没想到有人会在万圣节前夜捣蛋——

微信是疼讯搞的,我们认为它没有漏洞(至少跟微信墙相比)。它会把我们发的内容原封不动地交给微信墙服务器。作为一个网站,微信墙可能会用以下方式显示观众留言:

<?php
    // 从服务器(数据库)获取留言
    ...
    $row = mysql_query($sql);
    $user = $row[0]
    $message = $row[1];
    ...
?>
...
<!-- 显示用户留言(头像昵称什么的,略) -->
<li><?php echo $message; ?></li>

他们很可能直接用 echo 语句把观众留言输出。

PHP 的 echo 并不进行任何过滤,所以你发萌萌哒的时候会显示萌萌哒三个字;发萌萌哒<script>while(1);</script>的时候也会把这堆乱七八糟的东西同时输出,只不过,后面script包围的东西是一个合法的 HTML 标签,所以浏览器会执行这段代码。于是……浏览器卡死了。

XSS 就是这样。一个攻击者试图找到网站的漏洞,通过发送精心构造的数据,使浏览器可以执行一段代码。结果就是,其他人在浏览这些页面的时候,浏览器执行了这段代码,……实施破坏,或者窃取隐私,或者植入病毒

XSS 的防范也是个技术活。原则很简单,不要信任任何来自用户的数据,因此在输出之前对特殊字符进行过滤是最有效的方法。

如果出于功能需要,不能过滤所有 HTML 标签,可以看一下百度Web前端开发部的相关文章。他们试图站在前端的角度,在不过滤 HTML 标签的情况下阻止恶意元素的产生。

另一个 Trick-or-theat

既然一个简单的脚本就把微信墙搞垮了,那么他们微信墙后台的密码肯定是' or 'a'='a。不信可以试试。

这是我们要演的另一个节目,节目的名字是 SQL 注入,只不过今天太匆忙没做彩排。等以后再有晚会的时候,我们可能就会派人演出,到时候欢迎大家捧场:smirk:

现在处处都在强调“安全生产”,甚至有一个工地里面都写着亲爱的工友们:在外打工,注意安全,一旦发生事故:别人睡你媳妇,打你孩子,花你的抚恤金!打工安全,为你自己。

所以,作为给人打工的IT农民工——码农,开发应用的时候怎能不注意安全呢?虽然很多码农没有媳妇孩子和抚恤金


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK