护网笔记(八)-- XSS漏洞利用


目录
  • 浏览器同源策略
    • 概述
    • 目的
    • 限制范围
  • XSS
    • 介绍与原理
    • 反射型XSS
    • 存储型XSS
    • XSS平台
    • DOM型XSS

浏览器同源策略

概述

1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同":

   (1)协议相同

?    (2)域名相同

?    (3)端口相同

举例如下:

URL地址 是否同源 原因
http://www.secevey.com/index.html
http://secevey.com/index.html
域名不同
http://secevey.com/index.html
https://secevey.com/index.html
协议不相同
http://127.0.0.1:8888
http://127.0.0.1:8080
端口不相同
http://secevey.com/a.js
http://secevey.com/index.html
http://127.0.0.1:80/c.html
http://127.0.0.1:80/tab/d.html

总结:只有同时满足域名、协议、端口同时一致,才是同源的

目的

  同源策略的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

设想这样一种情况:
如果Web世界没有同源策略,当你登陆FreeBuf了账号并打开另一个站点时,这个站点的javascript可以跨域读取你的FreeBuf账号数据,这样的话整个WEB世界就没有隐私而言。

(之前讲过,登陆网站一般都会记录cookie值,如果不消息访问了恶意的小网站,同时它又捕获了你的cookie,而http又是无状态的协议,谁有cookie就认谁是真的,所以没有同源策略就很危险。后边要学的XSS如果打到cookie就可以完成冒用身份登录)

防护手段:
http-only 不允许js代码操作cookie
将cookie与访问的ip进行绑定    这种使用的很少,也不方便

限制范围

  随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制:

(1) Cookie、LocalStorage 和 IndexDB 无法读取。
(2) DOM 无法获得。
(3) AJAX 请求不能发送。

虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响。

例如,我同一个站点的两个不同域名不能共享Cookie;

再例如,我的前端页面项目的域名与我后端Jetty服务的域名不同,那么我就无法发送Ajax请求来访问Jetty服务,等等。

现在有一个场景:A站点上很多目录(www.A.com/upload www.A.com/test www.A.com/doc )他们使用同一个cookie都可以正常访问,但是存在某个upload目录下有一个很重要的cookie,不想与其它分享

setcookie('name','admin',0,'/upload')

在这里插入图片描述①设置能够携带cookie访问的路径

②指定一个固定的域名,默认是当前php文件所属的域名

③安全套接字,考虑到兼容性默认false使用http的,如果全局都做了https就可以设置true

④httponly控制是否不允许通过js代码进行操作cookie

在HTML语言中,有部分标签在引用第三方资源时,不受同源策略的限制:

     使用/符号包裹字符                
      
              当input失去焦点并且它的value值发生变化时触发
             当input的value值发生变化时就会触发
               当input获取焦点(点击输入)时触发
                    当input失去焦点时会触发
   通过执行auto属性执行本身的focus事件



    注意使用的是反引号包裹  
		当鼠标在图片上时触发
   			点击图片触发

点击下拉选项时触发
通过open属性自动触发 提交后即可触发 点击下拉选项时触发 获取cookie信息 HTML有三种弹框样式 1、弹出警告框,带确定按钮:alert 2、弹出,选择框 有确认和取消按钮 confirm 3、 弹出,输入框 有确认和取消按钮 : prompt

靶场:
pikachu

找到反射型xss(get)  将   

在这里插入图片描述
在这里插入图片描述

XSS短连接

应用场景:在做钓鱼的时候网址过长容易引起怀疑,需要将网址变短

存储型XSS

存储型XSS:又称持久型XSS,它与反射型xss最大的不同,就是攻击脚本被永久的存放到目标服务器的数据库或者文件中,因此储存型XSS的危害会更大。

存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

在这里插入图片描述
发现留言板是textarea标签。

分析textarea标签的特点

//www下新建  xss_stored.php 文件



    
    Title





浏览器访问新建的文件,并传递参数,参数值

发现语法也没错即使不弹窗,可知道textarea标签优先级比较高,在它闭合之前中间的内容都当做文本处理。
在这里插入图片描述构造textarea中传入内容,使之先闭合,从而实现弹框

例如: 或者

在这里插入图片描述

在这里插入图片描述

2)开始之前将刚才插入的点击删除掉。重新插入使用burpsuite抓包

在这里插入图片描述

3)设置代理使用bp抓包,然后发送到Repeater中

在这里插入图片描述

4)在POST请求路径后添加 XDEBUG_SESSION_START=PHPSTORM 点击Send发送,进入PHPstorm进行调试

在这里插入图片描述

5)重点在23行判断POST提交的 message参数,判断是否为空,下一步对它使用escape()函数进行处理

在这里插入图片描述

6)进入这个函数中看到对传入的字符串进行转义处理,右键 Set Value修改$data的值

