20154324 刘康权 Exp9 Web安全基础

2023-10-15 11:50

本文主要是介绍20154324 刘康权 Exp9 Web安全基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、实践目标与内容

  1. 理解常用网络攻击技术的基本原理。
  2. 在Webgoat,实践相关实验。
  • SQL注入攻击
  • XSS攻击
  • CSRF攻击

二、实践过程与步骤

1.环境配置

1.1下载webgoat-container-7.1-exec.jar和jdk-8u172-linux-x64.tar.gz,解压jdk-8u172-linux-x64.tar.gz,并配置JDK的环境后,重载Profile文件,输入命令java -version`就可以看到我们的JAVA的版本已经更新了

1344859-20180529142147495-1078152295.png

1.2.因为我的文件目录里面只有webgoat的jar,所以输入以下命令,等待一会就可以看到webgoat运行成功了(如果有多个jar文件,只需要把*改成文件名就行了)
java -jar *.jar
1.3打开Firefox,输入http://127.0.0.1:8080/WebGoat/login.mvc访问webgoat,因为我的webgoat是7.1,不需要注册,只需要使用网页页面下面的管理员用户登录就行了
1.4 在Firefox页面中点击右上角,选择Add-ons,搜索Firebug就能找到这个插件并安装,然后就可以开整了Firebug相关介绍

2.SQL注入攻击

2.1 命令注入(Command Injection)目标:能够在目标主机上执行系统命令
2.1.1右键网页,点击inspect Element,查看并编辑网页源代码,查找BasicAuthentication.help,在旁边加上"& netstat -an & ipconfig"

1344859-20180529143715415-112305753.png

2.1.2点击网页中的view按钮,就能在网页下面看到系统的网络连接情况了

1344859-20180529143807877-1088622897.png

2.2 数字型SQL注入(Numeric SQL Injection)目标:注入一条SQL字符串,以显示所有显示的天气数据
2.2.1右键网页,点击inspect Element,查看并编辑网页源代码,查找New York,在option value中加入恒等真式or 1=1

1344859-20180529144118311-1660079504.png

2.2.2点击go就可以看到所有的天气数据了

1344859-20180529144204507-1465581394.png

2.3 日志欺骗(Log Spoofing)目标:通过在日志文件中添加一个脚本像用户名“admin”成功登录
2.3.1在user name中输入lkq%0d%0aLogin Succeeded for username: admin,,其中%0d是回车,%0a是换行符
2.3.2点击login in就可以看到成功啦

1344859-20180529144534140-1801079605.png

2.4 XPATH注入(XPATH Injection)目标:作为迈克,尝试查看其他员工的数据
2.4.1在User Name中输入永真式lkq ' or 1=1 or 'a' ='a
2.4.2点击submit就可以看到所有员工的数据了

1344859-20180529144939741-1012664407.png

2.5 字符串SQL注入(String SQL Injection)目标:作为Smith,注入一个SQL字符串,显示所有信用卡号
2.5.1输入永真式Smith ' or '1'='1
2.5.2点击Go!,就可以查看所有信用卡号了

1344859-20180529145249552-1502410251.png

2.6 字符串SQL注入(String SQL Injection)目标:使用SQL注入作为老板(“Neville”)登录,并使用所有功能
2.6.1第一次作为老板,在password中输入永真式,登录,发现失败了,经过查看源代码,找到原因为:password最大长度不够,于是再源代码中修改最大长度

1344859-20180529145552216-765599602.png

2.6.2输入永真式' or 1=1 --,其中--是将后面的代码注释掉,就能够登录成功了

1344859-20180529145731717-1794021202.png

2.7 盲数字SQL注入(Blind Numeric SQL Injection)目标:在表格中找到字段pin的值
2.7.1输入以下代码,判断pin的值是否大于2500,发现无效,于是推断pin的值小于等于2500

101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500);

2.7.2使用二分法进行反复猜测,最终找到pin的值为2364

1344859-20180529150111535-1734659280.png

3.XSS攻击

3.1 网络钓鱼和XSS(Phishing with XSS)目标:使用XSS和HTML插入,将html插入到该请求凭证中,添加javascript来实际收集凭证
3.1.1在search框中输入写好的html代码,代码如下:



  • This feature requires account login:



    Enter Username:

    Enter Password:




    3.1.2点击search后,下拉网页就可以看到输入框了,在里面输入任意字符,点击login,就可以看到攻击成功了
    1344859-20180529150641611-1407036878.png
3.2 存储的跨站点脚本(XSS)攻击(Stored XSS)目标:在搜索人员页面上使用一个漏洞来创建包含反射XSS攻击的URL。确认另一个使用该链接的员工受到攻击的影响。
3.2.1作为tom登录,点击ViewProfile查看配置文件后,点击EditProfile进行编辑,将任意一栏数据修改为:

<script>alert('20154324');</script>
1344859-20180529151247767-192374097.png

3.2.2保存后登出,作为jerry登录,点击Search For User查找Tom,就可以看到攻击成功了

1344859-20180529151313776-2090534063.png

3.3 执行反射的XSS攻击(Reflected XSS)目标:执行反射XSS攻击,在搜索人员页面上使用一个漏洞来创建包含反射XSS攻击的URL。确认另一个使用该链接的员工受到攻击的影响
3.3.1作为Tom登录后,点击Search For User
3.3.2在搜索框中输入以下代码:<script>alert('lkq');</script>,就可以看到攻击成功了

1344859-20180529151850826-599348088.png

4.CSRF攻击

4.1跨站请求伪造(CSRF)目标:给新闻组发邮件。电子邮件包含一个URL指向恶意请求的图像。在这节课中,URL应该指向“攻击”servlet,其中包含了“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,它具有任意的数值
4.1.1查看自己电脑的Screen和menu的值

1344859-20180529152103442-714100251.png

4.1.2Title中任意输入,在Message中输入写好的代码,点击Submit后,点击下方的链接,就可以看到攻击成功了

<imgsrc="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=20000"/>
1344859-20180529152334475-1072131593.png

4.2 CSRF Prompt By-Pass 目标:输入代码,第一个为转帐的请求,第二个请求确认第一个请求触发的提示
4.2.1查看自己电脑的Screen和menu的值

1344859-20180529152602720-1109574477.png

4.2.2Title中任意输入,在Message中输入写好的代码,点击Submit后,点击下方的链接,就可以看到攻击成功了,代码如下:

attack?Screen=1471017872&menu=900&transferFunds=6000
attack?Screen=1471017872&menu=900&transferFunds=confirm
1344859-20180529152649076-665213098.png
1344859-20180529152654341-150529629.png

三、基础问题与回答

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

  • 攻击原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给We程序,以发号施令,为所欲为。
  • 防御方法
  1. 普通用户与系统管理员用户的权限进行严格的区分。
  2. 不使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  3. 加强对用户输入的验证
  4. 多多使用SQL Server数据库自带的安全参数
  5. 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点

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

  • 攻击原理:在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者通过对网页注入可执行代码且成功地被浏览器执行,这些代码包括HTML代码和客户端脚本,达到攻击的目的,形成了一次有效XSS攻击
  • 防御方法
  1. 在表单提交或者url参数传递前,对需要的参数进行过滤
  2. 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等
  3. 检查输出,严格控制输出

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

  • 攻击原理:是一种对网站的恶意利用也就是人们所知道的钓鱼网站,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站,是一种依赖web浏览器的、被混淆过的代理人攻击
  • 防御方法
  1. 在form中包含秘密信息、用户指定的代号作为cookie之外的验证
  2. 验证 HTTP Referer 字段,根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
  3. 在请求地址中添加 token 并验证,可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

四、心得体会

  • 这是最后一次实验了,通过webgoat深入理解并运用了多种攻击,尝试了很多东西,这九次实验,可以说是非常有意思了(除了调试环境、调试bug),收获良多,虽然不能成功攻击他人,但是能够认识并且做出相应的防范了。学习到了不少的东西,也进行了多次的实践与尝试。

转载于:https://www.cnblogs.com/liukangquan/p/9105290.html

这篇关于20154324 刘康权 Exp9 Web安全基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217519

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group