0x0 — введение
0x1 — разбираем 🙂
0x2 — знакомимся с программной частью
Уже 2-е января! Такими темпами, скоро все новогодние каникулы пронесутся 🙂
Чтож, раз Вы снова здесь, значит, готовы продолжить изучение своего подопытного устройства.
В моём случае — в роли испытуемого всё тот же ADSL-модем:
ZTE ZXDSL831AII (подобен D-link DSL-2500U)
Вчера, мы уже разобрали модем и обнаружили, что, фактически — это настоящий одноплатный компьютер с процессором Broadcom BCM6338 (частотой 240 Mhz и архитектурой MIPS), 8-ю Мегабайтами оперативной памяти и 2-мя Мегабайтами Flash-памяти.
Настала пора познакомиться с программной начинкой испытуемого.
У данного модема есть два варианта подключения к компьютеру:
через USB-кабель или через патчкорд к сетевой карте компьютера (на самом деле — есть ещё третий вариант — с использованием обнаруженного вчера на плате последовательного интерфейса, но об этом позднее).
С USB-подключением у меня что-то не заладилось и я остановился на Ethernet-овском подключении патч-кордом, соединив сетевую карточку своего ноутбука и ADSL-модем.
Настраиваем сетевое соединение.
Я прописал себе:
IP-адрес: 192.168.1.4
маска: 255.255.255.0
Если модем, у которого должен быть IP-адрес: 192.168.1.1 не пингуется, то, возможно, у него стоят какие-то другие настройки и их нужно сбросить на дефолтные.
Для этого нужно:
при включённом питании зажать кнопку Reset и подержать секунд 20-30. Затем отпустить и пробовать снова 🙂
ping пошёл 🙂
подключился к модему в браузере по адресу:
http://192.168.1.1
модем спросил пароль и удивительным образом подошёл:
admin
с паролем:
admin
🙂
здесь вызывает интерес только версия прошивки:
ZXDSL 831AIIV1.1.1a_D09_RU
и возможность сохранить конфигурационный файл
backupsettings.conf, представляющий собой xml-ку.
Итак, теперь пробуем просканировать порты девайса.
для этого используем сетевой сканер nmap:
c:\utils\nmap>nmap.exe -v 192.168.1.1 Starting Nmap 4.20 ( http://insecure.org ) at 2011-01-02 16:06 Московское время (зима) Initiating ARP Ping Scan at 01:06 Scanning 192.168.1.1 [1 port] Completed ARP Ping Scan at 01:06, 0.23s elapsed (1 total hosts) Initiating SYN Stealth Scan at 01:06 Scanning 192.168.1.1 [1697 ports] Discovered open port 80/tcp on 192.168.1.1 Discovered open port 21/tcp on 192.168.1.1 Discovered open port 23/tcp on 192.168.1.1 Completed SYN Stealth Scan at 01:06, 0.39s elapsed (1697 total ports) Host 192.168.1.1 appears to be up ... good. Interesting ports on 192.168.1.1: Not shown: 1694 closed ports PORT STATE SERVICE 21/tcp open ftp 23/tcp open telnet 80/tcp open http MAC Address: 00:D0:D0:86:86:B5 (Zhongxing Telecom) Nmap finished: 1 IP address (1 host up) scanned in 0.750 seconds Raw packets sent: 1698 (74.710KB) | Rcvd: 1698 (78.104KB)
Отлично, как и ожидалось, кроме 80 порта, отвечающего за web-интерфейс, открыт и 23-й — telnet, а в добавок и 21-й — ftp-ник 🙂
пробуем подключиться к телнету.
Для подключения воспользуюсь замечательной терминальной программой teraterm:
======================= Welcome to ZXDSL 831AII ======================= Login: admin Password: > > ? ? help logout reboot adsl atm brctl cat df dumpcfg echo ifconfig kill arp defaultgateway dhcpserver dns lan passwd ppp remoteaccess restoredefault route save swversion wan ping ps pwd sntp sysinfo tftp
это список доступных команд оболочки. Начинаем собирать информацию:
> sysinfo Number of processes: 23 12:17am up 17 min, load average: 1 min:0.00, 5 min:0.03, 15 min:0.03 total used free shared buffers Mem: 6068 5680 388 0 224 Swap: 0 0 0 Total: 6068 5680 388 > swversion show ZXDSL 831AIIV1.1.1a_D09_RU
ага, есть команда ps (process status) — которая должна показывать список запущенных процессов
> ps PID Uid VmSize Stat Command 1 admin 240 S init 2 admin SWN [ksoftirqd/0] 3 admin SW< [events/0] 4 admin SW< [khelper] 5 admin SW< [kblockd/0] 6 admin SW [pdflush] 7 admin SW [pdflush] 8 admin SW [kswapd0] 9 admin SW< [aio/0] 10 admin SW [mtdblockd] 16 admin 132 S /bin/pollreset 18 admin 284 S -sh 37 admin 628 S cfm 75 admin 188 S pvc2684d 286 admin 224 S klogd 288 admin 264 S syslogd -C -l 7 292 admin 632 R telnetd 296 admin 200 S bftpd 300 admin 872 S httpd 304 admin 184 S tftpd 1295 admin 648 R telnetd 1298 admin 256 R sh -c ps 1299 admin 244 R ps
сработало 🙂
видим, что висит шелл sh, демоны телнета, фтп и веба:
telnetd, tftpd, httpd
а ещё похоже, что эта оболочка просто перенаправляет некоторые команды шеллу sh
попробуем его запустить 🙂
> sh BusyBox v1.00 (2005.12.26-01:55+0000) Built-in shell (msh) Enter 'help' for a list of built-in commands. #
ну ваще красота 🙂 BusyBox - очень распространённая утилита для встраиваемых систем (заменяет собой набор стандартных UNIX-вых утилит)
в данном случае - довольно урезаный вариант - нет даже команды вывода содержимого каталога - ls
но есть небольшой трюк, как это можно обойти - попробуйте вызвать echo *
# echo * bin dev etc lib linuxrc mnt proc sbin usr var webs
мало-мало работает 🙂
# busybox BusyBox v1.00 (2005.12.26-01:55+0000) multi-call binary Usage: busybox [function] [arguments]... or: [function] [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use, and BusyBox will act like whatever it was invoked as. Currently defined functions: [, busybox, cat, df, dmesg, echo, expr, false, ifconfig, init, insmod, kill, klogd, linuxrc, logger, logread, mkdir, mount, msh, ping, ps, pwd, reboot, rm, rmmod, route, sendarp, sh, sysinfo, syslogd, test, tftp, tftpd, true, tty, vconfig
узнаем текущее местонахождение
# pwd / #
попробуем просмотреть информацию о системе
# cat /proc/ cat: Read error: Is a directory #
угу - директория есть, а теперь посмотрим файлы
узнаём версию ядра
# cat /proc/version Linux version 2.6.8.1 ([email protected]) (gcc version 3.4.2) #15 Mon F eb 13 15:40:53 CST 2006
далее, получаем информации об архитектуре:
# cat /proc/cpuinfo system type : 96338L-2M-8M processor : 0 cpu model : BCM6338 V1.0 BogoMIPS : 238.38 wait instruction : no microsecond timers : yes tlb_entries : 32 extra interrupt vector : yes hardware watchpoint : no VCED exceptions : not available VCEI exceptions : not available
воот он наш героический процессор 🙂
посмотрим информацию о памяти:
# cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / squashfs ro 0 0 /proc /proc proc rw,nodiratime 0 0 tmpfs /var tmpfs rw 0 0 # cat /proc/mtd dev: size erasesize name mtd0: 00150000 00010000 "Physically mapped flash" # cat /proc/meminfo MemTotal: 6068 kB MemFree: 468 kB Buffers: 212 kB Cached: 1680 kB SwapCached: 0 kB Active: 1860 kB Inactive: 840 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 6068 kB LowFree: 468 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB Mapped: 1692 kB Slab: 1996 kB Committed_AS: 2888 kB PageTables: 240 kB VmallocTotal: 1048560 kB VmallocUsed: 308 kB VmallocChunk: 1048092 kB
как видим, доступны всего 6 мегабайт памяти из которых свободно всего 468 килобайт - негусто 🙂
список загруженных модулей ядра:
# cat /proc/modules bcm_usb 15792 0 - Live 0xc001c000 bcm_enet 18224 0 - Live 0xc0031000 bcmprocfs 13360 0 - Live 0xc000f000 adsldd 112992 0 - Live 0xc0058000 blaadd 5808 0 - Live 0xc000c000 atmapi 56880 2 adsldd,blaadd, Live 0xc0022000
- имя модуля, размер в байтах, количество модулей и кто использует.
Выгрузить ненужные модули можно с помощью утилиты rmmod из оболочки BusyBox
системный профайл:
# cat /etc/profile # /etc/profile: system-wide .profile file for the Bourne shells PATH=/bin:/sbin:/usr/bin KERNELVER=2.6.8.1 export PATH echo firsttime=`echo /var/udhcpd/udhcpd.lease*` if [ "$firsttime" = "/var/udhcpd/udhcpd.lease*" ]; then echo "Loading drivers and kernel modules... " echo # no-op # create directory in /var mounted for TMPFS mkdir -p /var/log /var/run /var/state/dhcp /var/ppp /var/udhcpd /var/zebra /var /siproxd echo > /var/udhcpd/udhcpd.leases ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255 up # /etc/modules_install /lib/modules/$KERNELVER/extra insmod /lib/modules/$KERNELVER/extra/atmapi.ko insmod /lib/modules/$KERNELVER/extra/blaadd.ko insmod /lib/modules/$KERNELVER/extra/adsldd.ko insmod /lib/modules/$KERNELVER/extra/bcmprocfs.ko insmod /lib/modules/$KERNELVER/extra/bcm_enet.ko test -e /lib/modules/$KERNELVER/extra/bcm_usb.ko && insmod /lib/modules/$KERNEL VER/extra/bcm_usb.ko test -e /lib/modules/$KERNELVER/extra/wl.ko && insmod /lib/modules/$KERNELVER/e xtra/wl.ko test -e /lib/modules/$KERNELVER/extra/endpointdd.ko && insmod /lib/modules/$KER NELVER/extra/endpointdd.ko cfm echo "Done" fi
ну, блин, круто - реально скрипт для Bourne shell :))
Отображение символьных и блочных устройств, распознанных ядром:
# cat /proc/devices Character devices: 1 mem 2 pty 3 ttyp 4 ttyS 5 /dev/tty 5 /dev/console 10 misc 108 ppp 205 atmapi 206 bcrmboard 208 adsl 212 bcm Block devices: 31 mtdblock
попробуем вывести сообщение в консоль
# echo 1 > /dev/tty 1 #
получилось :))
Информация о прерываниях IRQ:
# cat /proc/interrupts CPU0 7: 424900 MIPS timer 10: 0 MIPS brcm_10 12: 0 MIPS brcm_12 13: 8660 MIPS brcm_13 14: 0 MIPS brcm_14 15: 0 MIPS brcm_15 17: 0 MIPS brcm_17 19: 0 MIPS brcm_19 21: 0 MIPS brcm_21 23: 2827 MIPS brcm_23 ERR: 0
Информация о средней загруженности процессора:
# cat /proc/loadavg 0.00 0.00 0.00 3/24 1345
Утилита disk free - df показывает сколько свободного места на диске, вернее его отсутствие:
# df Filesystem 1k-blocks Used Available Use% Mounted on /dev/mtdblock0 1344 1344 0 100% / tmpfs 192 64 128 33% /var
Все файловые системы, которые поддерживает ядро:
# cat /proc/filesystems nodev rootfs nodev bdev nodev proc nodev sockfs nodev tmpfs nodev pipefs squashfs nodev ramfs
Просмотр всех разделов в системе, которые распознало ядро:
# cat /proc/partitions major minor #blocks name 31 0 1344 mtdblock0
Список пользователей в системе:
# cat /etc/passwd admin:cNM8IkEtZnE92:0:0:Administrator:/:/bin/sh support:CLPPm8g3IYhuU:0:0:Technical Support:/:/bin/sh user:byfQH3.mjtDDc:0:0:Normal User:/:/bin/sh nobody:RM4.EMXm4X0.g:0:0:nobody for ftp:/:/bin/sh
Список групп пользователей:
# cat /etc/group root::0:root,admin,support,user
кажется почти всё 🙂 не знаю как Вас, а мне это нравится 🙂 стоит махонькая коробочка - тихонько себе работает или валяется в коробке, а в ней-то живёт пингвинёнок Linux 🙂
кррасота 🙂
/dev/random отыскать не удалось 🙂
# cat /dev/random cat: /dev/random: No such file or directory
а вот /dev/null уже есть :))
# cat /dev/null
и /dev/zero есть (выход по Ctrl-C 😉
# cat /dev/zero
попробуем пингануть свой ПК:
# ping 192.168.1.4 PING 192.168.1.4 (192.168.1.4): 56 data bytes 56 bytes from 192.168.1.4: icmp_seq=0 ttl=128 time=5.0 ms 56 bytes from 192.168.1.4: icmp_seq=1 ttl=128 time=0.0 ms 56 bytes from 192.168.1.4: icmp_seq=2 ttl=128 time=0.0 ms --- 192.168.1.4 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.0/1.6/5.0 ms
посмотрим сетевые настройки
# ifconfig br0 Link encap:Ethernet HWaddr 00:D0:D0:86:86:B5 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10187 errors:0 dropped:0 overruns:0 frame:0 TX packets:11629 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:597888 (583.8 KiB) TX bytes:5710147 (5.4 MiB) br1 Link encap:Ethernet HWaddr 00:D0:D0:86:86:B6 inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255 .0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth0 Link encap:Ethernet HWaddr 00:D0:D0:86:86:B5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10187 errors:0 dropped:0 overruns:0 frame:0 TX packets:11629 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:781254 (762.9 KiB) TX bytes:5793952 (5.5 MiB) Interrupt:23 Base address:0x2800 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) nas_1_50 Link encap:Ethernet HWaddr 00:D0:D0:86:86:B8 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:11 errors:0 dropped:11 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:1052 (1.0 KiB) nas_1_91 Link encap:Ethernet HWaddr 00:D0:D0:86:86:B9 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:367 errors:0 dropped:367 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:44644 (43.5 KiB) nas_1_92 Link encap:Ethernet HWaddr 00:D0:D0:86:86:BA UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:367 errors:0 dropped:367 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:44926 (43.8 KiB) # logread Jan 1 00:44:41 (none) syslog.emerg BCM96345 started: BusyBox v1.00 (2005.12.26 -01:55+0000) 98 Jan 1 00:44:41 (none) user.debug syslog: klogd & 55 Jan 1 00:44:41 (none) user.notice kernel: klogd started: BusyBox v1.00 (2005.12 .26-01:55+0000) 101 Jan 1 00:44:41 (none) user.debug syslog: ebtables -P FORWARD ACCEPT 74 Jan 1 00:44:42 (none) user.debug syslog: bftpd 53 Jan 1 00:44:42 (none) user.debug syslog: bftpd 53 Jan 1 00:44:43 (none) user.debug syslog: tftpd 53 Jan 1 00:44:44 (none) user.debug syslog: tftpd 53
создать директорию естественно не получается 🙂
# mkdir 1
mkdir: Cannot create directory `1': Read-only file system
хм... а что если выгрузить какой-нибудь модуль?
# rmmod adsldd
и сразу же отвалился от модема 🙂 перезагружаем модем 🙂
Попробуем залить другую прошивку в модем
я отыскал вот такую версию:
ZXDSL_831AIIV4.1.0a_E09_RU.zip
опять подключаемся через telnet:
> tftp BusyBox v1.00 (2005.12.26-01:55+0000) multi-call binary Usage: tftp [OPTION]... tftp_server_ip Update firmware image and configuration data from OR backup configuration data to a tftp server. Options: -g Get file. (Update image/configuration data) -p Put file. (backup configuration data) -f remote file name. -t i for image and c for configuration data.
запустим на ПК tftp-сервер (Tftpd32), положим в его директорию файл прошивки под названием
zxdsl.bin
TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется, главным образом, для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.
Основное назначение TFTP — обеспечение простоты реализации клиента. В этой связи, он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС и аппаратных маршрутизаторов/файрволов.Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан).
Tftpd32 - сервер TFTP с открытным исходным кодом для Windows
выполним на модеме команду загрузки файла прошивки с нашего сервера
> tftp -g 192.168.1.4 -f zxdsl.bin -ti kill process [pid: 296] [name: bftpd]... kill process [pid: 320] [name: bftpd]... kill process [pid: 304] [name: tftpd]... kill process [pid: 286] [name: klogd]... kill process [pid: 288] [name: syslogd]... iptables v1.2.11: can't initialize iptables table `nat': iptables who? (do you n eed to insmod?) Perhaps iptables or your kernel needs to be upgraded. Remaining modules: bcm_usb 15792 0 - Live 0xc001c000 bcm_enet 18224 0 - Live 0xc0031000 bcmprocfs 13360 0 - Live 0xc000f000 adsldd 112992 0 - Live 0xc0058000 blaadd 5808 0 - Live 0xc000c000 atmapi 56880 2 adsldd,blaadd, Live 0xc0022000 Memory info: Number of processes: 25 12:09am up 9 min, load average: 1 min:0.00, 5 min:0.00, 15 min:0.00 total used free shared buffers Mem: 6068 5060 1008 0 244 Swap: 0 0 0 Total: 6068 5060 1008 Done removing processes Allocating 1889030 bytes for broadcom image. Memory allocated Total image size: 1889022 Broadcom format verified. Tftp image done. Flashing CFE... Flashing root file system and kernel...
как видим, прошивка сразу прошивается и модем перезагружается.
Снова подключаемся по телнету и нас уже встречает другое приглашение:
=========================== Welcome to ZXDSL 831AII =========================== ZTE Inc., Software Release ZXDSL 831AIIV4.1.0a_E09_RU Login name: admin Password: >
перейдём в BusyBox и посмотрим что изменилось
> sh BusyBox v1.00 (2008.01.31-12:18+0000) Built-in shell (msh) Enter 'help' for a list of built-in commands.
ядро
# cat /proc/version Linux version 2.6.8.1 (root@Mr-zhang) (gcc version 3.4.2) #1 Thu Jan 31 20:16:30 CST 2008 # cat /proc/cpuinfo system type : 96338L-2M-8M processor : 0 cpu model : BCM6338 V1.0 BogoMIPS : 239.20 wait instruction : no microsecond timers : yes tlb_entries : 32 extra interrupt vector : yes hardware watchpoint : no unaligned access : 10357 VCED exceptions : not available VCEI exceptions : not available # df Filesystem 1k-blocks Used Available Use% Mounted on /dev/mtdblock0 1280 1280 0 100% / tmpfs 320 72 248 23% /var # cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / squashfs ro 0 0 /proc /proc proc rw,nodiratime 0 0 tmpfs /var tmpfs rw 0 0 # cat /proc/meminfo MemTotal: 5888 kB MemFree: 452 kB Buffers: 264 kB Cached: 1556 kB SwapCached: 0 kB Active: 1784 kB Inactive: 744 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 5888 kB LowFree: 452 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB Mapped: 1672 kB Slab: 1948 kB Committed_AS: 2716 kB PageTables: 208 kB VmallocTotal: 1048560 kB VmallocUsed: 784 kB VmallocChunk: 1047748 kB # busybox BusyBox v1.00 (2008.01.31-12:18+0000) multi-call binary Usage: busybox [function] [arguments]... or: [function] [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use, and BusyBox will act like whatever it was invoked as. Currently defined functions: [, busybox, cat, chmod, date, df, dmesg, echo, expr, false, ftpget, ifconfig, init, insmod, kill, klogd, linuxrc, ln, logger, logread, ls, mkdir, mount, msh, ping, ps, pwd, reboot, rm, rmmod, route, sendarp, sh, sysinfo, syslogd, test, tftp, tftpd, true, tty, vconfig
сам чуть не пропустил 🙂 в busybox-то появилась утилита для просмотра директорий ls!
# pwd / # ls -l drwxrwxrwt 12 0 0 440 var dr-xr-xr-x 33 0 0 0 proc drwxr-xr-x 1 0 0 0 mnt drwxr-xr-x 1 0 0 468 dev drwxr-xr-x 1 0 0 2094 webs drwxr-xr-x 1 0 0 10 usr drwxr-xr-x 1 0 0 103 sbin lrwxrwxrwx 1 0 0 11 linuxrc -> bin/busybox drwxr-xr-x 1 0 0 126 lib drwxr-xr-x 1 0 0 366 bin drwxr-xr-x 1 0 0 281 etc # cd sbin # ls -l lrwxrwxrwx 1 0 0 14 vconfig -> ../bin/busybox lrwxrwxrwx 1 0 0 14 syslogd -> ../bin/busybox lrwxrwxrwx 1 0 0 14 route -> ../bin/busybox lrwxrwxrwx 1 0 0 14 rmmod -> ../bin/busybox lrwxrwxrwx 1 0 0 14 reboot -> ../bin/busybox lrwxrwxrwx 1 0 0 14 logread -> ../bin/busybox lrwxrwxrwx 1 0 0 14 klogd -> ../bin/busybox lrwxrwxrwx 1 0 0 14 insmod -> ../bin/busybox lrwxrwxrwx 1 0 0 14 init -> ../bin/busybox lrwxrwxrwx 1 0 0 14 ifconfig -> ../bin/busybox lrwxrwxrwx 1 0 0 13 ethctl -> ../bin/ethctl
посмотрим, какие библиотеки есть в системе:
# cd /lib # ls -l drwxr-xr-x 1 0 0 14 modules -rwxr-xr-x 1 0 0 20999 ld-uClibc.so.0 -rwxr-xr-x 1 0 0 725 libutil.so.0 -rwxr-xr-x 1 0 0 7016 libm.so.0 -rwxr-xr-x 1 0 0 7272 libdl.so.0 -rwxr-xr-x 1 0 0 186772 libc.so.0 -rwxr-xr-x 1 0 0 10548 libcrypt.so.0 -rwxr-xr-x 1 0 0 140624 libpsixml.so -rwxr-xr-x 1 0 0 190640 libpsi.so
видим uClibc - замена стандартной библиотеки, специально для встраиваемых систем.
# cd etc # ls -l lrwxrwxrwx 1 0 0 18 psk.txt -> /var/ipsec/psk.txt lrwxrwxrwx 1 0 0 22 racoon.conf -> /var/ipsec/racoon.conf lrwxrwxrwx 1 0 0 21 ipsec.conf -> /var/ipsec/ipsec.conf lrwxrwxrwx 1 0 0 25 udhcpd.leases -> /var/udhcpd/udhcpd.l eases lrwxrwxrwx 1 0 0 23 udhcpd.conf -> /var/udhcpd/udhcpd.con f lrwxrwxrwx 1 0 0 20 gateway.conf -> /var/fyi/sys/gateway lrwxrwxrwx 1 0 0 16 resolv.conf -> /var/fyi/sys/dns lrwxrwxrwx 1 0 0 15 pppmsg -> /var/ppp/pppmsg lrwxrwxrwx 1 0 0 10 group -> /var/group lrwxrwxrwx 1 0 0 11 passwd -> /var/passwd lrwxrwxrwx 1 0 0 11 sysmsg -> /var/sysmsg -rwxr--r-- 1 0 0 1770 defaultpvc -rwxr-xr-x 1 0 0 4834 default.cfg drwxr-xr-x 1 0 0 19 adsl -rw-r--r-- 1 0 0 1317 ethertypes -rwxr-xr-x 1 0 0 180 modules_install -rwxr-xr-x 1 0 0 101 inittab -rwxr-xr-x 1 0 0 486 inetd.conf -rwxr-xr-x 1 0 0 5647 services -rwxr-xr-x 1 0 0 1942 profile -rwxr-xr-x 1 0 0 94 fstab drwxr-xr-x 1 0 0 19 dhcp drwxr-xr-x 1 0 0 0 snmp drwxr-xr-x 1 0 0 10 init.d drwxr-xr-x 1 0 0 61 ppp # cat inittab ::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r
посмотрим скрипт инициализации 🙂
# cd init.d # ls -l -rwxr-xr-x 1 0 0 92 rcS # cat rcS #! /bin/sh PATH=/sbin:/bin export PATH mount -t proc proc /proc /bin/mount -a # cat inetd.conf echo stream tcp nowait root internal echo dgram udp wait root internal discard stream tcp nowait root internal discard dgram udp wait root internal daytime stream tcp nowait root internal daytime dgram udp wait root internal chargen stream tcp nowait root internal chargen dgram udp wait root internal time stream tcp nowait root internal time dgram udp wait root internal ftp stream tcp nowait root /bin/ftpd ftpd telnet stream tcp nowait root /bin/telnetd telnetd -L /bin/login # cd proc # ls -l dr-xr-xr-x 3 0 0 0 877 dr-xr-xr-x 3 0 0 0 839 dr-xr-xr-x 3 0 0 0 838 dr-xr-xr-x 3 0 0 0 837 dr-xr-xr-x 3 0 0 0 836 dr-xr-xr-x 3 0 0 0 434 dr-xr-xr-x 3 0 0 0 419 dr-xr-xr-x 3 0 0 0 415 dr-xr-xr-x 3 0 0 0 201 dr-xr-xr-x 3 0 0 0 43 dr-xr-xr-x 3 0 0 0 17 dr-xr-xr-x 3 0 0 0 10 dr-xr-xr-x 3 0 0 0 9 dr-xr-xr-x 3 0 0 0 8 dr-xr-xr-x 3 0 0 0 7 dr-xr-xr-x 3 0 0 0 6 dr-xr-xr-x 3 0 0 0 5 dr-xr-xr-x 3 0 0 0 4 dr-xr-xr-x 3 0 0 0 3 dr-xr-xr-x 3 0 0 0 2 dr-xr-xr-x 3 0 0 0 1 lrwxrwxrwx 1 0 0 64 self -> 877 -r--r--r-- 1 0 0 0 loadavg -r--r--r-- 1 0 0 0 uptime -r--r--r-- 1 0 0 0 meminfo -r--r--r-- 1 0 0 0 version -r--r--r-- 1 0 0 0 devices -r--r--r-- 1 0 0 0 filesystems -r--r--r-- 1 0 0 0 cmdline -r--r--r-- 1 0 0 0 locks -r--r--r-- 1 0 0 0 execdomains lrwxrwxrwx 1 0 0 11 mounts -> self/mounts -r-------- 1 0 0 0 kmsg -r--r--r-- 1 0 0 0 cpuinfo -r--r--r-- 1 0 0 0 partitions -r--r--r-- 1 0 0 0 stat -r--r--r-- 1 0 0 0 interrupts -rw-r--r-- 1 0 0 0 slabinfo -r--r--r-- 1 0 0 0 buddyinfo -r--r--r-- 1 0 0 0 vmstat -r--r--r-- 1 0 0 0 diskstats -r--r--r-- 1 0 0 0 modules -r-------- 1 0 0 7999488 kcore dr-xr-xr-x 4 0 0 0 net dr-xr-xr-x 2 0 0 0 sysvipc dr-xr-xr-x 10 0 0 0 sys dr-xr-xr-x 3 0 0 0 fs dr-xr-xr-x 2 0 0 0 driver dr-xr-xr-x 4 0 0 0 tty dr-xr-xr-x 2 0 0 0 bus dr-xr-xr-x 130 0 0 0 irq -r--r--r-- 1 0 0 0 misc -r--r--r-- 1 0 0 0 ioports -r--r--r-- 1 0 0 0 iomem -r--r--r-- 1 0 0 0 mtd dr-xr-xr-x 2 0 0 0 nvram dr-xr-xr-x 3 0 0 0 var # cat iomem 00000000-0079ffff : System RAM 00010000-0017790b : Kernel code 0017790c-001ab0bf : Kernel data # cat /proc/devices Character devices: 1 mem 2 pty 3 ttyp 4 ttyS 5 /dev/tty 5 /dev/console 10 misc 108 ppp 205 atmapi 206 bcrmboard 208 adsl 212 bcm Block devices: 31 mtdblock # cat /proc/cmdline root=31:0 ro noinitrd console=ttyS0,115200 # cat /proc/tty/drivers /dev/tty /dev/tty 5 0 system:/dev/tty /dev/console /dev/console 5 1 system:console bcmserial /dev/ttyS 4 64 serial pty_slave /dev/ttyp 3 0-1 pty:slave pty_master /dev/pty 2 0-1 pty:master # cat /proc/tty/driver/bcmserial serinfo:1.0 driver revision: 0: uart:BCM63XX mmio:0xFFFE0300 irq:10 tx:40602 rx:662 RTS|DTR # cat /proc/modules ipt_state 544 1 - Live 0xc00c9000 ipt_multiport 672 0 - Live 0xc00c7000 ipt_mark 416 0 - Live 0xc00c5000 ipt_limit 896 0 - Live 0xc00c3000 ipt_connlimit 1696 0 - Live 0xc00c1000 ipt_TCPMSS 2304 0 - Live 0xc00ba000 ipt_REDIRECT 768 0 - Live 0xc00bc000 ipt_MASQUERADE 3280 0 - Live 0xc007f000 ipt_MARK 704 0 - Live 0xc00b8000 ipt_FTOS 992 0 - Live 0xc0081000 ip_nat_rtsp 4816 0 - Live 0xc00b5000 ip_nat_irc 2304 0 - Live 0xc00b3000 ip_nat_ftp 2976 0 - Live 0xc005d000 ip_conntrack_irc 68896 1 ip_nat_irc, Live 0xc00a1000 ip_conntrack_ftp 20608 1 ip_nat_ftp, Live 0xc009a000 ipt_RDNS 1152 1 - Live 0xc007d000 ipt_dns 640 1 - Live 0xc005f000 ip_nat_ipsec 46720 0 - Live 0xc008d000 ip_conntrack_ipsec 30640 0 - Live 0xc0074000 ip_nat_h323 5056 0 - Live 0xc0044000 ip_conntrack_h323 35280 1 ip_nat_h323, Live 0xc0083000 ip_conntrack_rtsp 73024 1 ip_nat_rtsp, Live 0xc0061000 ip_nat_pptp 2048 0 - Live 0xc005b000 ip_conntrack_pptp 3312 0 - Live 0xc0059000 ip_nat_gre 1280 0 - Live 0xc0057000 ip_conntrack_gre 2064 2 ip_nat_pptp,ip_conntrack_pptp, Live 0xc0055000 iptable_mangle 960 1 - Live 0xc0042000 iptable_nat 15632 10 ipt_REDIRECT,ipt_MASQUERADE,ip_nat_rtsp,ip_nat_irc,ip_nat_f tp,ip_nat_ipsec,ip_nat_h323,ip_nat_pptp,ip_nat_gre, Live 0xc0050000 ip_conntrack 29984 18 ipt_state,ipt_connlimit,ipt_REDIRECT,ipt_MASQUERADE,ip_nat _rtsp,ip_nat_irc,ip_nat_ftp,ip_conntrack_irc,ip_conntrack_ftp,ip_nat_ipsec,ip_co nntrack_ipsec,ip_nat_h323,ip_conntrack_h323,ip_conntrack_rtsp,ip_nat_pptp,ip_con ntrack_pptp,ip_conntrack_gre,iptable_nat, Live 0xc0047000 iptable_filter 928 1 - Live 0xc0037000 ip_tables 14144 15 ipt_state,ipt_multiport,ipt_mark,ipt_limit,ipt_connlimit,ipt_ TCPMSS,ipt_REDIRECT,ipt_MASQUERADE,ipt_MARK,ipt_FTOS,ipt_RDNS,ipt_dns,iptable_ma ngle,iptable_nat,iptable_filter, Live 0xc0026000 bcm_usb 15984 0 - Live 0xc0008000 bcm_enet 25312 0 - Live 0xc002c000 br2684 66016 0 - Live 0xc000e000 # cd dev # ls -l brw-r----- 1 0 0 8, 18 sdb2 brw-r----- 1 0 0 8, 17 sdb1 brw-r----- 1 0 0 8, 16 sdb0 brw-r----- 1 0 0 8, 2 sda2 brw-r----- 1 0 0 8, 1 sda1 brw-r----- 1 0 0 8, 0 sda0 brw-r----- 1 0 0 31, 7 mtdblock7 brw-r----- 1 0 0 31, 6 mtdblock6 brw-r----- 1 0 0 31, 5 mtdblock5 brw-r----- 1 0 0 31, 4 mtdblock4 brw-r----- 1 0 0 31, 3 mtdblock3 brw-r----- 1 0 0 31, 2 mtdblock2 brw-r----- 1 0 0 31, 1 mtdblock1 brw-r----- 1 0 0 31, 0 mtdblock0 brw-r----- 1 0 0 1, 3 ram3 brw-r----- 1 0 0 1, 2 ram2 brw-r----- 1 0 0 1, 1 ram1 brw-r----- 1 0 0 1, 0 ram0 crw-r----- 1 0 0 226, 0 bcmatmb0 crw-r----- 1 0 0 225, 0 si3215 crw-r----- 1 0 0 224, 0 bcmprof crw-r----- 1 0 0 223, 0 slac crw-r----- 1 0 0 222, 0 ac97 crw-r----- 1 0 0 212, 0 bcm crw-r----- 1 0 0 211, 0 bcmles0 crw-r----- 1 0 0 210, 0 bcmaal20 crw-r----- 1 0 0 209, 0 bcmendpoint0 crw-r----- 1 0 0 208, 0 bcmadsl0 crw-r----- 1 0 0 207, 0 bcmvdsl0 crw-r----- 1 0 0 206, 0 brcmboard crw-r----- 1 0 0 205, 0 bcmatm0 crw-r----- 1 0 0 1, 9 urandom crw-r----- 1 0 0 180, 0 printer0 crw-r----- 1 0 0 108, 0 ppp crw-r----- 1 0 0 5, 2 ptmx crw-r----- 1 0 0 5, 1 console crw-r----- 1 0 0 5, 0 tty crw-r----- 1 0 0 4, 65 ttyS1 crw-r----- 1 0 0 4, 64 ttyS0 crw-r----- 1 0 0 4, 1 tty1 crw-r----- 1 0 0 4, 0 tty0 crw-r----- 1 0 0 3, 1 ttyp1 crw-r----- 1 0 0 3, 0 ttyp0 crw-r----- 1 0 0 2, 1 ptyp1 crw-r----- 1 0 0 2, 0 ptyp0 crw-r----- 1 0 0 1, 5 zero crw-r----- 1 0 0 1, 4 port crw-r----- 1 0 0 1, 3 null crw-r----- 1 0 0 1, 2 kmem crw-r----- 1 0 0 1, 1 mem prw-r----- 1 0 0 0 initctl lrwxrwxrwx 1 0 0 12 log -> /var/log/log lrwxrwxrwx 1 0 0 4 ram -> ram1
ух ты! urandom появился! :)))
# cd /bin # ls -l lrwxrwxrwx 1 0 0 7 true -> busybox lrwxrwxrwx 1 0 0 7 tftpd -> busybox lrwxrwxrwx 1 0 0 7 sysinfo -> busybox lrwxrwxrwx 1 0 0 7 sh -> busybox lrwxrwxrwx 1 0 0 7 sendarp -> busybox lrwxrwxrwx 1 0 0 7 rm -> busybox lrwxrwxrwx 1 0 0 7 pwd -> busybox lrwxrwxrwx 1 0 0 7 ps -> busybox lrwxrwxrwx 1 0 0 7 ping -> busybox lrwxrwxrwx 1 0 0 7 msh -> busybox lrwxrwxrwx 1 0 0 7 mount -> busybox lrwxrwxrwx 1 0 0 7 mkdir -> busybox lrwxrwxrwx 1 0 0 7 ls -> busybox lrwxrwxrwx 1 0 0 7 ln -> busybox lrwxrwxrwx 1 0 0 7 kill -> busybox lrwxrwxrwx 1 0 0 7 false -> busybox lrwxrwxrwx 1 0 0 7 echo -> busybox lrwxrwxrwx 1 0 0 7 dmesg -> busybox lrwxrwxrwx 1 0 0 7 df -> busybox lrwxrwxrwx 1 0 0 7 date -> busybox lrwxrwxrwx 1 0 0 7 chmod -> busybox lrwxrwxrwx 1 0 0 7 cat -> busybox -rwxr-xr-x 1 0 0 204016 busybox -rwxr-xr-x 1 0 0 59776 ebtables -rwxr-xr-x 1 0 0 91204 iptables lrwxrwxrwx 1 0 0 6 dhcpd -> udhcpd lrwxrwxrwx 1 0 0 6 dhcpc -> udhcpd -rwxr-xr-x 1 0 0 48644 udhcpd -rwxr-xr-x 1 0 0 198904 pppd -rwxr-xr-x 1 0 0 29416 brctl -rwxr-xr-x 1 0 0 20836 pvc2684d -rwxr-xr-x 1 0 0 16820 pvc2684ctl -rwxr-xr-x 1 0 0 16720 ethctl -rwxr-xr-x 1 0 0 12880 sntp -rwxr-xr-x 1 0 0 8628 dhcpr -rwxr-xr-x 1 0 0 58476 igmp -rwxr-xr-x 1 0 0 12620 dnsprobe -rwxr-xr-x 1 0 0 30648 netctl lrwxrwxrwx 1 0 0 7 adsl -> adslctl -rwxr-xr-x 1 0 0 29856 adslctl lrwxrwxrwx 1 0 0 6 setmem -> atmctl lrwxrwxrwx 1 0 0 6 dumpmem -> atmctl lrwxrwxrwx 1 0 0 6 atm -> atmctl -rwxr-xr-x 1 0 0 38388 atmctl -rwxr-xr-x 1 0 0 150100 upnp -rwxr-xr-x 1 0 0 1065420 cfm
как видим, все стандартные утилиты, на самом деле - линки на busybox
ничего себе - тут даже iptables есть О_о
вроде всё 🙂 в диретории /webs просто лежит куча html и gif-фалов web-морды 🙂
# cd webs # ls stylemain.css resetrouter.html colors.css rebootinfo.html warn_box_top.gif quicksetuperr.html warn_box_bottom.gif qosqueueadd.html warn_bg.gif qosqmgmt.html tick_small.gif qoscls.html spacer_two.gif qosclsedit.html spacer_tran.gif pvccfg.html spacer_one.gif pvccfgerr.html sep_top.gif psilan.html sep_top2.gif psierror.html right.gif psidhcp.html problem_small.gif pppoe.html nav_status.gif pppautherr.html nav_start.gif portmapedit.html nav_mgt.gif portmapadd.html nav_diag.gif ntwksum2.html nav_adv.gif ntwkprtcl.html modify.gif menu_status.html gn_logo.gif menu_quick.html delete.gif menu_mgt.html connect_top.gif menu.html connect_spacer.gif menu_diag.html connect_bottom.gif menu_adv.html banner_right_top_curve.gif menu_adv1.html banner_right_bottom_curve.gif main.html banner_left.gif logo.html banner_left_curve2.gif logintro.html util.js logconfig.html portName.js lancfg.html menuTree.js ipoacfg.html menuTitle.js ipfiltermodify.html menuBcm.js ipfilteradd.html fw_util.js info.html wancfg.html index.html wanadderr.html footer.html vpivci.html dnscfg.html userpasswd.html disconnect.html uploadinfo.html diag_main.html upload.html diag.html updatesettings.html dhcpinfo.html unnumppp.html defaultsettings.html tr69cfg.html ddnsadd.html test_version.html constatus.html statswanreset.html conprocess.html statsifcreset.html connoppp.html statsifc.html connect.html statsadslreset.html confirm_del.html statsadsl.html confirm_cancel_adsl.html statsadslerr.html bindmerr.html statsadsl1.html bindexisterr.html sntpcfg.html bindexceederr.html snmpconfig.html berstop.html siproxdcfg.html berstart.html scvrtsrv.html berrun.html scprttrg.html algcfg.html scdmz.html adslcfg.html rtdefaultcfgerr.html adminpasswd.html routeadd.html addbindmac.html restoreinfo.html accessremote.html restorebackup.html accesslocal.html restorebackup2.html
Ну как? Крутой девайс? 🙂
читать далее: 0x3 — формат прошивки
Ссылки
http://nmap.org
http://www.ayera.com/teraterm/
http://tftpd32.jounin.net
http://busybox.net
http://www.uclibc.org
0 комментариев на «“Новогоднее исследование ADSL-роутера на базе Linux — 0x2 — знакомимся с программной частью”»
у меня есть девайс ZTE ZXV10H108L
у него тоже busybox
как в нем включить snmp ???
Нужно мониторить девайс а сабж выключене 🙁
чтобы в busybox-е что-то «включить» его нужно пересобирать, так что просто так не получится.
Здравствуйте, скажите, пожалуйста, я хотел бы сделать эмулятор веб-интерфейса этого модема, например как здесьhttp://www.tp-linkru.com/resources/simulator/TD-8951ND (UN)/rpSys.html? Заходя через telnet в модем, нашел много файлов с расширением ".gсh", в которых содержаться информация о настройках в модеме, исходный код веб-интерфейса этого модема показал, что html страница формируется в связке с html + информация из файлов ".gch" (прекомпилированный файл заголовка C/C++).