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

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


**综述:**电子计算机的问世,奠基人是英国科学家艾兰· 图灵(Alan Turing)和美籍匈牙利科学家冯· 诺依曼(John Von· Neumann)。图灵的贡献是建立了图灵机的理论模型,奠定了人工智能的基础。而冯· 诺依曼则是首先提出了计算机体系结构的设想。 ##冯·诺依曼体系结构 冯·诺依曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构 **要点**:计算机的数制采用二进制;计算机应该按照程序顺序执行。
![](https://img2018.cnblogs.com/blog/1615265/201905/1615265-20190505161628183-1546880551.png)

 体系结构

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

 特点

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

 作用

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

图灵机

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

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

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

两者之间的区别和联系

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

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


**程序:**是指一组指示计算机每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。 **指令:**指挥机器工作的指示和命令,控制器靠指令指挥机器工作,人们用指令表达自己的意图,并交给控制器执行。通常一条指令包括两方面的内容: 操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。 **数据:**指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。
综上所述,程序是由一条条指令集合而成并由程序设计语言编写的,而每条指令又包括对数据的操作。所以可以理解为程序=指令+数据。
#安全问题
##缓冲区溢出 ###
初始配置
在已经配置好的 Ubuntu 镜像上执行本实验任务。 Ubuntu 和其它一些 Linux 系统都适用了地址空间随机化机制(ASLR)来随机变化堆栈的起始地址。 这将使猜测精确的地址非常困难,猜测地址是缓冲区溢出攻击中关键的一步。在这个实验中,我们使用下面的命令关闭 ```ASLR: $ 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数据库服务器的配置与连接

参考资料


[图灵机与冯·诺伊曼机的区别](https://blog.csdn.net/l7331014/article/details/42833871)
posted @ 2019-05-05 19:26  20189212林昊  阅读(198)  评论(0编辑  收藏