1.反射型

非持久化,需要用户自己点击才可以触发

通常出现在搜索框

<?php

    $id=$_GET['id'];
    echo $id;

?>

http://127.0.0.1/test/sc.php?id=<script>alert(1)</script>

2.存储型

持久化,危害比较大

通常出现在个人信息和留言板处

//提交漏洞页面
<form action="" method="post">
    <input type="text" name="xss"/>
    <input type="submit" value="test"/>
</form>  

<?php
    $xss=$_POST['xss'];
    mysql_connect("localhost","root","root");
    mysql_select_db("test");
    if($xss!==null){
        $sql="insert into xss(id,s) values('1','$xss')";
        $result=mysql_query($sql);
        echo $result;
    }
?>
//显示数据库查询页面
<?php
    mysql_connect("localhost","root","root");
    mysql_select_db("test");
    $sql="select s from xss where id=1";
    $result=mysql_query($sql);
    while($row=mysql_fetch_array($result)){
        echo $row['s'];
    }
?>


3.DOM型

类似于反射型,但是直接在前端输出,而不经过后端

<?php
    error_reporting(0);
    $test = $_GET["test"];
?>
<html>
<input id="text" type="text" value="<?php echo $test;?>" />
<script type="text/javascript">
    var text = document.getElementById("text");
    document.write(text.value);
</script>
</html>

关于DOM型

<html>

<body>
<input id="id" type='text'>
<script>
	//var a='<script>alert(1)<\/script>';
	var a="<img src=1 onerror=alert(1)>";
	document.getElementById("id").innerHTML=a;
</script>

</body>
</html>

上面的代码,如果是<script>alert(1)</script>不会触发弹窗

如果是<img src=1 onerror=alert(1)>则会触发弹窗

原理应该是(?)

浏览器对<script>标签DOM操作时,会页面渲染,不会再JS解析

4.触发

如果我们可控的数据在标签的属性当中

<1>资源属性

使用 javascript伪协议

基本上可以请求资源的HTML标签内都可以使用src\href等

但是有的标签已经不能触发XSS,有的则可以

<html>
<script>
    var lang = document.location.href.substring(document.location.href.indexOf("id="));
    lang=lang.substr(3,);
    document.write('<a href="'+lang+'">test</a>');
    document.write('<iframe src="'+lang+'">');
    document.write('<img src="'+lang+'">');//不能触发
</script>
</html>

JS伪协议不区分大小写,并且会自动实体解码和进制解码

javascript:alert(1)
JavascRipt:alert(1)

等等都可以触发

<2>事件属性

<html>
<script>
    var lang = document.location.href.substring(document.location.href.indexOf("id="));
    lang=lang.substr(3,);
    document.write('<a href=1 onclick="'+lang+'">test</a>');
    document.write('</br>');
    document.write('<a href=1 onmouseover="'+lang+'">test1</a>');
</script>
</html>

事件不区分大小写,引号可以不使用也可是是单引号或双引号

<html>
<script>
    var lang = document.location.href.substring(document.location.href.indexOf("id="));
    lang=lang.substr(3,);
    document.write('<a href=1 onmouseover="'+lang+'">test</a>');
    document.write('</br>');
    document.write("<a href=1 onmouseover='"+lang+"'>test1</a>");
    document.write('</br>');
    document.write('<a href=1 onmouseover='+lang+'>test</a>')

</script>
</html>

上面的三种都是一样的

<3>普通属性

想办法构造新的属性或者闭合标签

5.HTMLENCODE

有些标签具备HTMLENCODE功能

<html>
<textarea><img src=1 onerror=alert(1)></textarea>
<title><img src=1 onerror=alert(1)></title>
<iframe><img src=1 onerror=alert(1)></iframe>
<noscript><img src=1 onerror=alert(1)></noscript>
<noframes><img src=1 onerror=alert(1)></noframes>

</html>

剩下的,比如div标签

<html>
<div><img src=1 onerror=alert(1)></div>

</html>

6.进制转换

<1>HTML

HTML支持十进制和十六进制

图片可以正常显示

<2>CSS

CSS支持十进制和十六进制

<3>JS

JS支持八进制和十六进制

