Exp9 Web安全基础
20154305 齐帅
1、实验要求
本实践的目标理解经常使用网络攻击技术的基本原理。
Webgoat实践下相关实验:
【目录】
【第一部分 WebGoat 8.0】
1.WebGot
2.BurpSuite
3.Injection Flaws
4.Cross-Site Scripting
【第二部分 WebGoat 7.1】
1.Injection Flaws
1.1 Numeric Injection
1.2 LAB:SQL Injection
1.3 String SQL Injection
1.4 Log Spoofing
1.5 Database Backdoors
1.6 Blind Numeric SQL Injection
2.Cross-Site Scripting (XSS)
2.1 Phishing with XSS
2.2 Stored XSS Attacks
2.3 Reflected XSS Attacks
3.Cross Site Request Forgery(CSRF)
4.CSRF Prompt By-Pass
2、实践过程
【第一部分】
1.安装WebGoat 8.0
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,是全英文的,我真的头大了~还须要依靠翻译软件理解不是人话的东西。。。javascript
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呀,哈哈哈。

能够看到真的不要钱了,完成。很神奇~

【第二部分】
由于第一部分WebGoat8.0版本题型进行了更新,再加上个人三脚猫英语真的作不来了,我认输,so,我下载了一个WebGoat 7.1版本,进行试验php
1. Injection Flaws
1.1 Numeric Injection
要求可以显示全部地方的天气,与8.0版本不一样,这个是下拉框的,因此不能直接在网页注入,须要修改网页代码。
搜索 Columbia,找到value,修改value=“101 or 1=1”
,注入一个永真式,成功!java

1.2 LAB:SQL Injection
Stage 1:String SQL Injection
此题经过注入实现免密码登陆,根据老师课上的演示,直接修改长度限制,而后进行注入

密码栏输入' or 1=1 --
mysql

成功!git
Stage 3:Numeric SQL Injection
用员工帐号登录,进入员工页面后再经过SQL注入来查看老板的帐户信息。

用上一步的方法进入员工帐号:github

修改网页源代码,把其中的value值改成101 or 1=1 order by salary desc --
,此方法很巧妙,按照工资高低排序web
点击viewprofile按键
sql
成功!数据库
1.3 String SQL Injection
SQL注入查看全部人的信息,简单的万能注入:浏览器

成功!
1.4 Log Spoofing
此题目的是经过注入恶意字符串,按照规则伪造出一条日志:
在username输入:zh%0d%0aLogin Succeeded for username: admin


成功!
1.5 Database Backdoors
此题的要求是修改后台数据库数据给本身涨工资,而后在数据库中给本身造一个后门,把全部用户的邮箱换成本身的。
在输入userid的地方输入 101; update employee set salary=20154305

成功!
建后门:在输入框注入以下语句101;creat TRIGGER lxmBackDoor BEFORE insert on employee FOR EACH ROW BEGIN update employee SET email='20154305@besti.edu.cn' WHERE userid = NEW.userid

成功!
1.6 Blind Numeric SQL Injection
盲注,就是结果只有真和假,须要本身构合适的注入语句去暴力猜想:
输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 4000 );

根据返回结果可知,pin值小于4000.
修改值,根据返回结果逐步求精:

pin值大于2000.
继续。。。


其实 BurpSuite 提供了暴力破解工具,可是我这个好像有点问题,抓不到包

最后结果是2364,固然不是一个一个试的啦~~

成功!
2. Cross-Site Scripting (XSS)
2.1 Phishing with XSS

输入用户名和密码:

成功!
2.2 Stored XSS Attacks
此题用户A能够任意输入,而后用户B点击用户A的留言,触发XSS
title能够任意输入,Message输入消息,能够嵌入一段js代码,用户点击后便可触发,例如输入:<script>alert("Welcome Qsss");</script>

成功!
2.3 Reflected XSS Attacks
此题是一个反射型XSS攻击
在enter your three digit access code:处输入 <script>alert("Qsss attack succeed!");</script>


成功!
3. Cross Site Request Forgery(CSRF)
此题是要写一个URL诱使其余用户点击,从而触发CSRF攻击,咱们能够以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件
在Message里输入恶意代码:<iframe src="attack?Screen=282&menu=900&transferFunds=6666"></iframe>

点击提交,会出现这个消息,点击这个消息
成功!
4. CSRF Prompt By-Pass (不懂-_-)
此题包括了两个请求,一是转帐请求,二是确认转帐成功请求,即须要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)
此题参照了学姐的步骤,可是没有出现进入转帐的请求界面,参考答案给了一段代码,可是出来的是这个结果,有点蒙蒙的~~

至此,实验结束~~
3、漏洞原理及预防
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是否一致。
4、实验总结与感想
本次实验也是最后一个实验,我以为是这些实验里面最难的最难的最难的,首先由于页(我)面(的)是(英)英(语)文(太)的(烂),增长了实验的难度,彻底靠翻译软件在生活,其次个人这个WebGoat版本比较新,没有了参考系,只能本身在那里刻苦钻研。最终我仍是臣服了,换了一个WebGoat版本,从新再来吧。
作了这么多的网络攻防实验,真的收获不少,都是能看到实际效果的危险、漏洞、后门、病毒,网络安全真的须要咱们重视起来,同时也加强了个人安全防范意识,自从作了那个后门的实验之后我就把我电脑摄像头粘起来了,同时这门课也激发了我对网络安全这方面的兴趣,往后的学习工做生活中也会更加关注这方面的信息和事件。
授之以鱼不如授之以渔~