米斯特白帽培训讲义(v2)漏洞篇 XSS

米斯特白帽培训讲义 漏洞篇 XSS

讲师:gh0stkey

整理:飞龙

协议:CC BY-NC-SA 4.0

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS 。恶意攻击者往 Web 页面里插入恶意 JavaScript 代码,当用户浏览器该页之时,嵌入 Web 页面里的代码会被执行,从而达到恶意攻击用户的目的。

Payload

Payload 的中文含义是有效载荷,在 XSS 中指代攻击代码或攻击语句。

常见的 Payload 有:

  • 正常弹窗
    • <script>alert(1)</script>
    • <img src=0 onerror=alert(1)>
  • 弹出网站 Cookie
    • <script>alert(document.cookie)</script>
    • <img src=0 onerror=alert(document.cookie)>

分类

总共有三种

  • 反射型:Payload 经过后端,不经过数据库

  • 存储型:Payload 经过后端,经过数据库

  • DOM:Payload 不经过后端

原理:反射型

非持久化,需要欺骗用户点击链接才能触发 XSS 代码(数据库中没有这样的页面和内容)。Payload 一般存在于 URL 或者 HTTP 正文中,需要构造页面,或者构造 URL。

将这段代码保存为xss.php

<?php
header('X-XSS-Protection: 0');
?>
<p>反射型 XSS 演示</p>
<form action="" method="get">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss = @$_GET['xss'];
if($xss!==null){
    echo $xss;
}

我们看到,这段代码中首先包含一个表单,用于向页面自己发送 GET 请求,带一个名为xss的参数。 然后 PHP 会读取该参数,如果不为空,则直接打印出来,我们看到这里不存在任何过滤。也就是说,如果xss中存在 HTML 结构性的内容,打印之后会直接解释为 HTML 元素。

我们部署好这个文件,访问http://localhost/xss.php,如图:

我们直接输入一个 HTML 代码,比如<script>alert(1)</script>,之后点击test

我们可以看到弹窗,也就是我们输入的 HTML 代码被执行了。

之后我们查看元素,这表明,我们输出的内容直接插入到了页面中,解释为<script>标签。

我们可以自定义弹窗中的内容来利用 XSS,比如改成alert(document.cookie)

这个例子中 URL 为http://localhost/xss.php?xss=%3Cscript%3Ealert%281%29%3C%2Fscript%3E,这个 URL 容易引起怀疑,可以使用短网址工具缩短后发送给受害者。

从上面的例子中,我们可以看出,反射型 XSS 的数据流向是:浏览器 -> 后端 -> 浏览器。

原理:存储型

持久化,代码储存在数据库中。如在个人信息或发表文章等地方,假如代码,如果没有过滤或过滤不严,那么这些代码将储存到数据库中,用户访问该页面的时候出发代码执行。这种 XSS 比较危险,容易造成蠕虫,盗窃 Cookie 等。

这里我们把xss.php内容改为(同时数据库中需要配置相应的表):

<?php
header('X-XSS-Protection: 0');
?>
<p>存储型 XSS 演示</p>
<form action="" method="post">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>
<?php
$xss=@$_POST['xss'];
mysql_connect("localhost","root","root");
mysql_select_db("xss");
if($xss!==null){
    $sql="insert into test(id,payload) values('1',$xss)";
    $result=mysql_query($sql);
    echo $result;
}

可以看到,用户输入的内容还是没有过滤,但是不直接显示在页面中,而是插入到了数据库。

我们新建res.php,内容为:

mysql_connect("localhost","root","root");
mysql_select_db("xss");
$sql="select payload from test where id=1";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
    echo $row['payload'];
}

该代码从数据库读取了之前插入的内容,并将其显示出来。

我们部署之后首先查看test数据库,确认它是空的:

然后访问xss.php,像之前一样输入 HTML 代码并点击test,如下:

点击之后却发现没有任何动静,但事实上,我们的数据已经插入到了数据库中。

那么,当我们访问res.php查询这个值的时候,代码就会被执行。

所以说,存储型 XSS 的执行位置通常不同于输入位置。我们可以看出,存储行 XSS 的数据流向是:浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器。

利用

我们可能需要通过 XSS 来获得用户 Cookie 或其他有用信息,利用平台负责接收并保存这些信息。另外,利用平台能够托管利用脚本,于是我们可以向页面只注入一个脚本链接,使长度极大缩短。

这里的 XSS 利用平台使用 xsser.me,大家可以自行下载和搭建。

首先访问主页,你会看到一个登录页面,输入用户名和密码之后点击“登录”:

成功之后会显示主界面,左边是模块列表,右边是项目列表:

我们点击左边“我的项目”旁边的“创建”按钮:

名称和描述可以随便取,不影响使用。输入时候点击“下一步”按钮。之后会出现“配置代码”界面:

我们只选择默认模块,把它展开之后,我们可以看到它的作用是向平台发送一个请求,来收集用户的各种信息。之后点击“下一步”。

然后我们会在首页看到我们的新项目,点击这个项目:

之后点击右上方的查看代码,就可以看到使用方法:

简单来说,MyzcXv?1467719328就是平台所生成的脚本地址,你可以把它放在script或者img标签的src属性中,在把标签插入存在 XSS 漏洞的地方,然后浏览器就会执行。

下面我们点击之前创建的aaa项目。

我们把<script src="..."></script>注入到反射型 XSS 的演示页面中。

提交之后页面没什么动静,但是我们查看利用平台,可以发现新增了一条数据:

附录:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 148,827评论 1 317
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 63,511评论 1 266
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 99,318评论 0 218
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,108评论 0 189
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,112评论 1 266
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,387评论 1 185
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,905评论 2 283
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,657评论 0 177
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,144评论 0 223
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,744评论 2 225
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,100评论 1 236
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,565评论 2 222
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,041评论 3 216
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,769评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,301评论 0 178
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,173评论 2 239
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,313评论 2 242

推荐阅读更多精彩内容