xss
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
书上说JavaScript学的越好,xss的效果越好。
javascript
javascript:alert(/xss/)
PHP中的相应函数:
【详细看PHP手册】
这里可能不全,想了解更多的看手册。
strip_tags($str, [允许标签]) #从字符串中去除 HTML 和 PHP 标记
htmlentities($str) 函数 #转义html实体
html_entity_decode($str)函数 #反转义html实体
addcslashes($str, ‘字符’)函数 #给某些字符加上反斜杠
stripcslashes($str)函数 #去掉反斜杠
addslashes ($str )函数 #单引号、双引号、反斜线与 NULL加反斜杠
stripslashes($str)函数 #去掉反斜杠
htmlspecialchars() #特殊字符转换为HTML实体
htmlspecialchars_decode() #将特殊的 HTML 实体转换回普通字符
下有对策:
<textarea> </textarea> : 这个标签把xss代码 嵌入并直接展示了,闭合了它
<textarea> </textarea> 这里xss <textarea> </textarea> 这样闭合
利用HTML标签属性值执行xss
例如:
<table backgroup="javascript:alert(/xss/)" > </table>
<img src="javascript:alert(/xss/">
用空格或tab分割:
<img src="java script:alert(/xss/">
像这个,IE就会顺利打开
要是没有换位符,就以分号结尾
<img src="java
script:alert(/xss/">
以此绕过过滤
对标签属性转码
源代码-->ascii码
或者部分替换掉
产生自己的事件:
<input type="button" value="click me" onclick="alert('click me')"/>
点击click me后,会触发 onclick 事件,然后执行JavaScript代码。
既然事件能让JavaScript代码运行,用户就能利用它来执行跨站脚本。
<img src="##" onerror="alert(/xss/)" >
解释标记发生错误时,就会加载SRC。
css:
- JavaScript镶嵌到image:URL 里
- 用expression把css和JavaScript关联起来。
防止过滤:
大小写混写
用单引号而不是双引号
不用引号
以上都能绕过xss filter
在样式里使用 /* */ 以此方式混入字符干扰欺骗过滤器。
xss也支持十六进制,构造语句。
shellcode:
利用一个漏洞时所执行的代码,在xss里,就是JavaScript等脚本所编写的xss利用代码。
expliot:
完整编写好的漏洞利用工具。
poc:
一段证明漏洞存在的程序代码片段
存储型
攻击者在界面插入xss代码,服务器将数据导入数据库,当用户访问到存在xss漏洞的页面时,服务器从数据库取出数据放在页面,导致xss代码执行,达到攻击效果。
需要能插入的地方,而且还能再展示它。
反射型
在URL中插入xss代码,服务端将URL中的xss代码输出到页面上,攻击者将带有xss代码的URL发送给用户,用户打开后受到xss攻击。
比如说在搜索栏里,输入之后,查看一下源代码,闭合原标签,然后插入xss代码。
get参数试一试,搜索自己的关键字。
HTML实体化去应对xss,再通过闭合标签xss。
DOM型
攻击者在URL中插入xss代码,前端页面直接从URL中获取xss代码并且输出到页面,导致xss代码执行,攻击者将带有xss代码的URL发送给用户,用户到开后受到xss攻击。
和反射型很像,没有传入后端,仅在前端
还是搜索栏,放到URL里的。
对js代码要求很高。
比如说,我就在我的留言板里,留言: <script> alert(/xss/)</script> 就会弹个框
同样的还有: 在链接上:?name=<script> alert(/xss/)</script>
onmouseover 事件
HTML 中:
<element onmouseover="SomeJavaScriptCode">
JavaScript 中:
object.onmouseover=function(){SomeJavaScriptCode};
<input name="p1" size="50" value="2333" onmouseover="alert(document.domain);" type="text">
onmouseover 属性可使用于所有 HTML 元素,除了: <base>, <bdo>,
, <head>, <html>, <iframe>, <meta>, <param>, <script>, <style>, 和 <title>.