20145216史婧瑶《网络对抗》Web安全基础实践

实验问题回答

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

  • 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一些组合,程序通过执行SQL语句进而执行攻击者所要的操作。其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。
  • 防御方法:
    • 对输入的数据进行过滤,将常见的sql语句的关键词:select or ' " 等字符进行过滤。
    • 对在数据库中对密码进行加密,验证登陆的时候先将密码进行加密再与数据库中加密的密码进行对比,若此时一致则基本是安全的。
    • 对数据库中密码采用常用的MD5加密时尽量在字符串的前边和后边加上指定字符后在进行加密,这样即便是看到了数据库也很难破解密码。

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

  • 攻击原理: XSS攻击是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。
  • 防御方法:
    • 当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
    • 当恶意代码被作为某一标签的属性显示,通过用“将属性截断来开辟新的属性或恶意方法:属性本身存在的单引号和双引号都需要进行转码;对用户输入的html标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。

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

  • 攻击原理: CSRF跨站请求伪造是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。
  • 防御方法:
    • 通过referer、token或者验证码来检测用户提交。
    • 尽量不要在页面的链接中暴露用户隐私信息。
    • 对于用户修改删除等操作最好都使用post操作。
    • 避免全站通用的cookie,严格设置cookie的域。

实验总结与体会

这次实验让我知道了许多网络攻击技术,再次感叹网络的不安全性!比如仅仅只需要简简单单的一个输入,攻击者就可以让程序执行他想要的操作。所以我们以后在设计网站的时候一定要谨慎啊,针对这些攻击做出相应的防范措施,提高网络的安全性。

实践过程记录

首先开启webgoat:

SQL注入攻击:

String SQL Injection(SQL字符串注入):

题目要求尝试使用SQL注入,使得所有银行卡都可以被展现。
首先按题目尝试输入Smith,发现查询出来都是last_name是Smith的表单,分析后知道是需要WHERE这个条件语句失效,因此构造一个用真式'or 1='1 。

Log Spoofing(日志欺骗):

这道题大概意思是说,我们输入的用户名会被追加到日志文件中。所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入%0d%0aLogin succeeded !admin ,其中%0d是回车,%0a是换行符,结果就像登录成功一样。

Stage 1 String SQL Injection

字符串型注入,要求使用SQL注入绕过认证,实现无密码登陆。

在密码栏输入' or 1 = 1 -- ,发现输入错误:

查看源代码,原来最长只能输入8位,把长度限定改为15,把文本框格式改为text,再次输入' or 1 = 1 --,成功。

Stage 3 Numeric SQL Injection

数字型注入,要求使用一个普通员工的账户,浏览其BOSS的账户信息。
首先通过Larry的账户登陆(密码为larry),更改登录后页面源代码value值为112 or 1=1 order by salary desc 。


点击ViewProfile查看信息:

Blind Numeric SQL Injection(盲数字注入)

题目要求是得到一个存放在pins表中值pin的内容,行号cc_number=1111222233334444,是一个int型的数据。使用盲注方式,输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500),显示不合法:


再次输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2300)显示合法:


最后试出来值为2364,成功。

XSS攻击

Phishing with XSS(跨站脚本钓鱼攻击)

关于一个页面中存在XSS漏洞时,它如何支持钓鱼攻击。
在文本框里面写一个钓鱼网站代码就可以了,这里我参考了其他同学的代码,将代码粘过去后登录,成功。

Stored XSS Attacks

题目要求:要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
直接在title里随便输入,然后在message中输入一串代码,比如:<script>alert("20145216");</script> 提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功。

Reflected XSS Attacks

将带有攻击性的URL作为输入源,比如<script>alert("20145216sjy");</script> ,就会弹出对话框:


这个看上去和上面的Stored XSS Attacks很相似,但是原理不同,上面的是存储式的,这个是通过写在url里面达到的效果,里面的脚本也可以改写成其他恶意的内容。

CSRF攻击

Cross SSite Request Forgery(CSRF)

题目要求:需要写一个URL诱使其他用户点击,从而触发CSRF攻击。
在message里面输入<img src='attack?Screen=282&menu=900&transferFunds=10000' width='1' height='1'>,就会发出一个转钱的请求,盗取钱财。


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

