20174323张加欣-Exp9 Web安全基础

1.WebGoat安装

  • 下载WebGoat:网址https://github.com/WebGoat/WebGoat/releases/tag/7.0.1
  • 在有该文件的条件下,输入命令java -jar webgoat-container-7.0.1-war-exec.jar,开启WebGoat。
  • 运行一段时间之后命令行出现Starting ProtocolHandler,证明开启成功。

  • 打开浏览器访问:localhost:8080/WebGoat

  • 可以发现右侧未出现项目栏,这是需要重新下载jdk。

  • 下载jdk:网址https://pan.baidu.com/s/18QGn2Tc2kDNJVflqwfgghA
  • 建立目录,将下载的jdk复制过去并解压。
sudo mkdir -p /usr/local/java
sudo cp jdk-8u161-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xzvf jdk-8u91-linux-x64.tar.gz

 

  • 配置环境变量,输入指令:sudo vim /etc/profile
  • 并将以下代码复制到文件结尾:
JAVA_HOME=/usr/local/java/jdk1.8.0_161
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH 
  • 通知系统java的位置。
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_161/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_161/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1

 

  • 设置默认JDK。
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_161/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_161/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_161/bin/javaws

 

  • 重新载入profile:source /etc/profile
  • 通过java -version 以及javac -version即可看到是否安装完成,安装完成后,重启电脑即可。
  • 重新打开浏览器,使用管理员账号登录。

 

2.SQL注入攻击

2.1  数字型SQL注入(Numeric SQL Injection)

  • 左侧课程栏选中Injection Flaws ->Numeric SQL Injection ,点击Go!按钮,可查询Columbia的天气情况。
  • 在网页中间的下拉框处右键选择Inspect Element

  • 之后可以在右侧对网页源代码进行修改,找到名字为stationselect元素,在第一项101后面添加" or 1=1 ",修改后点击Go!

  • 查询到了所有城市的天气情况。

2.2  日志欺骗(Log Spoofing)

  • 左侧课程栏选中Injection Flaws -> Log Spoofing
  • 在User Name文本框中填写zjx%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%oa是换行符,可以让注入信息转行显示。

  • 点击登录后,可以看到我们注入的语句在第二行显示出来了。

 

2.3  字符串型注入(String SQL Injection)

  • 左侧课程栏选中Injection Flaws -> String SQL Injection,输入Smith可查询Smith的信用卡信息。

  • 现在要设法使得可以查询源码中所有用户的信用卡信息。
  • 在User Name文本框中填写Smith' or 1=1--
  • 可以看到绿色小勾,攻击成功。

2.4  数据库后门(Database Backdoors)

  • 左侧课程栏选中Injection Flaws -> Database Backdoors,文本框中输入101可查询该用户的相关信息。

  • 接下来我们尝试用数据库后面对其进行攻击。
  • 比如输入语句101; update employee set salary=8888888成功将该用户的工资变成8888888,攻击成功。

  • 还可以输入101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20174323@zjx.com' WHERE userid = NEW.userid,这个设置可以使表中添加新用户时其邮箱为我设置的假邮箱。

 

3.XSS攻击

3.1  跨站脚本钓鱼攻击(Phishing with XSS)

  • 利用XSS可以在已存在的页面中进一步添加元素,编写一个含有文本框、提交按钮的表单的代码:
  • 左侧课程栏选中Cross-Site Scripting (XSS) -> Phishing with XSS,在文本框中搜索下列代码,可以看到页面中增加了一个登录的表单。

  • 编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat。
  • 将上面两段代码合并搜索,进行登录操作,提交之后可以看到返回了输入的用户名和密码。

3.2  存储型XSS攻击(Stored XSS Attacks)

  • TItle文本框输入任意信息 ,在Message文本框中输入<script>alert('You've been attacked!')</script>,点击提交后,点击创建的帖子,会弹出一个对话框,说明攻击成功。

3.3  反射型XSS攻击(Reflected XSS Attacks)

  • 序列号文本框中输入<script>alert('You've been attacked!'),点击购买按钮,会弹出一个对话框,说明攻击成功。

 

4.CSRF攻击

4.1  Cross Site Request Forgery

  • 点击XSS -> Cross Site Request Forgery(CSRF)
  • 现在需要在文本框中输入一段包含图片的Html代码,链接到一个网站。
  • 输入<img src="http://localhost:8080/WebGoat/attack?Screen= 2078372&menu=900&transferFunds=5000" width="1" height="1" />
  • 点击出现的链接,可以发现攻击成功。

 

4.2  CSRF Prompt By-Pass

  • 点击XSS -> CSRF Prompt By-Pass
  • 方法同上,文本框中输入代码:
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>

 

  • 点击出现的链接,可以发现攻击成功。

 

5.问题回答

5.1  SQL注入攻击原理,如何防御?

  • SQL注入:是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
  • 防御:
  1. 不要使用动态SQL:避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。
  2. 不要将敏感数据保留在纯文本中:加密存储在数据库中的私有/机密数据。
  3. 限制数据库权限和特权:将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。

5.2  XSS攻击的原理,如何防御?

  • XSS攻击:是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
  • 防御:
  1. 在服务器端设置cookie的时候设置 http-only(只允许http或https请求读取cookie), 这样就可以防止用户通过JS获取cookie。
  2. XSS防御HTML编码,将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码。

5.3  CSRF攻击原理,如何防御?

  • CSRF攻击:是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,攻击者盗用了你的身份,以你的名义发送恶意请求。造成的问题包括:个人隐私泄露以及财产安全。
  • 防御:
  1. 服务端进行CSRF防御:服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
  2. 每次的用户提交都需要用户在表单中填写一个图片上的随机字符串。
  3. 不同的表单包含一个不同的伪随机值。

 

6.实验中遇到的问题

  • 问题1:第一次启动WebGoat时,遇到了网页左侧没有课程的情况。
  • 参考了同学的博客,知道是编译后的java程序与Linux上的java Se版本不一致导致这种情况的发生,于是重新下载jdk,进行配置(具体方法上面有写),解决了问题。
  • 问题2:在做CSRF攻击中的Cross Site Request Forgery时,在文本框中输入代码,点击提交后,显示的是blackmailed。
  • 其实只要阻止这个blackmailed就可以,页面会自动弹出来一个选项,勾上选项就可以解决,这里忘记截图了。

 

7.实验感想

  • 这是最后一次实验了,没想到今年是在家完成9个实验,这与之前在学校的感受完全不同。以前做实验的时候,遇到问题可以直接抱着电脑找同学询问,但是在家,只能通过网络问一下同学,更多的还是要自己多去查看学长学姐及同学的博客,去网上搜寻解决办法,其实这更加的锻炼了我独立思考,解决问题的能力。
  • 之前做实验的时候,总盼望着实验早点结束,但现在真的是最后一个实验,竟然还有一点不舍。这门课,不单单是老师讲同学听的授课方式,而是通过多次的实验,让我们亲身体会各种网络攻防的知识,但是这门课让我收获最多的还是上面说的更加的锻炼了我独立思考,解决问题的能力。
  • 最后,还是要感谢老师这学期的教导,感谢帮助过的同学们~
posted @ 2020-05-26 16:47  张加欣  阅读(130)  评论(0编辑  收藏