XSS 漏洞
0x01 什么是xss
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容
https://xz.aliyun.com/t/4507
https://prompt.ml/0 靶机
https://github.com/myxss/vulstudy
0x02 常用的xss攻击手法
1.盗用cookie,获取敏感信息。
2.利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
3.利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的操作如发微博、加好友、发私信等操作。
4.利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
5.在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDOS攻击的效果。
0x03 反射型xss
反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。
反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
01 XSS 挑战之旅
总靶场地址:https://github.com/c0ny1/vulstudy
XSS 漏洞靶场地址:https://github.com/c0ny1/vulstudy/tree/master/XSS-challenge-tour
02 挑战之旅——poc
001 level1
010 level 10
f12查看源码,发现在图片下面存在隐藏的from表单
先删除背景照片,然后在删除表单的隐藏属性
修改from 表单,删除隐藏属性
整个from 表单缺少提交按钮,可以直接从level09 中复制过来
修改一番,添加level10 缺少的元素,修改如下
这样即完成level10的修改,给表单内添加值。点击提交
注意浏览器地址栏,发现存在提交多个参数,但是不清楚有哪些参数显示在页面当中
http://117.167.136.240:38091/level10.php?t_link=123&t_history=321&t_sort=213&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5
老操作,继续修改
这样的话就发现第三个参数会显示在页面上
尝试闭合,提交事件参数,注释,这里就不用在页面上添加按钮了,直接在地址栏中添加即可,
t_sort=123" onclick="alert(1)" //&submit
点击即可完成level10
011 level 11
和level 10 相同,唯一不同的位置在于多一个链接参数,这个参数正好是我们上一个页面的地址
http://117.167.136.240:38091/level10.php?t_link=123&t_history=321&t_sort=213&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5
猜测,他可能直接获取我们的http请求头中的Referer 内容,http 请求头的介绍
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referer
这里我们要用到火狐的插件 ModHeader 一款可以帮我们修改http请求信息的插件
https://addons.mozilla.org/zh-CN/firefox/addon/modheader-firefox/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search
配置如下
刷新level11 页面,插件开启状态下
发现我们referer 头的信息被传入到页面中,尝试构造poc
刷新,并点击
完成
0x04 存储型XSS
持久型跨站脚本(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。
此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
01 DVWA 靶机
001 DVWA 靶机搭建
这里我们直接使用dokcer来搭建我们的dvwa漏洞平台
直接看到dockerhub
https://hub.docker.com/r/vulnerables/web-dvwa
开启本地部署,然后使用
访问容器ip:10081
登入完成后,直接访问到我们的存储型xss平台(注意先把难度改为low)
进入存储型xss
002 测试DVWA 靶机
开始进行测试,先尝试性输入一些字符,判断是否存在过滤,并判断输入后的字符输出在页面哪些地方
可以看到,在这里是没有做任何过滤信息,输入信息如下
"><svg/onload=alert(1)>
(这里在做任何测试都是一样的,先检查过滤,先闭合,构造poc)
003 成功弹窗
004 xss平台(蓝莲花xss平台)
这里我们要使用到xss平台
XSS 攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序,而本平台的作用就是生成与接收 XSS 测试效果。
这里我们用的是清华大学蓝莲花战队前xss平台,具体地址
https://gitee.com/bxqtee/BlueLotus_XSSReceiver
把项目上传到服务器,解压,直接利用目录下的dockerfile文件来搭建,同时修改dockerfile文件如下
(默认运行dockerfile会直接报错,原因是原来的项目被删除了)
Docker run 启动容器
浏览器访问(注意默认访问ip+端口,会出现正常的空白页面,需要在后面加入/admin.php,输入密码即可进入xss平台后台)
默认密码(bluelotus),登入完成
005 XSS平台基本操作
其实xss平台原理很简单,只是利用
1.首先我们添加我们自己项目的js文件,如下
website 参数的值设置为xss平台的地址,注意不需要加入文件如/admin.php
2.生成我们的payload
3.复制我们的payload,黏贴到存在xss漏洞的位置
这里发现输入框的长度好像不够,可以直接通过f12来修改html属性
直接修改为空,再次黏贴
插入payload后,记得要刷新页面
回到xss平台,收到管理员cookie,如下
点击接收
006 ModHeader 插件介绍
modheader插件是一款简单实用的chrome http请求头添加、修改或删除请求头和响应的浏览器插件
007 盗取靶机cookie
这里我们直接添加一个request header请求头,内容就是xss平台获取到的cookie
删除掉网址后面的login.php,刷新页面,直接登入成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18XDX0xa-1603371049325)(/Users/doufu/Library/Application Support/typora-user-images/image-20201022203102853.png)]
02 CMS靶机实操(本地)
https://bitbucket.org/evnix/codoforum_downloads/downloads/
https://blog.jenisec.org/security/codoforum-xss-getshell.html
01 靶机搭建(略)
02 靶机测试
经过测试发现用户名注册处存在存储型xss,可以注册如下
``
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YwXDvrB1-1603371049326)(/Users/doufu/Library/Application Support/typora-user-images/image-20201022203917278.png)]
注册如下
"><svg/onload=alert(1)>
注册成功后,会自动跳转到用户页面
那么我们这里直接使用xss平台构造xsspayload
直接打到靶机管理员的登入地址,以及cookie信息
直接使用modheader登入,登入靶机成功
想办法getshll即可
0x05 DOM型XSS
传统的 XSS 漏洞一般出现在服务器端代码中,而 DOM-Based XSS 是基于 DOM 文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于 DOM 的 XSS 攻击。
https://xz.aliyun.com/t/4067