Lemon's blog

XSS理解+练习

Record my learning process of XSS.

字数统计: 2k阅读时长: 7 min
2019/04/24 Share

XSS攻击和SQL注入都是web安全中很常见的攻击方式,最近先学习XSS攻击,待到XSS学完后再去学习SQL注入,哇(感慨一番),这些知识真的太有趣了。

在开始之前,有必要了解一下概念

1、XSS跨站脚本攻击定义

跨站脚本攻击是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。为了与层叠样式表的缩写CSS区分开,跨站脚本攻击通常简写为XSS。

2、XSS类型

1)反射型XSS

反射型XSS只是简单地将用户输入的数据直接或未经完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。

2)存储型XSS

存储型XSS脚本攻击是指由于Web应用程序对用户输入数据的不严格,导致Web应用程序将黑客输入的恶意跨站攻击数据信息保存在服务端的数据库或其他文件形式中,当网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,进而导致跨站脚本代码的执行。

3)DOM Based XSS

基于DOM的XSS跨站脚本攻击是通过修改页面。DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。

3、XSS攻击

1.XSS盗取用户信息
2.XSS盗取Cookie
3.XSS钓鱼攻击
4.XSS蠕虫攻击

在这里插入图片描述
了解完这些概念之后,就来实战。

一、在DVWA漏洞靶场练习

一、反射型XSS

进行DVWA环境中,选择安全等级,这里就按照从低到高的顺序进行。
在这里插入图片描述
选择XSS(Reflected),查看一下源代码。
在这里插入图片描述
观察代码可以发现,这里没有任何过滤。那就输入最常用的语句

1
<script>alert(/hacker/)</script>

输入完之后便会出现这个弹窗了
在这里插入图片描述
Medium
接下来,切换到中级( Medium)
如果还输入刚才我们输入的语句会出现什么结果,试试看。
在这里插入图片描述
没有出现弹窗,看一下源代码。
在这里插入图片描述
发现前面的<script>没有了,那就看看源代码中有什么过滤方式把<script>给过滤掉了
查看源代码
在这里插入图片描述
这里代码中用到了str_replace() 函数。
str_replace() 函数的作用:替换字符串中的一些字符(区分大小写)。
所以这里是把<script>给替换掉了,但是这个函数其实有个漏洞,区分大小写。。。
那我输入这样的语句(大小写语句)

1
<ScRipt>alert(/hacker/)</script>

在这里插入图片描述
这里代码只过滤了 <script>,那就换其他弹窗语句,也可以绕过。(body语句)

1
<body onload=alert(/hacker/)>

还可以采用双写绕过

1
<sc<script>ript>alert(/hacker/)</script>

在这里插入图片描述
可以看到str_replace() 函数把包裹在外层的 <script>给过滤掉了,但是里面的并不会过滤掉,这样形成的还是一个完整的可执行的语句。

接下来,尝试高级的(high)
<script>alert(/hacker/)</script>这句来试试
在这里插入图片描述
过滤完了,只剩下了一个>
那就看看源代码是如何过滤的
在这里插入图片描述
preg_replace 函数执行一个正则表达式的搜索和替换。
这里就了解一下正则表达式:

正则表达式(regularexpression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

那这里就可以理解为代码将<script全给替换了,那如何绕过。。。那我换一个语句弹窗不就行了。。。
这里可以用body标签来弹框。

1
<body onload=alert(/hacker/)>

在这里插入图片描述
这就出现弹窗了。

二、储存型XSS

储存型和反射型最大的区别便是持久型,下面就从low到high练习,就可以清除的明白这两种类型的区别了。
low
先看源代码
在这里插入图片描述
代码很长,但我们只看最后输入结果那部分代码,发现stripslashes() 函数,查一下,发现这个函数的用法:删除由 addslashes() 函数添加的反斜杠。所以没有如何过滤,直接最常用的语句就可以了

1
<script>alert(/hacker/)</script>

但是这里有字数限制,没有办法输入了
在这里插入图片描述
那就打开F12改一下
在这里插入图片描述
改为之后输入
在这里插入图片描述
成功,下面看看有啥区别,先跳转到其他页面去,再打开这个页面,会发现。。。
在这里插入图片描述
又给我们弹出了这个页面,这就是储存型XSS。每当你登陆这个界面,就会弹出这个弹框。

Medium
接下来,看一下中级的。
还是先输入一下常见的语句
在这里插入图片描述
可以看到<script>被过滤掉了。
看一下源代码
在这里插入图片描述
和反射型XSS的Medium一样,所以可以用这两个语句绕过

1
2
3
<body onload=alert(/hacker/)>
<sc<script>ript>alert(/hacker/)</script>
<ScRipt>alert(/hacker/)</script>

这里我们把三种语句都注入,再次点击这个页面会出现三次弹窗

在这里插入图片描述

high
在这里插入图片描述
正则表达式,用之前的语句就可以直接绕过。

通过这些练习,可以了解就反射型的XSS攻击时间短,例如弹窗只弹出一次,而存储型的XSS攻击则直接储存在数据库中,只要用户访问就可以弹出。

将安全等级调至impossible
安全等级调至到impossible,即不可绕过。
就以反射型的XSS来说吧
先以最常用的语句来攻击
结果:
在这里插入图片描述
在这里插入图片描述
发现<和>都被转换了,我们就去看一下源代码
在这里插入图片描述
发现了这样的一个函数PHP htmlspecialchars() 函数,htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:

& (和号)成为 &amp;
" (双引号)成为 &quot;
' (单引号)成为 '
< (小于)成为 &lt;
> (大于)成为 &gt;

所以这个函数就把我们输入的<和>给过滤掉了,所以这是一种防护手段,防止恶意的XSS攻击。

下面看一下存储型XSS的impossible
还是先用常用的攻击一下
显示结果:
在这里插入图片描述
这就不需要再看后台源码了,这直接就显示<和>已经被过滤了.
我们就看一下源代码
在这里插入图片描述
发现在输出那有一个htmlspecialchars() 函数,所以这个原理就和反射型XSS攻击一样。这样DVWA练习就结束了。

感悟:果然只有动手去操作了,才会了解一些概念和一些攻击方式,有很多很好的平台供自己去学习,合天、安全龙、漏洞银行等等,只要自己想要去学,这些东西都可以学到,接下来就去XSS通关平台和谨灵实验室继续练习。

努力吧,少年!!!

CATALOG
  1. 1. 1、XSS跨站脚本攻击定义
  2. 2. 2、XSS类型
  3. 3. 一、反射型XSS
  4. 4. 二、储存型XSS