20155208徐子涵《网络对抗》Exp9 Web安全基础
实验要求
本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。
实验过程
最后一次了,没有选择尝试免考项目的我最后一次进行这个紧张刺激的活动了。
WebGoat
Webgoat是OWASP组织研究出的一个专门进行web漏洞实验的应用品台,这个平台里包含了web中常见的各种漏洞,例如:跨站脚本攻击、sql注入、访问控制、隐藏字段、Cookie等;
-
首先我们在kali里面下载Webgoat,这是一个jar包,因为在虚拟机面下载速度太慢了,所以我在主机中下载之后复制到了虚拟机中,之后在工作目录提取文件,使用指令
java -jar webgoat-server-8.0.0.M14.jar
打开webgoat:
-
然后在网页中输入http://localhost:8080/WebGoat进入登录界面:
-
7.0.1版本会有默认的用户名和密码,直接登录开始练习
Phishing with XSS
这一练习是说:如果网页上存在已知的XSS攻击,本课程将举例说明网站如何支持网络钓鱼攻击
这里我们简单的使用一个登陆的代码,我们作为受害者输入用户名和密码时,会显示我们刚刚输入的信息,效果如下:
攻击成功!
Stored XSS Attacks
储存性XSS攻击:
清理所有输入,尤其是稍后将用作OS命令,脚本和数据库查询的参数的输入总是一个好习惯。 对于永久存储在应用程序某处的内容而言,这一点尤其重要。 用户不应该能够创建可能导致其他用户在检索到用户消息时加载不需要的页面或不需要的内容的消息内容。
XSS攻击代码存储于数据库中,每次当用户打开此网页时便会执行,危害大,常用语留言板,每次当用户查看留言信息时即触发。导致用户访问时载入非预期的页面或内容:
操作步骤为:
在Litle里随便输入某些内容
然后在message中输入一串代码,比如:
<script>alert("attacked by xzh ");</script>
然后点开刚创建的贴子:
成功攻击!
Reflected XSS Attacks
反射型XSS
不过这个是非持久化的,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
操作如下:
输入带有攻击性的URL作为输入源:
<script>alert(" attacked by xzh");</script>
攻击成功!
如果我们输入错误的用户信息,会返回错误内容。
Cross Site Request Forgery (CSRF)
这里练习的目标是发送电子邮件到新闻组。电子邮件包含一个图像,其URL指向恶意请求。在本课中,URL应该指向“攻击”Servlet,该课程的“屏幕”和“菜单”参数和一个额外的参数“TrimeFund”具有任意数值,如5000。您可以通过在右边插入的参数中找到“屏幕”和“菜单”值来构建链接。当时被认证的CSRF邮件的收件人将转移他们的资金。当这一课的攻击成功时,左边的菜单旁边出现一个绿色的复选标记。
在message框中输入这样一串代码
<img src='attack?Screen=277&menu=900&transferFunds=5000' width='1' height='1'>
提交后,会在消息列表中看到一个新的消息,点击该消息,就会看到你所想要让对方看到的新闻:
攻击成功!
CSRF Prompt By-Pass
目标是向包含多个恶意请求的新闻组发送电子邮件:第一个传输资金,第二个请求确认第一个请求触发的提示。 这些URL应通过此CSRF-prompt-by-pass课程的屏幕,菜单参数以及具有诸如“5000”之类的数值的额外参数“transferFunds”来指向攻击servlet以启动传输并且字符串值“CONFIRM” 完成它。 您可以从右侧的插图复制课程参数以创建格式为“攻击?屏幕= XXX&menu = YYY&transferFunds = ZZZ”的网址。 无论谁收到这封电子邮件并恰好在那个时候进行认证,他的资金都将被转移。 当您认为攻击成功时,刷新页面,您会在左侧菜单中找到绿色检查。
具体操作是:
先查看参数:
在message中添加代码:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
攻击成功如下:
Injection Flaws练习
SQL注入攻击对任何数据库驱动的站点都构成严重威胁。攻击背后的方法很容易学习,造成的损害可以从相当大到完全的系统妥协。尽管存在这些风险,但互联网上令人难以置信的系统数量易受这种攻击形式的影响。
对所有输入数据进行清理,尤其是在OS命令、脚本和数据库查询中使用的数据,以某种其他方式阻止SQL注入的威胁,也是很好的做法。
下面我们来进行这一方面的练习:
Command Injection
在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,在BackDoors.help旁边加上
"& netstat -an & ipconfig"
然后会发现框里的选项被修改了,这时点击view:
可以看到命令被执行,出现系统网络连接情况
Numeric SQL Injection
这个练习的要求是:下面的表单允许用户查看天气数据。尝试注入导致所有天气数据显示的SQL字符串。
现在,您已经成功执行SQL注入,尝试对参数化查询进行相同类型的攻击。
依旧利用firebug,在任意一个值比如101旁边加上or 1=1(这个方法我们在实验八的时候用过,因为这是一个永真值):
OK成功!
Log Spoofing
这一练习是通过向日志文件添加脚本来提升攻击。
下面的灰色区域表示将在Web服务器的日志文件中记录的内容。
目标是使其像“admin”用户名登录成功。
具体操作是:
在User Name文本框中输入:
xzh%0d%0aLogin Succeeded for username: admin
其中%0d是回车,%0a是换行符:
点击登录:
攻击成功!
String SQL Injection
在密码栏中输入
' or 1=1 --
进行SQL注入,但是登录失败:
结果发现是网页设置的长度不够,我们要对长度限制进行修改:
OK,修改完之后再登录,成功:
SQL Injection(Stage 3:Numeric SQL Injection)
使用inspect分析一下这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为:
101 or 1=1 order by salary desc --
这里desc是指工资按降序排序,这样老板的信息就会被排到第一个。
我们就可以看到老板的工资信息:
Database Backdoors
先看用户的信息:
然后输入注入语句:
101; update employee set salary=90000
可以修改工资为90000
实验后回答问题
(1)SQL注入攻击原理,如何防御
原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
防御:对于SQL注入攻击的防范,我觉得主要还是应该从代码上入手:
采用预编译语句集PreparedStatement,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。它的原理就是sql注入只对sql语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对sql语句进行解析准备,因此也就避免了sql注入问题;
使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;
采用字符串过滤的方法;
jsp中调用该函数检查是否包含非法字符,防止SQL从URL注入。
(2)XSS攻击的原理,如何防御
原理:
XSS是代码注入的一种,它允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。
防御:
一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤;
检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。
(3)CSRF攻击原理,如何防御
原理:在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF是借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
防御:
通过referer、token或者验证码来检测用户提交;
尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;
避免全站通用的cookie,严格设置cookie的域
实验心得
这是本学期的最后一次实验了,这次是在平台上进行多个练习,从各个方面加强对网络攻防的理解与实践,希望之后还可以多做一下这类的实践,可以进一步提高自己的水平。