每个黑客黑客的目标是让目标系统做你不想做的事情。 一个主要的例子是显示敏感文件,如/ 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 ...
随机推荐
- ADO.NET 数据访问类查询、属性扩展
今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...
- Tomcat7调优及JVM性能优化for Linux环境
标签: tomcat7 jvm 性能 分享到: 出处:http://www.iteye.com 该优化针对Linux X86_X64环境 1. Tomcat优化其实就是对server.xml优化(开户 ...
- 单片机上使用TEA加密通信(转)
源:单片机上使用TEA加密通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 单片机:STM32 说 ...
- 1.Perl 多线程:Threads
详情可查看: perldoc threads 调用线程的方法: $thr = threads->create(FUNCTION, ARGS) #This will create a new th ...
- 五种JSP页面跳转方法详解
1. RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个 ...
- 了解Sql
什么是数据库: 数据库是一个以某种有组织的方式存储的数据集合,也可以理解为有组织的数据的容器.数据库相当于文件柜. 表相当于文件柜中的抽屉,表用来存储资料,一个数据库中的表必须唯一. 列,表中的一个字 ...
- sql语句--查询语句(MySQL)
1.截取字符串 left(str, length),right(str, length),substring(str, pos, length) 原文:http://www.jb51.net/arti ...
- Apriori算法-java
package com.yang; import java.util.*; public class Apriori { private double minsup = 0.2;// 最小支持度 ...
- ubuntu如何实现访问实际网络中windows共享文件夹
方法一: 首先在建立一个挂载目录. sudo mkdir /mnt/share 然后就把共享目录持载进去. 服务器:192.168.6.84 共享名:gg 用户名:administrator 密 码: ...
- 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C
题目大意:给你一个n*m的矩阵,再给你一个小球,从(0,0)以sqrt(2)/s的速度向右上角出发,遇到边框会反弹,遇到角落就直接停止,给你一些点,问小球第一次经过这些点所需要的时间. 思路:模拟一下 ...