每个黑客黑客的目标是让目标系统做你不想做的事情。 一个主要的例子是显示敏感文件,如/ etc / passwd和/ etc / shadow(存储用户的用户名和加密密码)。一旦这些文件在他或她的手中,就可以使用“字典“攻击的密码。 或者,他们可以使您的系统FTP受感染的文件,并运行它,这可能是坏或坏。为了做到这一点,他们需要得到一个“可信”的程序来执行他们指定的命令。通常,这是通过“缓冲区
因此,本质上,程序正在读取文本行,解释它们,并基于它们执行操作。这些“网络守护进程”利用的一个方便的特征是它们可以使用“标准输入”和“标准输出”与客户端计算机通信,对于正常程序,其将是键盘和运行程序的人的显示。但在这种情况下,它正在读取和写入另一台计算机上运行的另一个程序(如Microsoft Outlook)。
要了解缓冲区溢出的工作原理,您需要查看以下非常小的C程序:
#include <stdio.h>
main(){
char * name;
char * dangerous_system_command;
name =(char *)malloc(10);
dangerous_system_command =(char *)malloc(128);
printf(“地址名称是%d \ n”,name);
printf(“命令地址是%d \ n”,danger_system_command);
sprintf(danger_system_command,“echo%s”,“Hello world!”);
printf(“你叫什么名字?
gets(name);
system(danger_system_command);
}}
如果你不是一个C编码器,不要担心,我会带你通过它。该程序设计为由用户在控制台上运行,但它说明了一个编写不良的网络守护程序可能导致的问题。
程序做的第一件事是声明两个字符串变量,并为它们分配内存。“name”变量被赋予10个字节的内存(这将允许它保存一个10个字符的字符串)“dangerous_system_command”变量给出128字节你必须理解的是,在C中,给予这些内存块变量将在给出程序的虚拟内存空间中彼此相邻,如果你使用短名称运行程序,你可以看到事情是如何工作的:
[jturner @ secure jturner] $ ./overrun
名称的地址是134518696
命令的地址是134518712
你叫什么名字?
你好,世界!
[jturner @ secure jturner] $
正如你可以看到的,给“danger_system_command”变量的地址是从“name”变量开始的16个字节。额外的6个字节是由“malloc”系统调用使用的开销,以允许在释放内存时将其返回到一般使用。
在分配存储器和打印两个变量的存储器位置之后,程序产生稍后将被发送到“系统”调用的命令,这使得它被排除,好像它已经在键盘上键入。在这种情况下,它所做的就是打印“Hello world!”。然后,我们提示用户他们的名字,并使用“gets”系统调用读取它。在真实网络守护进程中,这可能是打印提示并等待来自客户端程序的命令,例如网站地址或邮件地址。
重要的是要知道“gets”,它从标准输入读取一个字符串到指定的内存位置,没有“长度”规范。这意味着它将读取到达行末尾所需的字符数,即使它超出了分配的内存的末尾。知道这一点,一个笑脸黑客可以将“名称”内存溢出到“dangerous_system_command”内存,并运行他们想要的任何命令。例如:
[jturner @ secure jturner] $ ./overrun
名称的地址是134518696
命令的地址是134518712
你叫什么名字?0123456789123456cat / etc / passwd
root:x:0:0:root:/ root:/ bin / bash
bin:x:1:1:bin:/ bin:
守护进程:x:2:2:守护进程:/ sbin:
adm:x:3:4:adm:/ var / adm:
lp:x:4:7:lp:/ var / spool / lpd:
sync:x:5:0:sync:/ sbin:/ bin / sync
shutdown:x:6:0:shutdown:/ sbin:/ sbin / shutdown
halt:x:7:0:halt:/ sbin:/ sbin / halt
mail:x:8:12:mail:/ var / spool / mail
通过将名称查询的响应填充为16个字符,然后添加系统命令,系统命令将覆盖“echo Hello World!”。与“cat / etc / passwd”。如您所见,这将导致运行该命令,而不是适当的命令。
那么可以做些什么来防止这种情况呢?首先,使用fgets系统调用(它指定最大长度)将完全消除这种可能性。通过将“gets”调用更改为:
fgets(name,10,stdin);
问题已经解决了:
[jturner @ secure jturner] $ ./overrun
名称的地址是134518768
命令的地址是134518784
你叫什么名字?01234567890123456cat / etc / passwd
你好,世界!
[jturner @ secure jturner] $
但是,由于许多站点运行软件,他们没有源代码(例如商业数据库),你不能保护自己免受所有缓冲区溢出。您需要采取的另一个重要步骤是关闭您不使用的任何网络服务,并且只运行您在满足程序需求的权限级别使用的服务。例如,不要以root身份运行数据库,给它自己的用户和组。这样,如果它被利用,它不能用于接管系统。
缓冲区溢出是每个第一年程序设计的学生应该避免的事情之一。它仍然与这样的频率使用黑客是一个迹象,我们必须走多远去寻求真正可靠和安全的软件。
每个黑客黑客的目标是让目标系统做你不想做的事情。 一个主要的例子是显示敏感文件,如/ etc / passwd和/ etc / shadow(存储用户的用户名和加密密码)。一旦这些文件在他或她的手中,就可以使用“字典“攻击的密码。 或者,他们可以使您的系统FTP受感染的文件,并运行它,这可能是坏或坏。为了做到这一点,他们需要得到一个“可信”的程序来执行他们指定的命令。通常,这是通过“缓冲区的更多相关文章
- (转)linux口令相关文件(/etc/passwd和/etc/shadow)
在linux中,口令文件在/etc/passwd中,早期的这个文件直接存放加密后的password,前两位是"盐"值,是一个随机数.后面跟的是加密的password.为了安全,如今 ...
- Word密码破解工具字典攻击用来干什么的
AOPR全称Advanced Office Password Recovery作为一款专业的Word密码破解工具,是通过暴力破解的方式帮助用户迅速恢复各种Word文档的密码,其中常常会用到字典攻击,这 ...
- oAuth 使得第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权
OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可 ...
- Nginx实战之让用户通过用户名密码认证访问web站点
1.Nginx实战之让用户通过用户名密码认证访问web站点 [root@master ~]# vim /usr/local/nginx/conf/extra/www.conf server { lis ...
- PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆
PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆 什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...
- Linux账号和密码文件 /etc/passwd和/etc/shadow
Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,(用户和密码就放在文件中,不怕被其他人看的或者修改吗?/etc/pass ...
- 启动Nginx目录浏览功能及 让用户通过用户名密码认证访问web站点
一.启动Nginx目录浏览功能 [root@abcdocker extra]# cat w.conf server { listen 80; server_name IP地址; location / ...
- C&C控制服务的设计和侦测方法综述——DDoS攻击,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。
这篇文章总结了一些我在安全工作里见到过的千奇百怪的C&C控制服务器的设计方法以及对应的侦测方法,在每个C&C控制服务先介绍黑帽部分即针对不同目的的C&C服务器设计方法,再介绍白 ...
- NSUserDefaults:通常用来保存一些小巧的数据,如用户的用户名密码,或者是用户的使用习惯,如是否自动打开背景音乐等。
1,NSUserDefaults通常用来保存一些小巧的数据,如用户的用户名密码,或者是用户的使用习惯,如是否自动打开背景音乐等. 2,使用它的原因就是:代码简短,使用方便 3,使用方法如下: -(vo ...
随机推荐
- webservice整合spring
接口HelloWorld需要添加webservice注解 package com.cs.webservice; import java.util.List; import javax.jws.WebP ...
- 数据库 mysql 语句
LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言 mysql:常用代码 create table CeShi1( Uid varchar(50) primary key, Pw ...
- A - Space Elevator(动态规划专项)
A - Space Elevator Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- window.showModalDialog()的简单用法
//创建一个显示html内容的模态对话框: vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) //创建一个 ...
- 虚拟机装的XP,无法上网,因为没有安装网卡驱动,怎么解决
本帖可以解决2个问题: 问题1. 虚拟机装的XP,无法上网,因为没有安装网卡驱动,怎么解决 问题2. 怎么往Oracle VM VirtualBox里传输文件??????? 步骤: 一.在虚拟机的左上 ...
- Python笔记3-20151027
函数的参数 Python的函数定义非常简单,但是灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码 ...
- QTP使用小技巧
1.创建action template. 当希望在每一个新建action时都增加一些头部说明,比如作者.创建日期.说明等,用action template 来实现最简单快捷. ...
- DOM操作-克隆元素
代码: ———————————————————————————— <script type="text/javascript"> //克隆元素 ...
- poj_2778_DNA Sequence(AC自动机+矩阵)
题目链接:poj_2778_DNA Sequence 题意: 有m个模式串,然后给你一个长度n,问你n长度的DNA序列有多少种不包含这m个模式串 题解: 这题显然要用AC自动机,将模式串的AC自动机建 ...
- C++ 中Hello World的一种写法
/*C++ Hello World**/#include <stdio.h>#include <iostream>int main(){ printf("Hel ...