领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

知了汇智《XSS攻击-DVWA练习实战》课程文档讲解(上)

nixiaole 2024-11-11 15:25:36 知识剖析 23 ℃

文档来源:知了汇智冯老师

今天我们讲一些常用的语句及绕过以后就开始进行实战啦!


XSS常用的语句及绕过

知了汇智-禁卫实验室(GoDun.F)

0 XSS常用的测试语句:

<script>alert(1)</script>

<img src=x onerror=alert(1)>

<svg onload=alert(1)>

<a href=javascript:alert(1)>

1 常用的绕过

常见的XSS的绕过编码有JS编码、HTML实体编码和URL编码

A:JS编码

JS提供了四种字符编码的策略,如下所示:

三个八进制数字,如果个数不够,在前面补0,例如“e”的编码为“\145”。

两个十六进制数字,如果个数不够,在前面补0,例如“e”的编码为“\x65”。

四个十六进制数字,如果个数不够,在前面补0,例如“e”的编码为“\u0065”。

对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)。

B: HTML实体编码

命名实体:以&开头,以分号结尾如 “<”的编码是“<”。

字符编码:十进制、十六进制ASCII码或Unicode字符编码,样式为“&#数值”。例如”<”可以编码为“<”和“<”。

C: URL编码

这里的URL编码,也是两次URL全编码的结果,如果alert被过滤,结果为

%25%36%31%25%36%63%25%36%35%25%37%32%25%37%34

在使用XSS编码测试时,需要考虑HTML渲染的顺序,特别是针对多种编码组合时,要选择合适的编码方式进行测试。


XSS之DVWA练习实战

知了汇智-禁卫实验室(GoDun.F)

0 DVWA之Reflected XSS(反射型XSS)

Low

源代码:

可以看到,low级别的代码只是判断了name参数是否为空,如果不为空的话就直接打印出来,并没有对name参数做任何的过滤和检查,存在非常明显的XSS漏洞

我们输入 <script>alert('hack')</script> 直接就执行了我们的 js 代码

查看源代码可以看到,我们的js代码已经被插入到页面中了

Medium

<pre> </pre> 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。

可以看到,medium级别的代码只是在low级别上增加了对于<scripit>的过滤,并没有什么卵用,我们可以直接大写绕过

我们输入 <SCRIPT>alert('hack')</SCRIPT> ,直接就执行了我们的js代码

查看源代码,可以看到,我们的代码虽然输入的时候是大写(躲过了过滤),但是最后输出的时候却是小写的

High

源代码:

可以看到,high级别的代码使用了正则表达式直接把 <*s*c*r*i*p*t 给过滤了,* 代表一个或多个任意字符,i 代表不区分大小写。所以,我们的<script>标签在这里就不能用了。但是我们可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。

我们输入 <img src=1 οnerrοr=alert('hack')>

上面输入的意思是,当图片显示错误时,然后执行 alert('hack') ,这里我们的src=1肯定显示错误啊,所以就执行 alert语句

可以看到,我们的代码执行了。

查看源代码,可以看到,我们的代码插入到了页面中。

Impossible

源代码:

htmlspecialchars(string): 把预定义的字符 "<" (小于)、 ">" (大于)、& 、‘’、“” 转换为 HTML 实体,防止浏览器将其作为HTML元素

可以看出,impossible级别的代码先判断name是否为空,不为空的话然后验证其token,来防范CSRF攻击。然后再用htmlspecialchars函数将name中的预定义字符转换成html实体,这样就防止了我们填入标签

当我们输入 <script>alert('hack')</script> 时,因为 htmlspecialchars 函数会将 < 和 > 转换成html实体,并且${name}取的是$name的值,然后包围在<pre></pre>标签中被打印出来,所以我们插入的语句并不会被执行。

我们可以查看源代码,表单提交的过程中,把我们的user_token也一并提交了,来和服务器端的session_token做验证,防止CSRF攻击。我们输入的代码,直接被当成html文本给打印出来了,并不会被当成js脚本执行。

今天就先讲到这里哦,我们明天继续!


最近发表
标签列表