xss攻击实例 php,记一次原生JS实现XSS攻击案例

XSS:跨站脚本(Cross-site scripting)

攻击手段和目的:

攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击者通过JavaScript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。

为了加深自己对XSS攻击的理解,特意尝试了一下,并把整个过程记录下来。

攻击过程:

①、客户端收集用户数据(如留言、发布文章功能)

②、攻击者将留言内容写入了可执行的JavaScript代码

③、将上面的数据未经处理直接存入数据库

④、其他用户查看该网站,看了上面包含了可执行的JavaScript代码的文章和评论

⑤、其他用户就会在浏览器客户端执行攻击者注入的JavaScript代码

本次试验用到如下技术:

①、(客户端)原生Ajax请求

②、(服务端)thinkphp,为了试验方便,不使用数据库,直接返回数据

③、 Cors跨域

原生Ajax请求

XSS测试

function ajax() {

//先声明一个异步请求对象

let xmlHttpReg = null;

if (window.ActiveXObject) { //如果是IE

xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP");

} else if (window.XMLHttpRequest) {

xmlHttpReg = new XMLHttpRequest(); //实例化一个xmlHttpReg

}

//如果实例化成功,就调用open()方法,就开始准备向服务器发送请求

if (xmlHttpReg !== null) {

xmlHttpReg.open("get", "http://vueapp.com", true);

xmlHttpReg.send(null);

xmlHttpReg.onreadystatechange = doResult; //设置回调函数

}

//设定函数doResult()

function doResult() {

if (xmlHttpReg.readyState == 4) {//4代表执行完成

if (xmlHttpReg.status == 200) {//200代表执行成功

document.getElementById("Text").innerHTML = xmlHttpReg.responseText;

}

}

}

}

在这里我使用的是get请求

其中请求地址http://vueapp.com 是我自定义的地址,使用Apache配置

由于这里涉及到跨域问题(出于浏览器安全的同源策略,协议、域名、端口号任一不同都属于跨域)

Failed to load http://vueapp.com/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

我的解决方法是CORS

在后端的接口中添加这么一行代码

header('Access-Control-Allow-Origin:*'); // 允许所有访问源

返回的数据是:

$this->ajaxReturn(array('status' => 0,'info' => "11.png"));

这里我们利用img标签的onerrer属性来执行JS代码,所以src属性填一个访问不了就可以触发onerrer了

开始测试

点击 XSS测试 按钮,结果如图(谷歌浏览器):

bVbnnw0?w=1121&h=87

bVbnnwX?w=909&h=212

这就是一个最最最简单的XSS攻击案例

这次我们去一个网站盗用cookie

bVbnnA8?w=699&h=357

bVbnnBd?w=435&h=230

可以看到所有的cookie信息都在这里了

*发现的问题

为什么我不直接用script标签,而用img的onerror属性。

因为script标签有问题,在后台返回来的script标签在dom是存在的,但是并没有执行

还请各位大佬多多指正


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部