每个黑客黑客的目标是让目标系统做你不想做的事情。 一个主要的例子是显示敏感文件,如/ 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 ...
随机推荐
- java的克隆
java有深拷贝和浅拷贝的区别. 浅拷贝:他是指拷贝该对象时,仅仅是拷贝了对象的本身(包括对象的基本数据类变量),不会拷贝引用数据类型的变量,也就是拷贝出来的新对象基本数据类型的值不变,引用数据类型的 ...
- C++ socket programming in Linux
Server.c #include <arpa/inet.h> #include <errno.h> #include <netinet/in.h> #includ ...
- 【Python之路】第一篇--Linux基础命令
pwd 命令 查看”当前工作目录“的完整路径 pwd -P # 显示出实际路径,而非使用连接(link)路径:pwd显示的是连接路径 . 表示当前目录 .. 表示上级目录 / 表示根目录 ls ...
- java 图形界面 Socket编程
一.使用图形界面实现客户端服务器端的通信: 上代码: 服务器端代码: package cn.MyNET; import java.io.*; import java.net.*; import jav ...
- point类型·
指针的类型 不同类型的指针,从内存需求的观点来说,没有什么不同!他们三个都需要足够的内存来繁殖一个机器地址,"指向不同类型之各指针"之间的差异,既不在其指针表示法不同,也不再其内容 ...
- 使用httperrequest,模拟发送及接收Json请求
使用httpreques\Json-Handle\tcpdump\wireshark工具进行,抓取手机访问网络的包,分析request及response请求,通过httprequester来实现模拟发 ...
- linux同步windows的时间
找了很多的资料,都没有windows做时间服务,linux同步windows的时间的,最后自己找了一些软件,终于搞定了,写出来给大家共享,以免大家多走弯路 首先在http://www.meinberg ...
- js键盘键值大全
原文地址:http://blog.csdn.net/avenccssddnn/article/details/7950524 js键盘键值 keycode 8 = BackSpace BackSpac ...
- angular 搜索记录保留
#方法1: 点击后退到home后,再点击搜索, locationChangeStart 事件会多次触发. # $scope.keyword = $location.search().search # ...
- linux文件特殊属性介绍(s,s,t)
文件的权限有rwx这3个读.写.执行的权限.但是,怎么 /tmp权限有些奇怪?还有, /usr/bin/passwd也有些奇怪,怎么回事呢? [root@linux ~]# ls -ld /tmp ; ...