alert`1`   部分改成  alert('1')    继续往下执行

在这里插入图片描述

7)查看返回的$message值中的单引号已经做了转义,所以这里只过滤了SQL注入。然后插入数据库

在这里插入图片描述

8)可以登上数据库查看刚才插入的表

在这里插入图片描述

9)第33行往后是控制页面出现删除按钮的,现在可以关闭调试去看看页面情况

在这里插入图片描述

10)去刷线下页面,出现弹框,确定后,看到页面出现删除按钮。

1

下面看一下,刷新页面为什么会出现弹框

11)可以和上边一样bp抓包,repeater修改 send发送PHPstorm调试,也可以直接在浏览器中直接发送到phpstorm进行调试

在这里插入图片描述

12)刷新页面是一个GET请求,可以跳转到第33行,判断get中有没有id值,没有做删除所以没有传入id值,就会往下跳转

在这里插入图片描述

13)第79行往下,先打印$html ,查询数据库message表,将表中带有注入代码读取出来,直接放在

标签里面。

在这里插入图片描述

总结:存储型XSS利用过程

1、恶意攻击者在存在XSS漏洞的网站提交构造的XSS代码
2、web应用程序接收提交数据,没有过滤或者过滤不严格
3、写入到数据库中或者文件中
4、受害者访问这个存在XSS恶意代码的页面时
5、web应用程序从数据库或者从文件中读取之前恶意攻击者提交的代码
6、web应用程序服务器返回这段数据
7、受害者浏览器渲染返回的HTML页面,执行返回的JavaScript
8、恶意的JavaScript代码在后台悄悄执行,获取用户信息

XSS平台

新开一个pikachu网站作为xss平台
在这里插入图片描述

在这里插入图片描述(1)pikachu之xss获取cookie

核心payload:


说明:

document.location='http://www.baidu.com'					跳转页面
document.cookie												捕获网站的cookie

? ../pikachu/pkxss/xcookie/cookie.php脚本写的是结束跳转页面的请求
在这里插入图片描述
流程图如下:
在这里插入图片描述
1)找到含有xss漏洞的网站输入我们构造的核心payload我们得到了我们制造的URL

例如:

##留言板填入内容,需要先闭合

2)我们会获取一条cookie,后续用户一旦访问这个页面,还会获取到cookie,并且重新定向到我们指定的地址上。

3)查看cookie,我们后台就会收到它的cookie等信息。如图:

找个存储型XSS

在这里插入图片描述
(2)pikachu之XSS钓鱼攻击

实验环境有问题,可参考学习不做本实验

相关说明连接地址: https://www.naraku.cn/posts/38.html

思路:在一个存在xss漏洞上的页面上嵌入一个链接请求,请求会返回一个Basic认证的一个头部。

若用户信息安全意识不够,输入了用户和密码,那么这些会被发送到pkxss后台

我们的实验用 存储型xss模块演示

在这里插入图片描述

我们只需要在这个存储型的页面上去,嵌入一个能够访问我们后台的返回Basic认证的标签就行

这里可以用a标签、img、

查看下fish.php源码,其中location(重定向)换成自己的ip,即xss平台ip

地址: http://127.0.0.1/pikachu/pkxss/pkxss_login.php

(3)pikachu之XSS获取键盘记录

我们仍然是用存储型xss来演示,先看下pkxss后台的键盘记录

修改ip,ip为自己xss平台的ip地址 ../pkxss/rkeypress/rk.js
在这里插入图片描述

返回输入框,


这一策略就违反啦同源策略,(ajax)

由于XSS平台是攻击者自己搭建的,攻击者可以允许所有的人跨域请求他,可以rkserver.php把里面的Access-Control允许所有人访问。即可实现攻击目的。

pkxss后台会有键盘记录,地址: http://127.0.0.1/pikachu/pkxss/pkxss_login.php

DOM型XSS

DOM型XSS

? 对象模型(Document Object Model)即大名鼎鼎的DOM,它可以被认为是一种通过将页面元素以对象的树形方式表现,以便有javascript组织处理的实现方法。

常用的DOM方法

用户可通过javascript(以及其他变成语言对HEML DOM进行访问,所有HTML元素被定义为对象,而编程接口则是对象方法和对象属性。)

方法 描述
getElementBuId 返回带有指定ID的元素
getElementsBy TagName 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)
getElementsByClassName 返回包含带有指定类名的所有元素的节点列表
appendChild() 把新的子节点添加到指定节点
removeChild() 删除子节点
repaceChild() 替换子节点
insertBefore() 在指定的子节点前面插入新的子节点
createAttribute() 创建属性节点
createElement() 创建元素节点
createTextNode() 创建文本节点
getAttribute() 返回指定的属性值
setAttribute() 把指定属性设置或修改为指定的值