Exp9 Web安全基础

20154305 齐帅

一、实验要求

本实践的目标理解常用网络攻击技术的基本原理。

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

二、实践过程

【第一部分】

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,是全英文的,我真的头大了~还需要依靠翻译软件理解不是人话的东西。。。

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版本,进行试验

1. Injection Flaws

1.1 Numeric Injection

要求能够显示所有地方的天气,与8.0版本不同,这个是下拉框的,所以不能直接在网页注入,需要修改网页代码。

搜索 Columbia,找到value,修改value=“101 or 1=1”,注入一个永真式,成功!

1.2 LAB:SQL Injection

Stage 1:String SQL Injection

此题通过注入实现免密码登录,根据老师课上的演示,直接修改长度限制,然后进行注入

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

成功!

Stage 3:Numeric SQL Injection

用员工账号登陆,进入员工页面后再通过SQL注入来查看老板的账户信息。

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

修改网页源代码,把其中的value值改为101 or 1=1 order by salary desc --,此方法很巧妙,按照工资高低排序

点击viewprofile按键

成功!

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

此题要我们在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点。我们先创建一个form,让受害人在我们创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,并且将这些信息发送给http://localhost:8080/WebGoat/catcher?PROPERTY=yes

输入用户名和密码:

成功!

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&amp;menu=900&amp;transferFunds=6666"></iframe>

点击提交,会出现这个消息,点击这个消息

成功!

4. CSRF Prompt By-Pass (不懂-_-)

此题包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)

此题参照了学姐的步骤,但是没有出现进入转账的请求界面,参考答案给了一段代码,但是出来的是这个结果,有点蒙蒙的~~

至此,实验结束~~

三、漏洞原理及预防

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是否一致。

四、实验总结与感想

WebGoat8.0链接, WebGoat 7.1链接JDK链接蓝灯FQ链接

本次实验也是最后一个实验,我觉得是这些实验里面最难的最难的最难的,首先因为页(我)面(的)是(英)英(语)文(太)的(烂),增加了实验的难度,完全靠翻译软件在生活,其次我的这个WebGoat版本比较新,没有了参考系,只能自己在那里刻苦钻研。最终我还是臣服了,换了一个WebGoat版本,重新再来吧。

做了这么多的网络攻防实验,真的收获很多,都是能看到实际效果的危险、漏洞、后门、病毒,网络安全真的需要我们重视起来,同时也增强了我的安全防范意识,自从做了那个后门的实验以后我就把我电脑摄像头粘起来了,同时这门课也激发了我对网络安全这方面的兴趣,日后的学习工作生活中也会更加关注这方面的信息和事件。

授之以鱼不如授之以渔~

Exp9 Web安全基础的更多相关文章

  1. 20155208徐子涵《网络对抗》Exp9 Web安全基础

    20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...

  2. 20155312 张竞予 Exp9 Web安全基础

    Exp9 Web安全基础 目录 基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 实践过程记录 WebGoat准备工作 1.XSS攻 ...

  3. 20155205 郝博雅 Exp9 Web安全基础

    20155205 郝博雅 Exp9 Web安全基础 一.实验内容 一共做了13个题目. 1.WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览 ...

  4. 20155339 Exp9 Web安全基础

    Exp9 Web安全基础 基础问题回答 (1)SQL注入攻击原理,如何防御 原理:它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到 ...

  5. 2017-2018-2 20155314《网络对抗技术》Exp9 Web安全基础

    2017-2018-2 20155314<网络对抗技术>Exp9 Web安全基础 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤--WebGoat实践 0x10 We ...

  6. 20145236《网络对抗》Exp9 web安全基础实践

    20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  7. 20145215《网络对抗》Exp9 Web安全基础实践

    20145215<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

  8. 20145208 蔡野 《网络对抗》Exp9 web安全基础实践

    20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...

  9. 20155202《网络对抗》Exp9 web安全基础实践

    20155202<网络对抗>Exp9 web安全基础实践 实验前回答问题 (1)SQL注入攻击原理,如何防御 SQL注入产生的原因,和栈溢出.XSS等很多其他的攻击方法类似,就是未经检查或 ...

随机推荐

  1. org.apache.hadoop.security.AccessControlException: Permission denied: user=

    这个是权限问题,可以配置下,然后重启hadoop集群解决,目前简单的解决方式是: 在 hdfs-site.xml 总添加参数: <property>    <name>dfs. ...

  2. ubuntu单用户修改密码

    系统版本:Ubuntu 16.04,其它版本类似. 第一步 重启 Ubuntu ,并长按shift键,进入grub菜单,上下键选择Ubuntu高级选项 第二步 上下键选择recovery mode,不 ...

  3. python 练习题(1-15)

    1.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 2.生成双色球 3.逻辑运算(运算符优先级) 4.输入一个整数,判断这个数是几位数 5.用while循环计算 1-2+3-4...-9 ...

  4. 一些常用的 std 类型

    [std::allocator] 标准库中包含一个名为allocator的类,允许我们将分配和初始化分离.使用allocator通常会提供更好的性能和更灵活的内存管理能力. 标准库allocator类 ...

  5. 【JavaScript】EasyUIのForm的跨域提交问题解析

    昨日.プログラムを作るとき.一つの問題がありますが.皆に共有します. [問題] EasyUIのFormでURLを請求するとき.返却の値が取得できない. [ソース] var fnRegUser = fu ...

  6. spring boot1.0 集成quartz 动态配置定时任务

    转载自 https://www.imooc.com/article/36278 一.Quartz简介了解 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应 ...

  7. Sublime Text 执行后只有运行时间,没有执行结果!解决方法!

    问题:build完python代码,只输出:[Finished in 0.2s] 分析:操作回忆:开始是可以看到运行结果的,后来在Tools>>Build with 选择了"Sy ...

  8. $.ajax()参数详解

    来自于<锋利的jQuery(第2版)>. 参数 类型 说明 accepts Map 内容类型发送请求头,告诉服务器什么样的响应会接受返回. 如果accepts设置需要修改,推荐在$.aja ...

  9. Android中竖线随内容高度变化而变化的问题和解决办法

    项目中要求显示竖线,并且竖线高度不确定,竖线的高度要随着内容的变化而变化.不能使用match_parent 充满,也不能在布局中写死,此时使用 android:layout_height=" ...

  10. hibernate入门一

    ---恢复内容开始--- hibernate简介: 1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架. 2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储 3. ...