CSRF Prompt By-Pass

这个就是利用CSRF进行冒名操作转账,不过这次包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=5000,transferFunds=CONFIRM)。直接在message中写入攻击代码,然后提交:


点击CONFIRM按钮,成功。

完成情况:

20145216史婧瑶《网络对抗》Web安全基础实践的更多相关文章

  1. 20145334赵文豪网络对抗Web安全基础实践

    1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范,我觉 ...

  2. 20145216史婧瑶《网络对抗》Web基础

    20145216史婧瑶<网络对抗>Web基础 实验问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签.表单域.表单按钮. (2)浏览器可以 ...

  3. 20145216史婧瑶 《网络对抗》 MSF基础应用

    20145216史婧瑶 <网络对抗> MSF基础应用 实验回答问题 用自己的话解释什么是exploit,payload,encode. exploit:渗透攻击模块,测试者利用它来攻击一个 ...

  4. 20145216史婧瑶《网络对抗》逆向及Bof进阶实践

    20145216史婧瑶<网络对抗>逆向及Bof进阶实践 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢 ...

  5. 20145216史婧瑶《Java程序设计》第五次实验报告

    20145216 实验五<Java网络编程> 实验内容 1.掌握Socket程序的编写 2.掌握密码技术的使用 3.设计安全传输系统 实验要求 1.基于Java Socket实现安全传输 ...

  6. 20145216史婧瑶《Java程序设计》第10周学习总结

    20145216 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 一.网络概述 网络编程就是两个或多个设备(程序)之间的数据交换. 识别网络上的每个设备:①IP地址②域名 ...

  7. 20145216史婧瑶《Java程序设计》第9周学习总结

    20145216 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. ...

  8. 20145216史婧瑶《Java程序设计》第8周学习总结

    20145216 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 通用API 15.1 日志 java.util.logging 包提供了日志功能相关类与接口,不必额外配置 ...

  9. 20145216史婧瑶《Java程序设计》第7周学习总结

    20145216 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1 认识时间与日期 就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间 ...

随机推荐

  1. python中的字符串切片

    python中的字符串切片,似乎有点乱,例如: >>>pystr='Python' >>>pystr[2:5] 就会输出 'tho' 这该怎样理解呢?中括号[2:5 ...

  2. sklearn学习_01

    # -*- coding: utf-8 -*- """ Created on Fri Sep 29 11:05:52 2017 机器学习之sklearn @author: ...

  3. hadoop2.x编译安装

    Build instructions for Hadoop (Hadoop 编译安装,参考hadoop源码包中BUILDING.txt文档) ----------------------------- ...

  4. Python高阶函数:map、reduece、filter

    笔记中函数简介: map函数:遍历序列,对序列中每个元素进行操作,最终获取新的序列. reduce函数:对于序列内所有元素进行累计操作. filter函数:对于序列中的元素进行筛选,最终获取符合条件的 ...

  5. 网页设计师必知的10则SEO

    如今,Web设计师在设计Web外观与风格的同时,往往还负责了前端代码的编写.换???话说,SEO的相当一部分责任是落在他们肩上的.然而,大 量的 Web设计师对SEO的熟悉程度仍不足以让他们写出一个符 ...

  6. The Unique MST----poj1679次小生成树

    题目链接:http://poj.org/problem?id=1679 判断最小生成数是否唯一:如果唯一这权值和次小生成树不同,否则相同: #include<stdio.h> #inclu ...

  7. maven国内稳定的阿里源

    <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexu ...

  8. kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警

    1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版 ...

  9. gulp处理错误

    Gulp 目前的错误处理方式有点操蛋,一旦发生错误进程就挂了,得手动去重启.虽然开发者预期在 gulp 4 中解决此问题 ,但 gulp 4 什么时候发布并没有明确时间表,在此之前,还是很有必要了解一 ...

  10. oracle显示转换字段类型cast()函数

    今天遇到一个查询类型转换的问题:表的字段是varchar2类型,然后查询到的结果要转换为number(20,2),刚开始的时候使用to_number()函数,发现不能满足需求.后来才知道,原来还有ca ...