xss跨站脚本攻击
2023年3月29日
8:26
又叫CSS(Cross Site Script),跨站脚本攻击
原理:
指的是恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而达到恶意的特殊目的
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
攻击目标:用户
XSS的攻击方式/类型
反射型XSS:
<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理
存储型XSS:
<持久化> 代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
DOM型XSS:
基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。
防御措施
(1)编码:对用户输入的数据进行HTML Entity编码
(2)过滤:移除用户上传的DOM属性,如onerror等,移除用户上传的style节点,script节点,iframe节点等。
(3)校正:避免直接对HTML Entity编码,使用DOM Prase转换,校正不配对的DOM标签
(4).验证码,/token
DVWA演示
反射型xss
Vulnerability: Reflected Cross Site Scripting (XSS)
Low
Medium
![Medium Reflected XSS Source $_GET ) $ _r„ET
str_replace()有致命弊端,他区分大小写,我们可以使用大写绕过或者双写绕过
<SCRIPT>alert(lir)</SCRIPT> // 有一个字符大写即可
<scr<script>ipt>alert(1)</script>
HIGH
<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>"; } ?> |
---|
来自 <http://192.168.48.110/dvwa/vulnerabilities/view_source_all.php?id=xss_r>
<img src=1 one rror=alert(/ljl/)>
![Vulnerability t Cross What's your name? Submit More Information 9192.168.48.110 Ijl/
----------------------------------------------------------------
存储型xss
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。因为存储型XSS的代码存在于网页的代码中,可以说是永久型的。
存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
Vulnerability: Stored Cross Site Scripting (XSS
Low
<script>alert(‘ljl’)</script>
Medium
str_replace()有致命弊端,他区分大小写,
我们可以使用大写绕过<Script>alert (*1j1')</Script>
也可以用双写绕过<scri<script>pt>alert(ljl)</script>
尽管对message参数进行了编码,但对于name参数仍然是简单过滤,我们希望通过大写或双写绕过,但发现name参数有长度限制
用burpsuit 改包解除长度限制
也可以直接用开发者工具改字段长度限制
scirpt 标签
<script> 标签用于定义客户端脚本,比如 JavaScript。
<script>alert(1);</script>
<script>alert("xss");</script>
alert()
是显示一条弹出提示消息和确认按钮的警告框。
需要注意的是 :alert()是一个阻塞的函数,如果我们不点确认按钮,后面的内容就不会加载出来。
// 已经对<script>标签进行了严格的过滤
>
//img标签原理:插入一个没有的图片,当浏览器找不到图片时,自动执行后边的代码。
HIGH
把这个值改掉
分别使用双写和大写绕过都失败了
换用img标签
成功
标签:脚本,xss,跨站,DOM,代码,alert,XSS,页面 From: https://www.cnblogs.com/xlvbys/p/17536868.html