UNIX入侵

    [雨 December 17, 2007 21:39 | by ]
PS:最近在看 unix 下的入侵,这文章不错,比较全面.
作者:lovehacker
前言:
  很早以前就想写一些关于UNIX入侵的文章了,对于入侵而言,我也是新手。不过希望能通过这篇文章来总结一下自己的知识。同时也让更多的朋友了解Hacker入侵的过程及手段,本文有不尽之处,万望来信指点。如果你有更多好的经验、或新发现的安全问题,请来信到 lovehacker@chinansl.com 我们将"安盟"的网站上刊登。

一、入侵UNIX系统前一些必备的基础知识:
 1.UNIX的一些基础知识:
    1#UNIX系统具有如下特点:

    分级树形文件结构、文件、目录表和外部设备作为文件统一管理、提供功能完备的命令程序语言"Shell语言"、提供了各种程序设计语言和大量的程序设计子系统、系统核心和外部程序大部分采用C语言编写、采用进程映像对换技术、系统效率高。

    2#主流UNIX系统及制造商:

    386BSD----------------Internet免费
    AIX------------------IBM
    A/UX------------------Apple
  BSD-------------------Univ.of Califonia ar Berkeley
  FreeBSD-----------------Internet 免费
    HP-UX------------------HP
   UNIXWare----------------Novell
  SunOS------------------Sun Microsystems
  UNIX System V--------------AT&T
Solaris------------------Sun Microsystems

3#基础UNIX指令:
下边是UNIX指令和MS-DOS指令的一个对比,相信我不用多说,使用过DOS的朋友,都能够进行一些基本的操作了!
CD = cd
CD.. = cd..
DIR/W = ls
DIR = ls -l
DIR/AH = ls -al AH=(hidden) -al=(include hidden files as well as regular)
RENAME = mv
ATTRIB = chmod
MD = mkdir
RD = rmdir
DEL = rm
COPY = cp


4#一些对入侵者可能有帮助的指令及文件:
    
    命令:uname -a
    用途:显示系统版本
    对入侵者的用途:了解系统版本情况,对症小药。
    
    命令:ps
    用途:查看系统进程
    对入侵者的用途:比如查看到ROOT启动了HTTPD,而WEB目录又任意用户可写的话,那本地用户可以写一个CGI,以ROOT的身份来调用系统命令,发达啦!

    命令:w
    用途:查看当前系统中的用户及其正在操作的命令对入侵者的用途:看看是不是有其它人在系统上呀,如果有就最好别下手了:)

    命令:su
    用途:改变当前用户在系统中的身份
    对入侵者的用途:su root,不用说了吧!

    命令:ln
    用途:建立文件连接
    对入侵者的用途:我前天发现了SunOS的一个文件链接漏洞,可以通过ln命令来改变文件的属主,属性,内容:)
    
    命令:rlogin
    用法:rlogin -l username hostname
    用途:远程登陆其它主机
    对入侵者的用途:我们可以用它在登陆到其它的主机上,就是所谓的跳板吧!
    
    命令:gcc
    用法:gcc rootshell.c -o rootshell
    用途:编译C程序
    对入侵者的用途:不用我说了吧!

    文件:$HOME/.histroy
    用途:历史记录文件
    对入侵者的用途:用来记录你的命令,当然也可能是别人的命令,有两个作用如果这个系统已经被别人入侵了,而且是使用你这个用户名进行的,呵呵,看看.history说不定能帮你找到他留下的后门,第二点是你成功获得ROOT后,一定要清除这个文件哦。

    文件:.bashrc
    用途:Bash Shell的个性化配置文件
    对入侵者的用途:这个文件在启动Bash Shell的时候运行,它可以包含任何合法的命令及复杂的脚本指令,你想想在root的目录中放个这会有什么好处?(每一种Shell都有这样的文件哦)

    文件:/etc/passwd
    用途:用户密码文件
    对入侵者的用途:看看系统有那些用户也好呀,或者当下来配合下边要提到的shadow进行密码破解也是一种办法哦。

    文件:/etc/shadow
    用途:用户密码文件
    对入侵这的用途:其实用户真正的密码是在这里,如果可以的话把它和/etc/passwd一起下载到本地,然后john跑用户密码

    文件:/etc/inetd.conf
    用途:系统配置文件
    对入侵者的用途:more /etc/indtd.conf看看系统到底开放了那些服务。当然我们也可以利用它做后门,这以后再谈。

    文件:.rhosts
    用途:rlogin和rsh通过它做简单的认证
    对入侵者的用途:"+ +"的后门你一定听说过吧?

    文件:login.c
    用途:用户登陆程序的源代码
    对入侵者的用途:修改源代码,放个后门在里边。

    文件:wtmp,utmp,message,lastlog
    用途:日志文件
    对入侵者的用途:清除你在系统中留下的影子

