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

相关文章

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin