XSS跨站脚本
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跨站脚本的更多相关文章
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- xss跨站脚本测试
测试的时候会涉及到xss测试,下面简要整理下xss的知识 xss跨站脚本特点就是能注入恶意的HTML/JS代码到用户浏览器,劫持用户会话 常用alert来验证网站存在漏洞 如果确认存在漏洞,会随着注入 ...
- XSS 跨站脚本攻击之ShellCode的调用
1.ShellCode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞是所执行的代码,在XSS跨站脚本中,是指由javascript等脚本编写的XSS利用代码: 2.Exploit,在黑客眼里 ...
- XSS 跨站脚本攻击之构造剖析(一)
1.XSS-Filter:跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击 (1)XSS Filter实际上是一段精心编写的过滤函数作用是过滤XSS跨站脚本代码: (2)绕过XSS F ...
- XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析
2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...
- xss(跨站脚本攻击),crsf(跨站请求伪造),xssf
我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...
- PHP漏洞全解(四)-xss跨站脚本攻击
本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...
- JAVA覆写Request过滤XSS跨站脚本攻击
注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...
- 【代码审计】YUNUCMS_v1.0.6 前台反射型XSS跨站脚本漏洞分析
0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...
- 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
随机推荐
- 8 个不常见但很有用的 Git 命令
1. 拉取远程代码并且覆盖本地更改 2. 列出远程和本地所有分支 3. 强制更新远程分支 4. 回滚一个 merge 5. 修改之前的提交记录或者很久前提交的记录 6. 使用多个远程代码库,并且使用多 ...
- Linux无法识别Broadcom 802.11abgn无线网卡
折腾了好久,都无法解决 索性后来直接使用的usb外置网卡,勉强能用(使用极其不便) 最后使尽浑身解数,冲着萤火般的希望,好在没有放弃 正解就是下面这 完成重启即可 sudo cp /sys/fir ...
- L2-014. 列车调度
L2-014. 列车调度 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 火车站的列车调度铁轨的结构如下图所示. Figure ...
- C++类型转换符重载
对于用户自定义的类类型,实现它们和其他数据类型之间的转换有两种方法:(1)通过转换构造函数进行类型转换:(2)通过类型转换函数进行类型转换:转换构造函数: 类名(待转换类型) { 函数体; } ...
- 【NodeJs】Nodejs系列安装
nodejs安装—npm安装—(其他基于这俩项的另写) windows环境 1)nodejs安装 ①下载对应系统版本的Node.js:https://nodejs.org/en/download/ e ...
- 图片在线处理 webp!
之前处理图片的方式是,小图标通过gulp配置的spritesmith雪碧图方式,.png会先用ps工具转成.jpg,然后jpg太大则用在线压缩工具来进行压缩(另外gulp系列的gulp-imagemi ...
- STM32单片机复位后GPIO电平状态
stm32单片机gpio共有八种工作模式,如下图: stm32单片机是一个低功耗的处理器,当复位以后,gpio默认是高阻状态,也就是浮空输入.这样的好处是: 1.降低了单片机的功耗 2.把gpio模式 ...
- CBrother异或加密与C++异或加密函数
CBrother脚本异或加密与C++异或加密函数 异或对于数据加密来说是最简单的方式,在一般的安全性要求不是非常高的地方,异或加密是最好的选择. C++异或加密代码 int g_PWD = 0xffe ...
- #400 – 使用ItemsPanel 属性将WrapPanel 作为ListBox的显示面板(Using a WrapPanel as the Items Panel for a ListBox)
原文:#400 – 使用ItemsPanel 属性将WrapPanel 作为ListBox的显示面板(Using a WrapPanel as the Items Panel for a ListBo ...
- JavaWeb总结(九)
过滤器 - 一个中间组件,用于拦截源数据和目的数据之间的消息 - 过滤二者之间传递的数据 Web应用上的过滤器 -驻留在Web服务器上的Web组件 -过滤从客户端传递到服务器端的请求和响应 单个过滤器 ...