还有太多的文件对Hacker有用了,举不完了,好累:)明天继续写第二章。
1.UNIX Shell:

    命令解释程序Shell处在内核(Kernel)与外层软件之间,具有非常重要的地位及作用,Shell的作用是逐条的解释用户输入的命令,并给出回答及提示,它用于协调用户及系统的一致性,在用户及系统中进行交互。
当用户进入系统,就开始和Shell命令解释程序的主控程序进行通信,每引用一次解释程序就调用一个Shell,读入并执行用户键入的指令。Shell还包括一些后台处理、输入输出改向、管道、过滤程序和文件名生成等功能。

     Shell中提供了与程序设计语言C、Java等类似的控制结构,可以方便的数据和文件执行一组命令或根据执行的条件而选择不同的命令来执行。
    
    1#Shell变量赋值:
    Shell的变量可以是数值也可以是字符串:
    num=1
str="hello world"
当你要使用这些变量的时候需要在变量前加上"$"符号,下边我们来输出变量num:
echo $num
将会在屏幕上输出"1"

2#与用户交互:
Shell程序允许和用户进行交互,也就是可以接收用户键盘的输入,我用一个简单的Java程序例子和Shell的接受用户输入做一个比较:
-----------Java Input-------------
import java.io.*;
class UserName{
public static void main(String args[]){
DataInputStream DIS=null;
String str="";
System.out.println("Whats your name?");
try{
DIS=new DataInputStream(System.in);
try{
str=DIS.readLine();
System.out.println("Hello "+str);
}catch(Exception e){
System.out.println(e);
System.exit(1);
}
}catch(IOException e){
System.out.println(e);
System.exit(1);
}

}
}

//程序的运行结果:
程序输出:"Whats your name?"
等待用户输入:lovehacker[enter]
程序输出:Hello lovehacker
程序结束
--------------cut here----------------

---------Input.sh---------------------
#!/bin/sh
echo Whats your name?
read yourname
echo Hello $yourname
----------cut here--------------------

多么简单?

3#case结构:
Shell的case结构有几个重点需要注意:
1.case语句开始的表示方法是:case 变量 in
2.每一个开关需要使用";;"来结束:k) killall -HUP httpd
3.需要用esac来结束case语句。

---------AuthHacker.sh----------------
#!/bin/sh
#程序将严正用户名,如果是lovehacker输出欢迎词并输出/etc/passwd,如果不是输出who are you?并退出
echo "Please Input your name"
echo "name":
read name
case $name in
lovehacker) echo "Welcome lovehacker";
more /etc/passwd;;
*) echo "who are you?";
exit;;
esac
-------------cut here-----------------


哎,我讲的是入侵教学呀,怎么快被我搞成了编程教学了,呵呵!耐心的等待,一会儿就会进入正题的,我只是希望你多学点东西而已:)

4#for循环:
在Shell中使用for循环可以按指定的次数执行一组指令,它的基本格式如下:
for var in word1 word2 word3 wordn
do
command
command
...
done
do和done中的命令为循环体,执行它们的次数由关键字"in"后边的单词来决定的。
看一个比较简单的列子
--------------for.sh-------------------
for name in lovehacker bigshrimp jonak jack shellbash ...
do
echo $name
echo $name >>cnsl.txt
    done
---------------cut here----------------

  好啦,好啦!估计你们也看烦了,那就结束这章吧,编程需要自己多动手,好在Shell编程很简单,你可以多找些好的例子看看,以后可以写自己的Exploits了。下一章我们开始进入正题Hacking Unix System。

如果你对Shell编程有兴趣的话,可以到以下链接,系统的学习一下:
http://xyqdy.533.net/shell.html (shell编程)
http://www.cniti.com/%7Etwoboy/unix/unix_shell/shell1.html (介绍shell编程)

