2019-2020-2 20174317祝源《网络对抗技术》Exp9 Web安全基础

1. 实验目的

理解常用网络攻击技术的基本原理,做不少于7个题目。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。

2. 实验内容

由于主机的Windows操作系统已经安装了java,所以这次没有使用kali,而是使用的Windows 10。使用的WebGoat版本为8.0.0

2.1. WEBGOAT安装

1.在这里下载最新版的WebGoat。(迅雷下载比较快。我没有打广告!)

2.请确认已经配置好了java环境。最新版的WebGoat要求Java 11及以上的版本。Java环境配置相关问题请百度/360/Bing/好搜等。

3.使用java -jar webgoat-server-8.0.0.M26.jar --server.port=8080 --server.address=localhost启动WebGoat。请根据实际修改文件名、端口、ip地址。(这里出现了错误,解决方法请见 实验中遇到的问题

4.WebGoat启动后,在浏览器中输入http://localhost:8080/WebGoat使用WebGoat。

5.点击Register new user,新建一个用户,即可开始使用。

2.2. SQL注入攻击

2.2.1. 字符串型SQL注入

原理:当SQL注入输入的参数为字符串时称为字符串型注入。

目标:获取Users表中的所有信息。

方法:

1.点击左侧菜单中的"(A1) Injection",然后点击"SQL Injection (intro)",进入第9步。

2.将页面下方的下拉框分别设为'or'1'='1,这样拼接后的SQL语句为:SELECT * FROM user_data WHERE first_name = 'John' AND last_name = ' ' or '1' = '1',因为'1'='1'永远为真,所以where后的条件总是为true。

3.点击“Get Account Info”,可以获取到用户信息。

2.2.2. 数字型SQL注入

原理:在SQL语句中注入数字,组合成具有其他功能的字符串。

目标:提取出Users表中的所有信息。

方法:

1.点击左侧菜单中的"(A1) Injection",然后点击"SQL Injection (intro)",进入第10步。

2.在Login_Count中输入任意数字,在User_Id中输入任意数字 or true,这样拼接后的SQL语句为:SELECT * From user_data WHERE Login_Count = 数字 and userid= 数字 or true,where后的条件总是为true。

2.2.3. Pulling data from other tables

原理:综合利用字符型、数字型注入、SQL查询语句,构造SQL注入语句实施攻击。

目标:1. 获取user_system_data表中的所有信息 2. 找出Dave的密码

方法:

1.点击左侧菜单中的"(A1) Injection",然后点击"SQL Injection (advanced)",进入第3步。

2.此次是需要从一张表的中查询出另一张表中的数据,可以使用Union语句。在Name中输入' or true union select userid, user_name, password,'4','5', '6', 7 from user_system_data where '1' ='1,拼接后的语句为:SELECT * FROM user_data WHERE last_name = ' ' or true union select userid, user_name, password,'4','5', '6', 7 from user_system_data where '1' ='1'。可以查询出Dave的密码。

3.在Password中输入刚才得到的密码,点击Check Password即可通关。

2.3. XSS攻击

2.3.1. 基于反射的XSS攻击(Reflected XSS)

原理:依靠站点服务端返回脚本,使客户端执行从而发起Web攻击。

目的:使用XSS攻击找出表单中的哪个字段可以被攻击。

方法:

1.点击左侧菜单中的"(A7)Cross Site Scripting(XSS)",然后点击"Cross Site Scripting",进入第7步。

2.点击Purchase,页面下方显示了我们输入的卡号,推测这里可以使用XSS攻击。

3.在输入卡号的输入框中输入<script>alert("This is 20174317's attack! suprise!");</script>,点击Purchase即可看到攻击的效果。(可还是不算通过,不知道为什么)

2.3.2. 基于DOM的XSS攻击(DOM-Based XSS)

原理:

目的:使用"start.mvc#test/"这个测试路由,执行Webgoat自带的函数"webgoat.customjs.phoneHome()"。

方法:

1.点击左侧菜单中的"(A7)Cross Site Scripting(XSS)",然后点击"Cross Site Scripting",进入第11步。

2."start.mvc#test/"路由后面跟的内容会被作为进行参数解析,所以直接在"start.mvc#test/"后加上"webgoat.customjs.phoneHome()"即可,组合之后为如下内容:http://localhost:8080/WebGoat/start.mvc#test/<script>webgoat.customjs.phoneHome()

3.在新页面中打开以上网址,打开控制台,可以看到执行的结果,是一个随机数,将随机数输入到输入框中,点击Submit即可。

2.4. CSRF攻击

2.4.1. Post a review on someone else’s behalf

目的:通过csrf攻击使用已登录的账号发表评论。

方法:

1.点击左侧菜单中的"(A8:2013)Request Forgeries",然后点击"Cross-Site Resquest Forgeries",进入第4步。

2.点击页面上的"Submit review"按钮,并使用Fiddler进行抓包,可以看到在Response中有这样的内容:"It appears your request is coming from the same host you are submitting to."。

3.使用Fiddler自带的重放工具重放刚才捕获的数据包,并修改Hearder中的Refer字段。

4.这次Response中的内容变成了:"It appears you have submitted correctly from another site. Go reload and see if your post is there."

5.同时查看网页,可以发现我已经发出了一个评论。

2.4.2. CSRF and content-type

目的:使用json通过CSRF使用已登录的账号发送邮件。

方法:

1.点击左侧菜单中的"(A8:2013)Request Forgeries",然后点击"Cross-Site Resquest Forgeries",进入第7步。

2.按照提示,使用Fiddler构造数据包,方式为POST,目的API是/csrf/feedback/messag,使用HTTP/1.1,同时需要将Hearder中的Content-Type的值改为"text/plain"。Json数据如下:

{
  "name"    : "zy20174317",
  "email"   : "20174317@webgoat.org",
  "content" : "zy20174317 is attacking!"
}

3.发送构造的请求,能够在Response中看到Congratulations和flag。

3. 基础问题回答

1.SQL注入攻击原理,如何防御

原理:我感觉SQL注入是利用服务器端在处理SQL语句时存在的漏洞,通过利用这些漏洞拼接出带有攻击性的SQL查询语句,并让服务器端的数据库执行,进而达到攻击的目的。

防御手段:在服务器端对输入进行过滤,在客户端对输入进行限制,加密数据库内容等。

2.XSS攻击的原理,如何防御

原理:利用网页中存在的漏洞,将恶意代码注入到网页上,用户在加载网页时就会执行恶意代码。

防御手段:对用户提交的内容进行过滤,禁止用户输入特殊的字符串如javascript等。

3.CSRF攻击原理,如何防御

原理:利用网站验证时存在的漏洞,盗用用户的身份执行恶意操作。

防御手段:验证HTTP Referer字段,为每个请求添加token以保证唯一性等。

4. 实验感悟

这次实验很像那种在线练习的形式,形式很新颖,但也很有效果。经过这次实验我大概明白了SQL注入攻击、XSS攻击和CSRF攻击的原理,并能够做一些简单的攻击,感觉收获很大。因为使用的是Webgoat8.0的版本,和之前的版本有些差别,有些类型的攻击的练习题没有,有点遗憾。还有就是这次只是做了攻击的步骤,防御的练习题比较少,有点遗憾。

5. 实验中遇到的问题

在启动WEBGOAT时出错,提示:(Errno::ENOENT) file:/C:/Users/0x绁?/AppData/....。估计出现这个错误是因为我电脑登录的账户名称中有中文,然后换了一个账户登录,就可以了。

posted @ 2020-05-28 10:55  小小的嘤嘤怪  阅读(328)  评论(0编辑  收藏  举报
TOP