热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20145303刘俊谦《网络对抗》Exp9Web安全基础实践

20145303刘俊谦《网络对抗》Exp9Web安全基础实践基础问题回答1、SQL注入原理,如何防御SQL注入就是通过把SQL命令插入到“Web表单递交”或“输入域名

20145303刘俊谦 《网络对抗》Exp9 Web安全基础实践

基础问题回答

1、SQL注入原理,如何防御

  • SQL注入

  • 就是通过把SQL命令插入到“Web表单递交”或“输入域名”或“页面请求”的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。

  • 防御
  • 通过正则表达式,或限制长度,对用户的输入进行校验等。

  • 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

  • 不把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

  • 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

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

  • 原理:在Web页面里插入恶意Script代码,当用户浏览网页时,嵌入其中Web里面的Script代码会被执行,一个看似安全的网页却有可能盗取用户的COOKIEs,或者登录名密码等信息。

  • 防御

  • 在输入方面对用户提交的的内容进行可靠的输入验证。

  • 可以对输入的地方进行输入字数控制

  • 脚本执行区,禁止输入。

3、CSRF攻击原理,如何防御

  • 我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其COOKIE等信息。而CSRF是借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。

  • 对于CSRF的防御也可以从以下几个方面入手:

  • 通过referer、token或者验证码来检测用户提交;

  • 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;

  • 避免全站通用的COOKIE,严格设置COOKIE的域。

WebGoat

  • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入等,我们本次的实验就是在WebGoat平台上进行。

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

  • WebGoat使用8080端口,所以在浏览器上访问localhost:8080/WebGoat,进入WebGoat之后,可以看到有很多题目来让我们进行练习。

Cross-Site Scripting(XSS)练习

Phishing with XSS

  • 这个题目我们要在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点。我们先创建一个form,让受害人在我们创建的form中填写用户名和密码,再添加一段Javascript代码,读取受害人输入的用户名和密码,并且将这些信息发送给http://localhost:8080/WebGoat/catcher?PROPERTY=yes...,完整的XSS攻击代码如下:




    This feature requires account login:



    Enter Username:

    Enter Password:




  • 在搜索框中输入攻击代码后点击搜索,会看到一个要求输入用户名密码的表单

  • 输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:
    884668-20170520010745338-1891281129.png

  • 攻击成功!
    884668-20170520010749744-941710535.png

Stored XSS Attacks

  • 我们的目标是要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容,在上个实验中我们也做过,在message中输入一串代码``
    884668-20170520010757728-1698428972.png

  • 提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功:
    884668-20170520010802510-1087139025.png

Reflected XSS Attacks

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

  • 这时如果我们将带有攻击性的URL作为输入源,例如依旧输入``,就会弹出对话框:
    884668-20170520010817697-634221339.png

  • 虽然这个效果和上一个存储型XSS实验的效果类似,但是两者所用的原理不一样,存储型XSS是持久化的,代码是存储在服务器中,比较典型的例子就是上面所用的留言板,而这个实验中用的是反射型XSS攻击是非持久化的,应用的场景比如欺骗用户自己去点击链接才能触发XSS代码,也就是说它的代码是不存在服务器中的,所以一般来说存储型XSS攻击危害更大。

Cross Site Request Forgery(CSRF)

  • 我们的目的是要写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。

  • 我们在message框中输入这样一串代码:,注意这里面的Screen和menu的值每个人的电脑可能不一样,可以在Parameters进行查看

  • 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的4000元,从而达到CSRF攻击的目的。

CSRF Prompt By-Pass

  • 我们依旧和上一个一样要构造CSRF攻击,不过这次其包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)

  • 一开始我是直接在message中写入了攻击代码,但是没有成功,于是我换了一种方法,先在浏览器中手动输入URL:localhost:8080/WebGoat/attack?Screen=269&menu=900&transferFunds=5000进入确认转账请求页面:
    884668-20170520010830494-1827475830.png

  • 点击CONFIRM按钮之后,再在浏览器中输入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM,成功转走了5000元:
    884668-20170520010847853-780222536.png

Injection Flaws练习

Command Injection

  • 这个题是要求能够在目标主机上执行系统命令,我们可以通过火狐浏览器下的一个扩展Firebug对源代码进行修改,例如在BackDoors.help旁边加上"& netstat -an & ipconfig":
    884668-20170520010856213-1254921927.png

  • 之后在下拉菜单中能看到我们修改后的值:
    884668-20170520010901494-1961897251.png

  • 选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:
    884668-20170520010910322-1700444563.png

Numeric SQL Injection

  • 我们要通过注入SQL字符串的方式查看所有的天气数据,我们上次实验做过类似的,只要加上一个1=1这种永真式即可达到我们的目的,依旧利用firebug,在任意一个值比如101旁边加上or 1=1:
    884668-20170520010924307-1879170267.png

  • 选中Columbia,点Go,可以看到所有天气数据:
    884668-20170520010929322-1731913657.png

Log Spoofing

  • 我们输入的用户名会被追加到日志文件中,所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,在User Name文本框中输入rx%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符:
    884668-20170520010937869-2121429969.png

  • 如图所示,攻击成功:
    884668-20170520010942713-1650094632.png

String SQL Injection

  • 还是和之前一样,基于select语句构造SQL注入字符串,在文本框中输入' or 1=1 --:

  • 点Go,攻击成功,所有用户信息都被显示出来:
    884668-20170520010956744-1165331509.png

LAB:SQL Injection(Stage 1:String SQL Injection)

  • 以用户Neville登录,在密码栏中输入' or 1=1 --进行SQL注入,但是登录失败:
    884668-20170520011008369-1767865822.png

  • 后面查看了一下网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符:
    884668-20170520011013744-2122338470.png

  • 对字符长度进行修改,然后重新登录,登录成功:
    884668-20170520011020916-1302503951.png

LAB:SQL Injection(Stage 3:Numeric SQL Injection)

  • 我们还是用上一题的办法先以用户名Larry登录,登录之后看到浏览员工信息的按钮是ViewProfile:
    884668-20170520011028447-449022336.png

  • 在网页代码中分析一下这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个:
    884668-20170520011036807-1527872565.png

  • 之后就可以查看到老板的信息:
    884668-20170520011042228-730333480.png

Database Backdoors

  • 先输一个101,得到了该用户的信息:
    884668-20170520011048900-581193817.png

  • 可以发现输入的语句没有验证,很容易进行SQL注入,输入注入语句:101; update employee set salary=10000,成功把该用户的工资更改到了10000:
    884668-20170520011053994-446835924.png

  • 接下来使用语句101;CREATE TRIGGER lxmBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145303@163.com' WHERE userid = NEW.userid创建一个后门,把表中所有的邮箱和用户ID都设为我的:
    884668-20170520011102088-1602533193.png


转:https://www.cnblogs.com/ljq007/p/6880841.html



推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
author-avatar
mobiledu2502883183
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有