2018-2019-2 20189212 《网络攻防技术》第十周做业

冯·诺依曼体系结构和图灵机


综述:电子计算机的问世,奠定人是英国科学家艾兰· 图灵(Alan Turing)和美籍匈牙利科学家冯· 诺依曼(John Von· Neumann)。图灵的贡献是创建了图灵机的理论模型,奠基了人工智能的基础。而冯· 诺依曼则是首先提出了计算机体系结构的设想。sql

冯·诺依曼体系结构

冯·诺依曼于1946年提出存储程序原理,把程序自己看成数据来对待,程序和该程序处理的数据用一样的方式储存。 人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构

要点:计算机的数制采用二进制;计算机应该按照程序顺序执行。
shell

 体系结构

  1. 采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,数据和程序在内存中是没有区别的,它们都是内存中的数据,当EIP指针指向哪 CPU就加载那段内存中的数据,若是是不正确的指令格式,CPU就会发生错误中断. 在如今CPU的保护模式中,每一个内存段都有其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行).这就变相的指定了哪些内存中存储的是指令哪些是数据)
    指令和数据均可以送到运算器进行运算,即由指令组成的程序是能够修改的。
  2. 存储器是按地址访问的线性编址的一维结构,每一个单元的位数是固定的。
  3. 指令由操做码和地址组成。操做码指明本指令的操做类型,地址码指明操做数和地址。操做数自己无数据类型的标志,它的数据类型由操做码肯定。
  4. 经过执行指令直接发出控制信号控制计算机的操做。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,通常按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
  5. 以运算器为中心,I/O设备与存储器间的数据传送都要通过运算器。
  6. 数据以二进制表示。

 特色

  1. 计算机处理的数据和指令一概用二进制数表示
  2. 顺序执行程序
      计算机运行过程当中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一律念称做顺序执行程序。
  3. 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

 做用

  冯.诺依曼体系结构是现代计算机的基础,如今大多计算机还是冯.诺依曼计算机的组织结构,只是做了一些改进而已,并无从根本上突破冯体系结构的束缚。冯.诺依曼也所以被人们称为“计算机之父”。然而因为传统冯.诺依曼计算机体系结构自然所具备的局限性,从根本上限制了计算机的发展。
  根据冯·诺依曼体系结构构成的计算机,必须具备以下功能:把须要的程序和数据送至计算机中。必须具备长期记忆程序、数据、中间结果及最终运算结果的能力。可以完成各类算术、逻辑运算和数据传送等数据加工处理的能力。可以根据须要控制程序走向,并能根据指令控制机器的各部件协调操做。可以按照要求将处理结果输出给用户。
  将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特色之一 计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成 冯·诺依曼提出的计算机体系结构,奠基了现代计算机的结构理念。数据库

图灵机

简介:图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
  所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分红了一个一个的小方格,每一个方格有不一样的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每一个时刻,机器头都要从当前纸带上读入一个方格信息,而后结合本身的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换本身的内部状态,而后进行移动。
浏览器


 基本思想

图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看做下列两种简单的动做:
在纸上写上或擦除某个符号;
把注意力从纸的一个位置移动到另外一个位置;
而在每一个阶段,人要决定下一步的动做,依赖于 (a) 此人当前所关注的纸上某个位置的符号和(b) 此人当前思惟的状态。
为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由如下几个部分组成:
1.一条无限长的纸带 TAPE。纸带被划分为一个接一个的小格子,每一个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号 表示空白。纸带上的格子从左到右依此被编号为 0,1,2,... ,纸带的右端能够无限伸展。
2.一个读写头 HEAD。该读写头能够在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
3.一套控制规则 TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来肯定读写头下一步的动做,并改变状态寄存器的值,令机器进入一个新的状态。
4.一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的全部可能状态的数目是有限的,而且有一个特殊的状态,称为停机状态。参见停机问题。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,所以这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。
安全


在某些模型中,读写头沿着固定的纸带移动。要进行的指令(q1)展现在读写头内。在这种模型中“空白”的纸带是所有为 0 的。有阴影的方格,包括读写头扫描到的空白,标记了 1,1,B 的那些方格,和读写头符号,构成了系统状态。bash

二者之间的区别和联系

  图灵机本质上是一个理论模型,主要工做放到数学计算上,于是数学计算是焦点。可是,图灵的指令系统单一不够完善,总结起来主要有两条。第一,没能将指令存储起来重复使用。第二,没能造成实现程序结构设计。","图灵机欠缺的这两点恰被冯诺依曼提出的程序数据存储的思想解决了。"
  图灵机是抽象理论计算机,冯诺依曼计算机是实际计算机的抽象。服务器

浅谈“程序=指令+数据”


程序:是指一组指示计算机每一步动做的指令,一般用某种程序设计语言编写,运行于某种目标体系结构上。
指令:指挥机器工做的指示和命令,控制器靠指令指挥机器工做,人们用指令表达本身的意图,并交给控制器执行。一般一条指令包括两方面的内容: 操做码和操做数,操做码决定要完成的操做,操做数指参加运算的数据及其所在的单元地址。
数据:指对客观事件进行记录并能够鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。
dom

综上所述,程序是由一条条指令集合而成并由程序设计语言编写的,而每条指令又包括对数据的操做。因此能够理解为程序=指令+数据。

安全问题


缓冲区溢出

初始配置