<html>
<script>alert(1)</script>
<script>eval("\141\154\145\162\164\50\62\51")</script>
<script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0033\u0029")</script>
</html>

进制方式对大小写不敏感,后缀’;’也不是必须的,所以可以用常规字符、十进制编码和十六进制编码混合

如果给汉字编码,则只能使用十六进制的unicode

7.源码审计

<1>反射型和存储型

查找在页面输出的变量,检验是否收到用户控制,跟踪传递过程,分析是否被过滤。

主要关注 $_SERVER,$_GET,$_POST,$_REQUEST查找输出的变量,检验是否可控,查看是否被过滤print,print_r,echo,printf,sprintf,die,var_dump,var_export

主要出现在搜索框、文章发表、评论回复、留言、友情链接、资料设置等处

<2>DOM型

1. 查看用户的某些输入源

document.referer

window.name

location

2. 输出

innerHTML

document.write

8.防御

<1>反射型和存储型

对用户的输入进行过滤

黑白名单输入进行编码

htmlspecialchars()

<2>DOM型

避免客户端对文档进行重写、重定向或其他敏感操作

避免使用客户端数据,这些操作尽量放在服务端使用动态页面来实现

 

XSS跨站脚本的更多相关文章

  1. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  2. xss跨站脚本测试

    测试的时候会涉及到xss测试,下面简要整理下xss的知识 xss跨站脚本特点就是能注入恶意的HTML/JS代码到用户浏览器,劫持用户会话 常用alert来验证网站存在漏洞 如果确认存在漏洞,会随着注入 ...

  3. XSS 跨站脚本攻击之ShellCode的调用

    1.ShellCode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞是所执行的代码,在XSS跨站脚本中,是指由javascript等脚本编写的XSS利用代码: 2.Exploit,在黑客眼里 ...

  4. XSS 跨站脚本攻击之构造剖析(一)

    1.XSS-Filter:跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击 (1)XSS Filter实际上是一段精心编写的过滤函数作用是过滤XSS跨站脚本代码: (2)绕过XSS F ...

  5. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析

    2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...

  6. xss(跨站脚本攻击),crsf(跨站请求伪造),xssf

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  7. PHP漏洞全解(四)-xss跨站脚本攻击

    本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...

  8. JAVA覆写Request过滤XSS跨站脚本攻击

    注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...

  9. 【代码审计】YUNUCMS_v1.0.6 前台反射型XSS跨站脚本漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

  10. 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

随机推荐

  1. mongodb的学习-4-使用 MongoDB shell 来连接 Mongodb 服务

    执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息. 使用 MongoDB shell 来连接 Mongodb 服务 标准 ...

  2. 基于AppDomain的"插件式"开发

    很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...

  3. Python学习笔记系列——读写文件以及敏感词过滤器的实现

    一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...

  4. 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列

    第11章     GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  5. android创建目录和文件和安装其它apk

    一.android下创建目录 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/no ...

  6. 自适应和响应式布局的区别,em与rem

    自适应布局:不同终端上显示的文字,图片,等位置排版都是一样的,只是大小不同. 响应式布局:通过媒体查询监听屏幕大小的变化,做出响应式的改变,在不同设备可能展现不同的样式效果. em:是相对其父元素的. ...

  7. CH1102 火车进出栈问题(高精/卡特兰数)

    描述 一列火车n节车厢,依次编号为1,2,3,-,n.每节车厢有两种运动方式,进栈与出栈,问n节车厢出栈的可能排列方式有多少种. 输入格式 一个数,n(n<=60000) 输出格式 一个数s表示 ...

  8. R语言学习笔记—K近邻算法

    K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.即每个样本都可以用它最接近的k个邻居来代表.KNN算法适 ...

  9. Visual Studio 2015 正式版镜像下载(含专业版/企业版KEY)

    Visual Studio Community 2015简体中文版(社区版,针对个人免费): 在线安装exe:http://download.microsoft.com/download/B/4/8/ ...

  10. 20145209刘一阳《JAVA程序设计》第四周课堂测试

    第四周课堂测试 1.下列说法正确的是(ACD) A .使用extends关键字定义一个类的子类. B .Java与C++类似,支持多继承,即子类可以有一个或多个父类. C .Object是所有类的祖先 ...