渗透环境
win7 32位配有 dvwa 汉化版 IP:10.10.10.131
下载地址:(https://download.csdn.net/download/weixin_39464539/19517692?spm=1001.2014.3001.5501)解压后用VMware 打开即可
kali linux 2021 IP 10.10.10.132
xss原理及分类
XSS攻击的原理:
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。 XSS攻击本质上是一种将恶意脚本嵌入到当前网页并执行的攻击方式。
一般来说存在XSS攻击风险的功能点主要涉及一下两种:
- 评论功能:
- 用户输入评论(评论处为攻击代码)
- 论坛私信功能
- 用户发送私信(私信内夹带攻击代码)
技术分类
根基 XSS攻击存在的形式及产生的效果分为以下三类:
1.反射型跨站攻击:浏览器-服务器交互
2.存储型跨站攻击:浏览器-服务器-数据库交互
-
常见的场景是博客或新闻发布系统,将包含恶意代码的数据信息直接写入文章或文字评论中,所有浏览文章或评论的用户就被黑客在他们的客户端浏览器环境中执行插入的恶意代码
3.DOM型跨站攻击:浏览器-服务器交互
攻击条件:
反射型/DOM型跨站攻击:服务器接收到数据,原样返回给用户,整个过程没有自身的存储过程(存入数据库)无法直接攻击其他用户。当然这两类攻击也可以利用钓鱼、垃圾邮件等手段产生攻击其他用户的效果。
存储型跨站攻击:
- 入库处理
目标网页有攻击者可控的输入点
输入信息可以在受害者的浏览器中显示
输入几倍攻击的可执行脚本,且在信息输入和输出的过程中没有特色字符的过来和字符转义等防护措施,或者说防护措施可以通过异地哦给你的手段绕过。 - 出库处理
浏览器将输入解析为脚本,并具备执行该脚本的能力
这四个条件缺一不可。
实战 :
DVWA-LOW级别:
首先查看源码: 查看源代码片
。
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>你好 ' . $_GET[ 'name' ] . '</pre>';
}
?>
array_key_exists()
函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
!=
为不等于运算符
&&
为与都为真是为真
这段源码的意思是输入一个内容,点击提交,当输入不为空之后输出:你好 加输入的内容。
输入语句:
<script>alert(/xss/)</script>
弹出提示框说明恶意代码成功运行。
XSS进阶测试方法:
1、闭合标签测试
2、大小写混合测试(JavaScript不区分大小写的特性)
3、多重嵌套测试
4、宽字节绕过测试
5、多标签测试
提升安全等级为medium:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>你好 ${name}</pre>";
}
?>
与low相比多了个语句:
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
意思是将输入内容的含有的<script>替代为空
意义是防止像低等级一样输入一个<script>能闭合语句执行之后的恶意代码
绕过方法:多重嵌套或大小写绕过
方法1:多重嵌套:
<scr<script>ipt>alert(/xss/)</script>
方法2:大小写绕过:
sCRipt>alert(/xss/)</sCRipt>
绕过成功!
提升等级为hight
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>你好 ${name}</pre>";
}
?>
preg_replace函数执行一个正则表达式的搜索和替换。该代码意思为对script有一个正则的替换,但是script的写入用图片事件,和Svg事件也是可以的。
方法1:利用img事件
1.<img src = 1 onerror = alert(/xss/)>
onerror为当视频的媒体数据加载期间发生错误时执行 JavaScript :
<video onerror="myFunction()">
方法2:利用svg事件
2.<svg onload=alert(/xss/)>
kali XSS工具 beef 安装
需要kali Linux root用户进行安装,博主下载的版本为kali 2021
切换root用户需要的详细步骤参考下面网址:
https://blog.csdn.net/qq_44612786/article/details/104220727
kali安装beef
参考下面网址
https://blog.csdn.net/weixin_43847838/article/details/110312851
使用beef工具:
直接输入:
beef -xss
账号密码为beef 和你设置的密码
标红处为攻击指令
我的环境:
kali 10.10.10.131
win7 dvwa靶机 10.10.10.132
所有攻击指令为点击提交
此时刷新beef 会发现出现靶机IP的信息(标红的是一些关键信息)
Beef XSS基础功能:
获取目标的cookie
链接跳转 Redirect Browser
任意弹窗演示 :
获取浏览器指纹:Fingerprient Browser
获取HTML源码信息:Get Page HTML
总结:
beef是一个XSS平台,有非常多的功能
Exploit 模块用的最多,但初学者用Browser就足够了
参考资料:
书籍:《Web安全防护指南基础篇》
Beef-XSS平台基本使用 https://www.bilibili.com/video/av92711691/