XSS学习

今天开始学习XSS,from看雪论坛
一、XSS原理
XSS:“Cross Site Scripting”、“跨站脚本攻击”
是一种注入攻击的方式,如果攻击者在网页中写入恶意的脚本代码(HTML、JavaScript),当web应用对用户过滤不严格时,一旦用户访问恶意代码页面,浏览器就会执行导致用户被攻击。
常见危害:cookie窃取,session劫持,钓鱼攻击,蠕虫,ddos等。

二、XSS分类
1、反射性xss(非持久型xss):
一般出现在URL参数及网站搜索栏中,需要点击包含恶意代码的URL才能触发,且仅能触发一次
2、存储形xss(持久型xss):
一般出现在网站留言板、评论区、个人资料处等用户可以对网站进行写入的地方。如果论坛评论区对用户输入过滤不严格,攻击者写一段恶意代码到评论区发表,代码就会写入数据库,当其他用户浏览界面时,网站从数据库中读取恶意代码并执行,就可以通过恶意代码窃取cookie等,无需密码就可以登陆账户。存储型xss危害比反射型大很多
3、dom型xss:
基于dom文档对象模型,前端脚本通过dom修改动态页面,dom不与服务端进行交互,而且代码是可见的,从前端获取dom中的数据在本地执行。常见的可以操纵dom的对象:URL、localtion、referrer等

三、代码实例分析
采用DVWA(Dam Vulnerable Web Application)是使用PHP+MySql编写用于常规WEB漏洞教学和检测的WEB脆弱性测试程序,包含了SQL注入、XSS、盲注等常见的一些安全漏洞。官网http://www.dvwa.co.uk
1、反射型xss
(1)low

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL )

未对name进行任何编码和过滤,导致可以直接执行


(2)medium
对name进行了编码,对输入的

②构造别的标签


③大小写绕过


(3)high
执行一个正则表达式的搜索和替换,这时候不论是大小写、双层

可以直接写入文本框
(2)medium
添加了:

$message = htmlspecialchars( $message );
$name = str_replace( '

②构造别的标签


③大小写绕过


(3)high
添加了:

$message = htmlspecialchars( $message );
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );

preg_replace执行一个正则表达式的搜索和替换,此时可以使用别的标签