Exp9 Web安全基础
20154305 齐帅
一、实验要求
本实践的目标理解常用网络攻击技术的基本原理。
Webgoat实践下相关实验:
FQ
WebGot
BurpSuite
Injection Flaws
Cross-Site Scripting
二、实践过程
1.安装WebGoat
WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境,为用户完成课程提供了有关的线索。
因为WebGoat是基于java开发的软件,所以需要JDK环境,还需要下载一个WebGoat.jar包.
至于下载这个WebGoat.jar包真的费了好久时间,因为网上找到的下载链接都被墙了,这个链接你可以试一下,最后费了九牛二虎之力翻了一下墙,下载好的jar包和JDK我放在了百度云。
看一眼哈,我真的FQ了,现在可是严打的情况,我免费FQ也不容易啊~
FQ软件叫蓝灯,还挺靠谱的,哈哈哈~
jar包下载好了以后放到kali里面,键入java -jar *.jar
等着就可啦,*为文件名。
打开火狐,键入127.0.0.1:8080/WebGoat
(注意大小写),注册一个用户就可以啦~
sad,是全英文的,我真的头大了~还需要依靠翻译软件理解不是人话的东西。。。
2.Injection Flaws
这个题就是你输入姓名会得到相关信息
如上,用万能公式弄一下就得到了所有人的信息啦~注意这个是字符串注入。
下一题是输入用户ID得到信息,同样输入一个永真式,数字注入,得到所有人的信息。
SQL注入进阶:
本题要求通过Smith的信息联合得到Dave的密码,根据提示信息可以得到存储用户密码的表名为 user_system_data,列为password。
先键入Smith‘ order by 7--
,如下,可以得到正确的反馈信息
键入Smith‘ order by 8--
,得到错误反馈,说明列数为7。
根据以上信息,键入Smith‘ union select null,null,null,null,null,null,null from user_system_data --
联合查询判断数据回显位置。
键入Smith‘ union select null,user_name,password,null,null,null,null from user_system_data --
获取Dave的密码。
输入Dave
的密码,正确~
3.BurpSuite
BurpSuite是用于攻击web应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架。
通过代理服务器可以截获http报文进行修改。
kali自己带这个东西,程序里面搜索一下就行了,开启。
配置本机BurpSuite,在Proxy->Option中选择add添加项:
设置浏览器,进行代理:
4.Cross-Site Scripting
这个题就是要你打开两个相同的网页,然后插入一段JS代码,显示cookie,比较两个值是否相同:
经过比较,两个值是相同的,所以输入yes,通过~!
此题第一步是要求你在一个购物车支付界面面找到优惠券的代码,给你自己打折
如上,我们查看网页源代码,找到判断优惠券的函数。
找到优惠券具体函数:
查看优惠券的值:PLATINUM
在支付界面输入优惠券代码,完成第一步:
第二步,要求全单免费,直接把值改成0呀,哈哈哈。
可以看到真的不要钱了,完成。很神奇~
三、漏洞原理及预防
1.SQL注入
- 原理
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
- 防御
(1)检查变量数据类型和格式
如果你的SQL语句是类似where id={$id}这种形式,数据库里所有的id都是数字,那么就应该在SQL被执行前,检查确保变量id是int类型;如果是接受邮箱,那就应该检查并严格确保变量一定是邮箱的格式,其他的类型比如日期、时间等也是一个道理。总结起来:只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式,这样很大程度上可以避免SQL注入攻击。
(2)过滤特殊符号
对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。以PHP为例,通常是采用addslashes函数,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号 (‘) 双引号 (") 反斜杠 () NULL。
(3)绑定变量,使用预编译语句
MySQL的mysqli驱动提供了预编译语句的支持,不同的程序语言,都分别有使用预编译语句的方法。这样做的好处就是,如果我输入密码:‘or 1=‘1,那他也只会被当作密码来处理,不会和sql语句其他结构关联
2.XSS攻击
- 原理
恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。
- 防御
一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤
在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等
在输出方面,在用户输内容中使用 <XMP>
标签,标签内的内容不会解释,直接显示。
严格执行字符输入字数控制,因为XSS代码往往很多,所以要对字符数进行控制
3.CSRF
- 原理
跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账
造成的问题包括:个人隐私泄露以及财产安全。
- 防御
(1)验证码
可以在某些敏感操作过程中,加入验证码,以确认用户身份
(2)Token
CSRF能攻击成功,根本原因是:操作所带的参数均被攻击者猜测到。既然知道根本原因,我们就对症下药,利用Token。当向服务器传参数时,带上Token。这个Token是一个随机值,并且由服务器和用户同时持有。当用户提交表单时带上Token值,服务器就能验证表单和session中的Token是否一致。
四、实验总结与感想
本次实验也是最后一个实验,我觉得是这些实验里面最难的最难的最难的,首先因为页(我)面(的)是(英)英(语)文(太)的(烂),增加了实验的难度,完全靠翻译软件在生活,其次我的这个WebGoat版本比较新,和学长学姐的不一样,没有了参考系,只能自己在那里刻苦钻研,最后那个CSRF真的整不出来了。不过我觉得我成功的FQ下载了jar包还是能加个分吧,我交这么早就是为了给后面的同学提供方便的实验环境~~能力有限请见谅。
做了这么多的网络攻防实验,真的收获很多,都是能看到实际效果的危险、漏洞、后门、病毒,网络安全真的需要我们重视起来,同时也增强了我的安全防范意识,自从做了那个后门的实验以后我就把我电脑摄像头粘起来了,同时这门课也激发了我对网络安全这方面的兴趣,日后的学习工作生活中也会更加关注这方面的信息和事件。这门课的老师也与众不同呀,比较人性化,哈哈哈,emmm......还很有趣~~~
生命不息,奋斗不止。
Exp9 Web安全基础
原文:https://www.cnblogs.com/qsss/p/9038916.html