在已经配置好的 Ubuntu 镜像上执行本实验任务。 Ubuntu 和其它一些 Linux 系统都适用了地址空间随机化机制(ASLR)来随机变化堆栈的起始地址。 这将使猜想精确的地址很是困难,猜想地址是缓冲区溢出攻击中关键的一步。在这个实验中,咱们使用下面的命令关闭xss

$ su root
  Password: (enter root password)
#sysctl -w kernel.randomize_va_space=0

发现漏洞

程序有一个缓冲区溢出漏洞。它一开始从一个叫“badfile”的文件读了一个输入,而后将这个输入传递给了另外一个 bof()功能里的缓冲区。原始输入最大长度为 517 bytes,然而 bof()的长度仅为 12 bytes。因为 strcpy()不检查边界,将发生缓冲区溢出。因为此程序有效执行用户为 root,若是一个普通用户利用了此缓冲区溢出漏洞,他有可能得到 root shell。应该注意到此程序是从一个叫作“badfile”的文件得到输入的,这个文件受用户控制。如今咱们的目标是为“badfile”建立内容,这样当这段漏洞程序将此内容复制进它的缓冲区,便产生了一个 shell.函数

攻击漏洞

利用exploit函数攻击漏洞

/bin/bash 中的保护

$ su root
Password: (enter root password)
# cd /bin
# rm sh
# ln -s bash sh // link /bin/sh to /bin/bash
# exit
$./stack // launch the attack by running the vulnerable program

XSS跨站脚本攻击

  XSS攻击的根源一样是Web应用程序对用户输入内容的安全验证与过滤不够完善,在许多流行的Web论坛、博客、留言本及其余容许用户交互的Web应用程序中,用户提交内容中能够包含HTML、JavaScript及其余脚本代码,而一旦Web应用程序没有对这些输入的合法性进行有效检查与过滤,就颇有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。
  而与代码注入不一样的是,XSS攻击的最终目标并不是Web服务器,Web服务器上的应用程序在XSS攻击场景中发挥的角色是“帮凶”,而非“受害者”,真正的“受害者”则是访问这些Web服务器的其余用户。攻击者能够利用Web应用程序中的安全漏洞,在服务器端网页中插入一些恶意的客户端脚本代码,在Web服务器上产生一些恶意攻击页面。
XSS攻击类型:持久性XSS攻击和非持久性XSS攻击
XSS攻击步骤:
(1)攻击者构造出一个包含恶意脚本的bank.com登陆请求连接,并经过Email/HTTP等方式将该攻击连接发送给其余bank.com网站用户;
(2)受害用户点击攻击连接后,将会把恶意连接中包含的恶意脚本当作用户名参数提交给bank.com的登陆处理网页;
(3)因为bank.com登陆处理页面存在XSS漏洞,将会在反馈的欢迎页面中包含恶意客户端脚本;
(4)攻击者的恶意客户端脚本在受害用户浏览器中执行,一般会驱动浏览器向攻击者发送会话令牌,如会话ID、Cookie信息等;
(5)攻击者得到用户会话令牌以后,就能够劫持用户会话,或者伪造用户登陆bank.com,并可实施进一步攻击。

 XSS攻击防范措施

  • 输入验证
  • 输出净化
  • 消除危险的输入点

SQL注入

代码注入根据攻击目标的不一样又分为:

  • 恶意读取、修改与操纵数据库的SQL注入攻击;
  • 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击;
  • 在Web服务器恶意执行操做系统命令的Shell注入攻击;
  • 其余多种多样的注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSI注入、XPath注入、XML注入、XQuery注入等。
    在这多种类型的代码注入攻击中,SQL注入是目前最多见的,也是较为直观的一种攻击技术。

SQL注入攻击原理

  SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。这类被攻击的漏洞被称为SQL注入漏洞,是因为用于输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如引号(')、双引号(")、反引号(`)、分号(;)、百分号(%)、井号(#)、双减号(--)、双下画线(__)等,或者没有进行严格的类型判断,如未判断输入参数是否合法整数类型等,从而使得用户能够输入并执行一些非预期的SQL指令代码。
  SQL注入攻击的原理是向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操做行为。

SQL注入攻击步骤和过程

  在攻击者真正对万维网的一些Web应用站点实施SQL注入攻击等,每每是按照以下的攻击步骤与过程。
(1)发现SQL注入点
(2)判断后台数据库类型

  • 利用数据库服务器的系统变量进行判断
  • 利用数据库服务器的系统变量进行判断
  • 利用数据库服务器的系统表进行判断

(3)后台数据库中管理员用户口令字猜解

  • 猜解表名
  • 猜解字段名
  • 用户名与口令猜解

(4)上传ASP后门,获得默认帐户权限
(5)本地权限上升
(6)利用数据库扩展存储过程执行Shell命令

SQL注入工具

国外工具:
  Wposion可以在动态Web文档中找出SQL注入漏洞;wieliekoek.pl可以以并以网站镜像工具生成的输出为输入,找出含有表单页面,容许在配置文件中对注入字符串进行修改,进行SQL注入漏洞探测;SPIKE Proxy工具容许使用则对待注入的字符串进行定制,并执行自动化的SQL注入测试;SPI Tooklit工具包中也包含一个名叫“SQL Injector”的自动化SQL注入测试工具。
国内工具:
  CSC、NBSI、HDSI、阿D注入工具、WED、Domain、Pangolin等

SQL注入攻击防范措施

(1)使用类型安全的参数编码机制
(2)凡是来自外部的用户输入,必须进行完备检查
(3)将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
(4)增强SQL数据库服务器的配置与链接

参考资料


图灵机与冯·诺伊曼机的区别

相关文章
相关标签/搜索