DVWA靶场实战:从LOW到HIGH的XSS攻击手法全解与防御代码剖析
1. 初识DVWA与XSS攻击DVWADamn Vulnerable Web Application是一个专门为安全测试设计的靶场环境它模拟了常见的Web漏洞场景。我第一次接触DVWA时就被它精心设计的漏洞等级所吸引从LOW到HIGH每个级别都展示了不同的安全防护强度。XSS跨站脚本攻击作为Web安全领域的常青树在DVWA中有着非常典型的体现。记得刚开始学习XSS时我总把它想象成在别人网站上涂鸦的行为。比如在一个论坛的留言板里你输入的不是普通文字而是一段能自动执行的JavaScript代码。当其他用户查看这个页面时这些代码就会在他们的浏览器里运行就像在墙上涂鸦一样留下了你的作品。DVWA的XSS模块正好让我们可以安全地实践这种涂鸦技术。2. LOW级别的XSS攻击实战2.1 反射型XSS基础注入在DVWA的安全级别设置为LOW时我们遇到的几乎是最原始的XSS漏洞。我打开反射型XSS页面在输入框里尝试输入一个最简单的payloadscriptalert(XSS)/script点击提交后果然弹出了经典的alert窗口。这种最基础的攻击之所以能成功是因为后端代码完全没有对输入做任何过滤。查看源代码可以看到?php header (X-XSS-Protection: 0); // 完全没有过滤逻辑 $name $_GET[name]; echo Hello $name; ?2.2 存储型XSS的持久性危害存储型XSS比反射型更危险因为恶意代码会被保存在服务器上。在DVWA的留言板功能中我输入同样的脚本代码后每次刷新页面都会触发弹窗。这意味着所有访问这个页面的用户都会中招。scriptalert(Stored XSS!)/script查看后端代码发现LOW级别的存储型XSS同样没有任何防护?php if( isset( $_POST[ btnSign ] ) ) { $message $_POST[ mtxMessage ]; $name $_POST[ txtName ]; // 直接存储未过滤的输入 $query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );; } ?3. MEDIUM级别的绕过技巧3.1 大小写绕过策略当我把DVWA安全级别调到MEDIUM后发现之前的payload失效了。查看源码发现增加了基础的过滤$name str_replace( script, , $_GET[name] );于是我尝试大小写混合的payloadScRiPtalert(XSS)/sCriPt成功绕过这是因为str_replace是大小写敏感的只过滤了小写的