1.侵入第一台UNIX主机
    在我开始接触Hacking的时候,多希望看到一篇简单、易懂的入侵教材,我想这也是每个初学者的愿望。不过其实当知识到达了一定程度后,看那些文章就觉得很简单了。因为这篇文章是写个初学者看的,我会尽量写的浅显易懂,希望对大家有所帮助。

    我们在前两章中已经对UNIX有个初步的了解,知道了一些命令的使用,一些UNIX文件的作用及对Shell编程有了个框架性的了解,不过这些都是UNIX系统内部的知识及概念,而我们如何侵入一台UNIX主机呢?在第一章我‘
们介绍了一些主流的UNIX系统,虽然它们都属于UNIX家族但每一个系统都有自己的特性,做为一个入侵者需要首先知道目标是那一种系统,并提供了那些对外的服务才能够开始进行攻击,这也就是大家经常谈到的信息收集。我还是
按照常规的方式来列出侵入一台UNIX主机的过程吧。
    
    1#确定目标:
    人必须要有自己奋斗的目标,Hacking也一样:)确定目标的方式是多种多样的,我们可以通过Search Engine来搜索出一些我们关心的信息,比如我现在需要一个电子信箱列表,我可以连上Search Engine输入关键字"邮件列表"会有很多的信息提供给我进行选择,选定后我们就可以开始进攻了。还有一个办法就是扫描自己所在的一个C类地址,发现主机并侵入它,因为连接它我的速度会很快:)

    2#信息收集:
    当我们确定了攻击对象后,要想顺利的侵入它必须对它有充分的了解,我们需要借助一些软件或操作系统本身提供的一些功能来收集系统的信息,并把收集到的信息反馈给大脑,想想该怎么对付它。
      1*端口扫描:
       端口扫描是必不可少的步骤了因为Internet上的主机都是通过开放的端口来提供服务的,如ftp(21)、telnet(23)、smtp(25)、finger(79)、http(80)、pop(110)、imap(143)等。我们要通过对端口的扫描来确定系统到底开放了那些服务,并初步的了解是那种操作系统、所提供的服务属于那个生产厂家,版本号是多少等等。我们可以通过Telnet Client去一个个的连接那些端口,看是否开放,不过我不推荐那么做。网上有非常多的端口扫描工具,你可以下载一个到自己的机器上,让它自动的帮你完成。你在"安盟CNSL"的安全工具中可以找到它。
      
      2*指纹校验:
       不要被这个陌生的单词吓倒,世界各地都充满了那些愿意取一些别人不容易看懂来显示自己水平的人:)而我为了继承惯例,也这么叫它:)其实指纹校验简单的说就是根据一些特性来猜测操作系统的类型,做的好的可以猜测出操作系统的版本号。下边来看我写的一个简单的程序片段,想必你就明白了:if((age>22)&&(age<25)&&(name=="David")&&(sex=="男")&&(oicqNum>1592130)&&(oicqNum<1592140))
{
就有可能是lovehacker:)
}
else if
  ...
