每个黑客黑客的目标是让目标系统做你不想做的事情。 一个主要的例子是显示敏感文件,如/ 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 ...
随机推荐
- WinSnap屏幕截图 V4.5.6 官方最新版
软件名称: WinSnap屏幕截图软件语言: 多国语言授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 2.7MB图片预览: 软件简介:WinS ...
- HIVE 简单总结
hive 1 table 查看 表show tables;查看表结构desc table_name; 2 database 默认 default 创建databasecreate database_n ...
- TextView赋值int型,并显示
textview赋值int型采用text.setText(FPS+""); FPS为int型变量 或者在thread线程需要在主Activity中显示文字,可以调用: runOnU ...
- IOS 第三方库之-MBProgressHUD的使用详解
转自作者: weidfyr http://www.aiuxian.com/article/p-3121607.html 1,MBProgressHUD常用属性和用法Demo - (void)test ...
- 笔记整理--Linux多线程
Unix高级环境编程系列笔记 (2013/11/17 14:26:38) Unix高级环境编程系列笔记 出处信息 通过这篇文字,您将能够解答如下问题: 如何来标识一个线程? 如何创建一个新线程? 如何 ...
- POJ 1611 The Suspects(简单并查集)
( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; ]; void makeSet(int ...
- hdu_2899_Strange fuction(三分查找)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2899 题意:让你解方程 题解:对于只有一个凸或者没有凸的图像,可以直接上三分解决. #include& ...
- Storm官方文档翻译之在生产环境集群中运行Topology
在进群生产环境下运行Topology和在本地模式下运行非常相似.下面是步骤: 1.定义Topology(如果使用Java开发语言,则使用TopologyBuilder来创建) 2.使用StormSub ...
- 谷歌浏览器web开发教程之开始篇:使用sublime
你的代码编辑器是主要的开发工具:你使用它去编辑和保存代码段.你可以通过学习编辑器快捷键和以及安装关键插件来好而快的写出代码. 目录 安装sublime文本编辑器 为什么使用包管理器? 安装插件 摘要 ...
- 在Service服务中请求网络
一.startservice方式启动 第一次startservice启动服务的时候,会走oncreate和onstart方法, 第二次startservice启动服务的时候,会走onstart方法, ...