else
...
呵呵,上边这个程序判断根据年龄、姓名、性别及oicq号码范围来猜测是不是lovehacker,其实也算是一种指纹校验:)很简单吧!指纹校验程序通过各种方法向目标发出数据,根据回应来判断操作系统类型及版本号码,最简单的例子是,我们telnet target 23它会给你一些提示信息如:SunOS 5.7,不用多说,它是SunOS版本号为5.7,还有的通过最简单的ping的方法来判断主机的类型:
ping 127.0.0.1
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128你是什么机器呢win2000,看看TTL的值是多少。
OK!ping目标
ping 172.16.1.6
Reply from 172.16.1.6: bytes=32 time<10ms TTL=255
它至少不是win2000:)
OK!在ping台SunOS 5.6试下:
ping ***.edu.cn
Reply from 202.***.**.*: bytes=32 time<10ms TTL=243
呵呵,有点接近哦!你有点明白了吗?
当然,其实我们不用那么麻烦的Internet的是开放的世界,有人已经帮我们做好了这一切,nmap不知道你是否听过,一个很不错的扫描工具,能大概的猜测出操作系统类型和版本号码,当然还有一些更强大的功能。你可以在"安盟cnsl"找到for NT版本的nmap。
     
      3*漏洞扫描:
       我们已经清楚了对方的操作系统及其开放的服务,下边要做的就是检测我们的目标存在那些漏洞可以让我们利用从而进入系统。我需要解释一下什么是漏洞,一般一个操作系统及运行在其上的服务都或多或少的存在一些漏洞,这些漏洞可能是安全问题被Hacker利用,也可能造成系统鼻可以自己去检测一下系统。在漏洞扫描过程中任何问题都没有发现的话,我最推荐的办法是先去看看它的WEB页面:)因为那上边有一些对我们有用的信息而且说不一定,一不小心就发现一个BUG呢:)浏览WEB我们能获取什么样的信息呢?一般一个网站都会留下自己的联系办法,如电话号码,电子邮件地址等,我们撇开欺骗技术不谈,光讲讲电子邮件地址对我们有什么样的作用。一个用户在UNIX系统中注册后,系统一般会为它生成一个电子邮件信箱,而这个信箱的地址大都是"用户名@主机名",例如:lovehacker@chinansl.com。lovehacker往往是unix有效的用户名,我们不妨去猜猜它的密码:)。当然猜密码这种工作也可以由软件把帮你完成的,那天我当了半天ftp密码破解工具当不下来,一怒之下自己写了个。呵呵,跑题了。还有呀同志,我们不妨到InterNIC去查查这个域名是注册给谁的,大家知道要在InterNIC注册域名是需要填写详细的用户信息的,指不定就可以看到一个用户名。如果上边的办法不行,难道我们就放弃了吗?不,决不!我们可以一个个的去查看它开放的服务及版本,然后到一个比较全面的漏洞库去查看相应的信息,当然我们欢迎你来http://www.chinansl.com 再次手工的进行一些检测,如果还是一无所获,我们只有等待...俗话说的好:不怕贼偷,就怕贼惦记着:)那天系统管理员一放松警惕,机会就来了,当然在这其中还有很多办法可以利用,如欺骗等等。不过那就涉及太远了,我也就不提及了。

    3#进入系统
      在第二章我已经讲过了Shell的一些概念及Shell编程的一些方法。当我们通过系统漏洞或密码的破解进入到系统后,就会有一个Shell供我们使用。(在登陆系统前最好先看看系统上是否有人)如果它开了finger服务的话:
c:>finger -l @target.com
no one logged in
没人,我们连上去吧!如果没有开finger,那最好在登录上去后敲个"w"指令看看系统上是否有人,如果有:(那你就赶紧闪吧,不过在闪之前最好先...等会儿讲:)
c:>telnet target.com
SunOS 5.7
login:abc
password:****
Last login: Wed Dec 27 10:36:37 from ***.**.**.*
Sun Microsystems Inc. SunOS 5.7 Generic October 1998
(如果你获得的不是root帐号的话,一般都是个$或%提示符,系统一般不允许root直接登陆)
$w
下午 3:02 运行 7 天 6:19, 3 users, 平均负荷: 0.00, 0.01, 0.01
用户名 终端号 登入时间 闲置 JCPU PCPU 执行命令
root console 0012月20 7天 10:46 7:11 /usr/dt/bin/dtscreen -mode worm
(MaMa呀,root在上边,闪)
$telnet localhost
SunOS 5.7
login:abc
password:****
Last login: Wed Dec 27 10:36:37 from ***.***.**.*(我的ip)
Sun Microsystems Inc. SunOS 5.7 Generic October 1998
$exit
$exit
(退出了系统,伺机在上。)
为什么我要telnet localhost呢?因为我第一次登录系统,系统已经记录下了我的ip地址,并会在用户下次登陆的时候显示出来。所以我telnet localhost呵呵,下次用户上来显示的将是from localhost。粗心的用户就不会怀疑什么了。好,下边再讲如果没有人,我该干什么?答案很简单:获得系统最高权限,并保持住它。我们会在下一章中讲解。
Tags: ,
Technology | Comments(0) | Trackbacks(0) | Reads(6393)
Add a comment
Emots
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Enable HTML
Enable UBB
Enable Emots
Hidden
Nickname   Password   Optional
Site URI   Email   [Register]
               

Security code Case insensitive