Прослушивание сети с помощью ASUS WL500W

Наша прошлая статья также была посвящена перехвату трафика с помощью устройств компании ASUS. Казалось бы, о чём тут ещё говорить?.. Однако мы считаем, что этого недостаточно, так как в предыдущем материале речь шла об использовании специфических для платформы SL1200 механизмах. Сейчас же мы хотим рассказать о простой и понятной каждому любителю *nix систем утилите TCPDump, запускаемой не на персональном компьютере или ноутбуке, а на беспроводном маршрутизаторе ASUS WL500W. Хотелось бы сразу отметить, что задачи, которые мы в этот раз преследуем, - точно такие же, как и в прошлой статье, а именно – перехват трафика для его анализа при решении проблем, а также последующего извлечения учётных данных пользователей. О том, как это сделать, мы, конечно же, рассказывать не будем, но о проведении самого перехвата – достаточно. Весь изложенный здесь материал даётся исключительно в образовательных целях. Итак, приступим.

В официальной прошивке нет всего необходимого для перехвата, поэтому мы воспользовались сторонней прошивкой («от Олега»). Более подробно об альтернативных прошивках можно прочитать здесь. Данная прошивка сразу же предоставляет администратору доступ к демону telnet, а у самого демона реализует функции проверки логина и пароля пользователя. Для установления сеанса связи с маршрутизатором по протоколу telnet подойдёт либо встроенный во все современные операционные системы клиент telnet, либо же с помощью специализированного программного обеспечения, например, PuTTy.

При входе у пользователя запрашивается логин и пароль, которые совпадают с теми, что были заведены в веб-интерфейсе. При правильном вводе учётных данных пользователь попадает в shell встроенной операционной системы, где он сразу же может получить доступ к утилите TCPDump, полное описание возможностей которой представлено на данной страничке.

WL500W обладает ещё одним преимуществом перед своим собратом SL1200 – наличием большого свободного места для хранения перехваченных данных. Конечно, сам по себе WL500W не имеет встроенного флеш-накопителя фантастических размеров, однако позволяет подключать внешние флеш-карты или даже USB-жёсткие диски. При подключении такого устройства оно монтируется в каталог /tmp/harddisk. Для наших экспериментов мы подключили флеш-карту объёмом 2 ГБ к одному из USB-портов WL500W.

Мы решили перехватывать и сохранять фреймы, объём которых не превышает 1500 байт. Прослушивание будет вестись на всех доступных интерфейсах, список которых можно получить из команды “tcpdump –D”. Хотелось бы тут же отметить, что режим promiscuous не доступен при выборе всех интерфейсов.

Сохранять же файлы мы будет на внешний накопитель в файл test.log. Для выполнения указанных выше требований необходимо запускать утилиту с приведённой далее инициализационной строкой: «tcpdump -i 5 -s 1500 -w /tmp/harddisk/test.log». Остановить выполнение утилиты можно либо нажатием ctrl+c, либо с помощью параметра «c», то есть указания количества перехватываемых пакетов. Ниже представлен результат работы программы, прерванной вручную.

Теперь нам нужно скопировать сохранённый файл на компьютер для последующего анализа. Для этих целей подойдёт любой клиент протокола FTP. Мы работаем под Windows Vista, поэтому будем пользоваться тем консольным клиентом, который встроен в нашу операционную систему.


На приведённом выше скриншоте мы получили файл test.log с FTP-сервера и сохранили его у себя на диск C. Откроем теперь с помощью Wireshark данный файл.


Теперь мы можем сохранять файл в любых форматах, понятных приложению Wireshark, для последующего разбора и анализа, однако дальнейшие преобразования вызывают у нас скуку, поэтому на этом мы и завершим своё повествование.

Прослушивание сети с помощью ASUS SL1200


Прослушивание сети с помощью снифферов (sniffer) стало уже доброй традицией. Наверное, самым распространённым продуктом можно считать сетевой анализатор Ethereal, переименовавшийся в Wireshark. Однако не всегда существует возможность разместить компьютер или ноутбук, с установленным ПО непосредственно в том месте, где требуется произвести анализ трафика. Перехват трафика для его последующего анализа может быть произведён и с помощью встроенного в некоторые маршрутизаторы функционала. Примером такого устройства служит Asus SL1200, о котором и пойдёт речь далее. Получить доступ к прослушивающему механизму можно только из командной строки (telnet или консольный порт). Сразу хотелось бы отметить, что SL1200 – это не полнофункциональный сниффер, но маршрутизатор, то есть перехват пакетов является побочной функцией и не может считать законченным решением. Ловля пакетов с паролями (Telnet, FTP, IRC и прочие) – одна из основных задач, для решения которой может быть использовано данное устройство, так как проскакивание пакета с паролем периодично повторяется, то есть длительный перехват трафика рано или поздно покажет нужный пакет.

Для работы с консольным портом маршрутизатора использовалась программа PuTTy версии 0.6. Всю работу будем производить с компьютера, на котором установлена операционная система Windows Vista, поэтому все использованные команды и программы будут Windows-ориентированными.

Функция перехвата сетевых кадров в Asus SL1200 может быть активирована или деактивирована. Смена режимов производится с помощью команд привилегированного режима deb s и no deb s.

Вывод перехваченных пакетов также производится либо в telnet-сессию, либо в консоль. Для просмотра того, что уже было «наловлено» служит команда привилегированного режима sho p. В приведённом ниже примере выловлен один пакет, отправленный с WAN порта маршрутизатора.

 

Данные, содержащиеся в пакете, скопируем из окна вывода Putty в текстовый файл one_frame_original.txt. Полученный файл будем обрабатывать с тем, чтобы его можно было «открыть» с помощью Wireshark. Откроем его в Microsoft Word.

Заменим все символы конца абзаца на пробел с тем, чтобы в файле была одна строка, содержащая перехваченные данные, где каждый байт (две шестнадцатеричные цифры) был бы отделён от соседних пар пробелами.

Для дальнейшего преобразования посмотрим, какие ещё требования предъявляет утилита text2pcap.exe, поставляемая вместе с Wireshark, которые описаны в файле text2pcap.html.

Необходимо добавить в каждую строку число, соответствующее смещению в файле. Так как сейчас рассматривается только один кадр, то достаточно добавить в начало файла текстовую последовательность «000000». Преобразованные данные представлены в файле one_frame_edited.txt.

Теперь запустим утилиту text2pcap.exe для преобразования текстового файла в бинарник, понятный Wireshark.

 

Итак, файл one_frame.bin для разбора Wireshark готов, откроем его.

 

С одним пакетом разобрались. Но обрабатывать так по одному фрейму очень трудоёмко, поэтому попробуем преобразовать сразу несколько Ethernet кадров. Для начала получим их также из консоли путём чтения log-файла putty_original.log работы PuTTy. Уберём из лога начало и конец файла так, чтобы в нём остались только записи о пакетах (putty_edited_lite.log), добавим первую пустую строку.

Теперь необходимо избавиться от строк, содержащих информацию о пакетах (например, ID = 158, Captured from LAN, Packet size = 242), для чего воспользуемся системной командой «find /V "ID" putty_edited_lite.log > putty_edited.log» из каталога, где расположен файл putty_edited_lite.log. Начало полученного текстового файла представлено ниже.

 

Удалим запись «---------- PUTTY_EDITED_LITE.LOG» и две пустые строки в начале файла. Полученный файл putty_edited.log откроем в редакторе Microsoft Word. Заменим все удвоенные концы абзацев знаком ручного перевода строки, затем одинарные знаки абзаца удалим, после чего переводы строк заменим знаками абзацев, перед которыми расположены «смещения» (000000), необходимые для утилиты text2pcap.exe. Перед первой строкой смещение вставим вручную.

Получили файл, полностью готовый к преобразованию в формат TCPDUMP. Конвертируем его так, как описывалось выше. Результат работы конвертера text2pcap.exe должен быть похож на вывод, представленный на картинке.

После преобразования должен появиться файл putty_edited.bin, который и требуется открыть в Wireshark.

Единственная проблема, которая возникает при таком анализе, - быстродействие консольного порта. Скорости в 9600 кбит/с явно недостаточно для того, чтобы быстро передать захваченные данные на компьютер. Конечно, эту проблему можно решить с помощью telnet, но опять же встаёт вопрос об эффективности. Попробуем передать эти данные на FTP-сервер, к тому же это позволит запустить скрипт только на SL1200, который будет автоматически сливать данные на FTP. К сожалению, нам так и не удалось получить захваченные кадры иначе, чем командой sho p, поэтому в каталоге /configs на SL1200 был создан файл commands.fox, содержимое которого приведено ниже. Это команды, которые нужно передать программе-консоли для того, чтобы она вывела перехваченные кадры.

Дадим команду ps, из вывода которой видим, что именно является консолью.

Убедимся в этом ещё раз, вызвав соответствующий файл с перечисленными аргументами.

Теперь запустим файл консольного приложения и передадим в него тот набор команд, который уже был заготовлен заранее (commands.fox), а вывод сохраним в файле /configs/packets.fox. Символ «&» в конце строки нужен для того, чтобы запустить приложение в фоновом режиме.

Видим, что файл packets.fox содержит захваченные кадры. Передадим теперь этот файл на FTP-сервер.

Переданный файл можно обрабатывать так, как было описано ранее.

Все перечисленные процедуры обработки можно выполнить и с помощью только скриптов, выполняемых на машине с Windows, но мы решили не перегружать читателя подробностями shell-программирования, а показать на примере общеизвестного текстового редактора.

На время передачи захваченных пакетов через telnet или FTP придётся выключать сниффер, иначе в него попадут и пакеты с пересылаемыми данными. Этого можно избежать, если вручную (скриптом) фильтровать/разбирать файл с захваченными пакетами, но, на наш взгляд, это утомительное занятие. Также после «слива» кадров в файл необходимо почистить буфер сниффера с помощью консольной команды «cle b» привилегированного режима.

В заключение хотелось бы ещё раз отметить, что SL1200 прежде всего SOHO-маршрутизатор, а уже во вторую очередь сниффер.

Автор благодарит Владимира Хомутова за неоценимую помощь в подготовке материала.

Изменение прошивки вручную

 

Стандартная прошивка маршрутизаторов Asus SL500/1000 позволяет нам задавать через консоль arp-таблицу, однако эта таблица теряется при перезагрузке. В качестве операционной системы для SL выбран Linux, однако, в устройстве он расположен на read-only разделах, что несколько осложняет конфигурацию. Выходом из сложившейся ситуации является изменение официальной прошивки, которую можно взять на сайте производителя. Поскольку у меня для экспериментов был маршрутизатор SL500, то и изменять прошивку я буду для него, хотя для SL1000 всё аналогично. Для экспериментов была выбрана прошивка SL500_1_1_72A_410, находящаяся в одноимённом файле SL500_1_1_72A_410.bin. Посмотрим на структуру этого файла. В качестве программы для редактирования прошивки был использован WinHEX 12.85 SR-10.

big endian
000-001 - 0000
002-003 - 91CF (depends on the device and firmware version (proprietary CRC))
004-01F - BE73 1504 0000 0003 0002 0000 0000 0000 0000 0000 0040 0000 0100 0000
020-027 - 534C 3530 3000 0000 (device name SL500)
028-29F - 0000
2A0-2AB - 16 bit 3,2,3,0,0,B
2AC-309 - 0000
30A-329 - first file header
32A-349 - second file header
34A-369 - third file header
36A-487 - 0000
0488-...files

Слева указано смещение в шестнадцатеричной системе от начала файла, а справа – содержимое прошивки. Заголовок файла представляет собой структуру, содержащую информацию о файле (смещение начала файла, длина, номер файла).

u16 file number (1..3)
u32 displacement from the beginning of the file
u16 flag (00 for the first file, 01 for the second one and 3E for the third (last) one)
u16 0000
u32 file length or 0 for EOF
u144 18 zero-bytes;

Приведём заголовки трёх файлов в шестнадцатеричном виде.

0001 0000 0488 0000 0000 0000 F9A0 0000 0000 0000 0000 0000 0000 0000 0000 0000

0002 0000 FE28 0001 0000 003A 6000 0000 0000 0000 0000 0000 0000 0000 0000 0000

0003 003B 5E28 003E 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

Первый файл в данном случае малоинтересен. Третий тоже. А второй как раз и содержит образ файловой системы, которая необходима для дальнейшей обработки. Поэтому выделяю из прошивки часть со смещения FE28 и до конца файла.

Полученный файл представляет собой сжатый образ файловой системы устройства. Сначала требуется извлечь файлы из этого образа, то есть распаковать их из cramfs. Файловая система содержит жёсткие линки, поэтому извлечение образа под Windows невозможно. Было принято решение установить Linux в виртуальной машине для того, чтобы извлечь файлы, изменить их и собрать в образ обратно. В качестве программной виртуальной машины была установлена VMware Workstation (5.5.1 build 19175). В виртуальную машину была установлена операционная система Linux Fedora Core 5 (ядро 2.6.15).

Теперь требуется подготовить всё необходимое, чтобы собрать утилиту для извлечения. В качестве ПО для работы с файловой системой была взята реализация cramfs-1.1. Кроме этого в этот же каталог пришлось установить zlib-1.2.3. Сложность извлечения состояла в том, что ПК и маршрутизатор имеют различную эндианность. Для преодоления указанной трудности пришлось воспользоваться изменённым Игорем Нестеровым файлом cramfsck.c, с которым были собраны необходимые утилиты.

[root@localhost firmware]# pwd
/fox/firmware
[root@localhost firmware]# ls
2.bin cramfsck.c gzio.c inftrees.h projects zconf.in.h
adler32.c cramfsck.c~ image0 linux qnx zlib.3
algorithm.txt crc32.c INDEX Makefile README zlib.h
amiga crc32.h infback.c Makefile.in text zutil.c
as400 deflate.c inffast.c make_vms.com text~ zutil.h
ChangeLog deflate.h inffast.h minigzip.c trees.c
compress.c example.c inffixed.h mkcramfs.c trees.h
configure examples inflate.c msdos uncompr.c
contrib FAQ inflate.h NOTES win32
COPYING GNUmakefile inftrees.c old zconf.h
[root@localhost firmware]# ./configure
Checking for gcc...
Building static library libz.a version 1.2.3 with gcc.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.
[root@localhost firmware]# make
gcc -W -Wall -O2 -g -I. mkcramfs.c -lz -o mkcramfs
mkcramfs.c: In function ‘parse_directory’:
mkcramfs.c:287: warning: pointer targets in assignment differ in signedness
mkcramfs.c: In function ‘write_superblock’:
mkcramfs.c:399: warning: pointer targets in passing argument 1 of ‘__builtin_strncpy’ differ in signedness
mkcramfs.c:401: warning: pointer targets in passing argument 1 of ‘__builtin_strncpy’ differ in signedness
mkcramfs.c: In function ‘write_directory_structure’:
mkcramfs.c:480: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness
mkcramfs.c: In function ‘do_compress’:
mkcramfs.c:598: warning: pointer targets in passing argument 1 of ‘compress2’ differ in signedness
mkcramfs.c:598: warning: pointer targets in passing argument 3 of ‘compress2’ differ in signedness
mkcramfs.c: In function ‘write_data’:
mkcramfs.c:647: warning: pointer targets in passing argument 3 of ‘do_compress’ differ in signedness
mkcramfs.c: In function ‘main’:
mkcramfs.c:825: warning: pointer targets in passing argument 2 of ‘crc32’ differ in signedness
gcc -W -Wall -O2 -g -I. cramfsck.c -lz -o cramfsck
[root@localhost firmware]# ls
2.bin cramfsck GNUmakefile inftrees.c NOTES win32
adler32.c cramfsck.c gzio.c inftrees.h old zconf.h
algorithm.txt cramfsck.c~ image0 linux projects zconf.in.h
amiga crc32.c INDEX Makefile qnx zlib.3
as400 crc32.h infback.c Makefile.in README zlib.h
ChangeLog deflate.c inffast.c make_vms.com text zutil.c
compress.c deflate.h inffast.h minigzip.c text~ zutil.h
configure example.c inffixed.h mkcramfs trees.c
contrib examples inflate.c mkcramfs.c trees.h
COPYING FAQ inflate.h msdos uncompr.c
[root@localhost firmware]#

Теперь нужно воспользоваться собранными утилитами для извлечения файлов из ободранной прошивки в каталог /fox/extraction. Лишнее перечисление извлечённых файлов здесь не приводится.

[root@localhost firmware]# ./cramfsck
usage: ./cramfsck [-hv] [-x dir] file
-h print this help
-x dir extract into dir
-v be more verbose
file file to test
[root@localhost firmware]# ./cramfsck -v -x /fox/extraction 2.bin
SS 13
warning: old cramfs format
d 0755 344 0:0 /fox/extraction
d 0755 392 0:0 /fox/extraction/bin
l 0777 8 0:0 /fox/extraction/bin/bash -> /bin/msh
f 0755 166484 1011:104 /fox/extraction/bin/busybox
l 0777 8 0:0 /fox/extraction/log -> /tmp/log
l 0777 17 0:0 /fox/extraction/firewall.cfg -> /tmp/firewall.cfg
f 0755 999060 0:0 /fox/extraction/cpu1
d 0755 0 0:0 /fox/extraction/ramfs
f 0755 1699436 0:0 /fox/extraction/vmlinux
2.bin: OK
[root@localhost firmware]# ls
2.bin cramfsck GNUmakefile inftrees.c NOTES win32
adler32.c cramfsck.c gzio.c inftrees.h old zconf.h
algorithm.txt cramfsck.c~ image0 linux projects zconf.in.h
amiga crc32.c INDEX Makefile qnx zlib.3
as400 crc32.h infback.c Makefile.in README zlib.h
ChangeLog deflate.c inffast.c make_vms.com text zutil.c
compress.c deflate.h inffast.h minigzip.c text~ zutil.h
configure example.c inffixed.h mkcramfs trees.c
contrib examples inflate.c mkcramfs.c trees.h
COPYING FAQ inflate.h msdos uncompr.c
[root@localhost firmware]# cd ..
[root@localhost fox]# ls
cramfs-1.1 extraction firmware zlib-1.2.3
[root@localhost fox]# cd extraction
[root@localhost extraction]# ls
bin dev firewall.cfg home lib mnt proc root tmp var
cpu1 etc flash0 jffs2 log opt ramfs sbin usr vmlinux
[root@localhost extraction]#

Автоматически запускаемым скриптом оказался файл GOCstartup из каталога /etc/init.d, поэтому всё необходимое для автозагрузки было размещено именно в этом файле. В его начало были вставлены строки об авторе изменений, а в конец добавлены необходимые команды для извлечения другого скрипта, изменения его параметров и запуска извлечённого.

echo "Start my part."
echo "Extracting file fox.script..."
rfcutil xtract /tmp/fox.script fox.script
echo "Changing script (fox.script) rights..."
chmod 777 /tmp/fox.script
echo "Runing script (fox.script)..."
/tmp/fox.script
echo "End my part."

Сложность всей схемы загрузки обусловлена тем, что всё запускаемое системой расположено на разделе с доступом только для чтения. Файлы логов и параметров (пользовательских настроек) сохранены в области с доступом для чтения и записи, но загрузка оттуда не производится. В связи с тем, что реальные условия работы сети требуют достаточно частого изменения нужных параметров, было принято решение основной скрипт разместить в read-only области, а затем извлекать и запускать из него другой скрипт, который можно изменять без перепрошивки устройства. Такая схема также позволяет дополнять функциональность маршрутизатора без трудоёмкого изменения прошивки.

Теперь необходимо собрать образ файловой системы, что можно осуществить с помощью уже собранной утилиты mkcramfs.

[root@localhost firmware]# ./mkcramfs --help
./mkcramfs: invalid option -- -
usage: ./mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile
-h print this help
-E make all warnings errors (non-zero exit status)
-e edition set edition number (part of fsid)
-i file insert a file image into the filesystem (requires >= 2.4.0)
-n name set name of cramfs filesystem
-p pad by 512 bytes for boot code
-s sort directory entries (old option, ignored)
-v be more verbose
-z make explicit holes (requires >= 2.3.39)
dirname root of the directory tree to be compressed
outfile output file
[root@localhost firmware]# ./mkcramfs /fox/extraction /fox/foxware.bin
Directory data: 9008 bytes
Everything: 3728 kilobytes
Super block: 76 bytes
CRC: ffadf25
[root@localhost firmware]# ls
2.bin cramfsck GNUmakefile inftrees.c NOTES win32
adler32.c cramfsck.c gzio.c inftrees.h old zconf.h
algorithm.txt cramfsck.c~ image0 linux projects zconf.in.h
amiga crc32.c INDEX Makefile qnx zlib.3
as400 crc32.h infback.c Makefile.in README zlib.h
ChangeLog deflate.c inffast.c make_vms.com text zutil.c
compress.c deflate.h inffast.h minigzip.c text~ zutil.h
configure example.c inffixed.h mkcramfs trees.c
contrib examples inflate.c mkcramfs.c trees.h
COPYING FAQ inflate.h msdos uncompr.c
[root@localhost firmware]# cd ..
[root@localhost fox]# ls
cramfs-1.1 extraction firmware foxware.bin zlib-1.2.3
[root@localhost fox]#

Так как модернизирована была лишь разбирающая утилита, то необходимо «перевернуть» собранный образ файловой системы. В стандартной поставке Fedora Core 5 не было обнаружено утилиты для преобразования cramfs, поэтому данная утилита была перенесена из системы Debian и носит название cramfsswap.

[root@localhost firmware]# ./cramfsswap
Usage: ./cramfsswap <in> <out>>
[root@localhost firmware]# ./cramfsswap /fox/foxware.bin /fox/foxware_swapped.bin
Filesystem is in hostorder.
Filesystem contains 392 files.
CRC: 0xa95c730f
[root@localhost firmware]# cd ..
[root@localhost fox]# ls
cramfs-1.1 extraction firmware foxware.bin foxware_swapped.bin zlib-1.2.3
[root@localhost fox]#

Полученный файл foxware_swapped.bin и является готовым образом файловой системы, который необходимо вставить в прошивку вместо старого образа. Для этого необходимо к части оригинальной прошивки с выдранным оригинальным образом дописать изменённый образ файловой системы. Данную операцию можно произвести уже под Windows с использованием WinHex.

Однако простой замены блока данных с образом файловой системы недостаточно. Необходимо поправить также заголовки файлов. Как упоминалось ранее, в прошивке находятся заголовки трёх файлов, второй из которых и представляет файловую систему. Изменения в заголовках должны быть следующими: длина второго файла должна соответствовать действительности (вместо 3A6000 должно теперь быть 3A4000), смещение третьего файла должно также быть изменено со значения 3B5E28 на 3B3E28. Изменённые заголовки файлов приведены ниже.

0001 0000 0488 0000 0000 0000 F9A0 0000 0000 0000 0000 0000 0000 0000 0000 0000
0002 0000 FE28 0001 0000 003A 4000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0003 003B 3E28 003E 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

Остаются два не менее важных шага по подготовке самого файла прошивки. Как отмечалось ранее 3 и 4 байты прошивки содержат контрольную сумму всего файла, правда, понять, как именно она считается, не удалось. Однако выйти из сложившейся ситуации всё-таки можно. Для этого необходимо попытаться залить прошивку с использованием протоколов FTP или TFTP, а уже существующая версия прошивки подсчитает контрольную сумму и напишет её. Для этой операции был поднят TFTP-сервер от компании 3COM (3CServer 1.1.007). Это бесплатная утилита, которая элементарна в настройке. Ниже приводится лог команд и ответов устройства.

SL500(config)# upgrade tftp 192.168.1.3 foxware.bin
Shutting down Event-Manager and Syslogd [ OK ]
Successfully created and tested attach to shared memory block for software package
##Package Information:
CRC = 0x91cf
Magic No. = 0xbe731504
Min-Max Config. Size = 0x20000
noConfigBackup Flag = 0
Minimum Flash = 0x400000
Minimum RAM = 0x1000000
Version = LX_3.2.3_Comp_0_0_0_b
Components = IRB, QoS, FW
##Models Supported:
SL500
##
##Images:
BOOT: Offset [Package = 1160, Flash = 0x0], Size = 63904
CRAMFS: Offset [Package = 65064, Flash = 0x10000], Size = 3817472
CONFIG: Offset [Package = 3882536, Flash = 0x3e0000], Size = 0
##
##
Invalid package CRC. Expected 91cf, computed 68bc
% Package validation error
Restarting system.

Открываю снова файл прошивки и вижу, что 3 и 4 байты содержат 91CF, хотя в них должны содержаться 68BC. Заменяем значения указанных двух байт на 68BC (SL500_1_1_72A_410_final.bin), после чего прошивание можно производить любым доступным способом (TFTP, FTP, HTTP). Я вновь произвожу обновление через TFTP, полный лог данного обновления приведён ниже.

ASUS CLI User Access Verification
(none) login: admin
Password :
admin logged in
SL500> ena
SL500# conf t
SL500(config)# up t 192.168.1.3 foxware.bin
Shutting down Event-Manager and Syslogd [ OK ]
Successfully created and tested attach to shared memory block for software packa
ge
##Package Information:
CRC = 0x68bc
Magic No. = 0xbe731504
Min-Max Config. Size = 0x20000
noConfigBackup Flag = 0
Minimum Flash = 0x400000
Minimum RAM = 0x1000000
Version = LX_3.2.3_Comp_0_0_0_b
Components = IRB, QoS, FW
##Models Supported:
SL500
##
##Images:
BOOT: Offset [Package = 1160, Flash = 0x0], Size = 63904
CRAMFS: Offset [Package = 65064, Flash = 0x10000], Size = 3817472
CONFIG: Offset [Package = 3882536, Flash = 0x3e0000], Size = 0
##
##
Successfully uploaded new software image. System will now install the new softwa
re and reset automatically with the CURRENT SAVED CONFIGURATION.
Shutting down PPP Interfaces [ OK ]
Shutting down PPP task [ OK ]
Shutting down DB service 0:0:1:4: P
PP : Exceptional exit from ppp_eventTask
[ OK ]
##Package Information:
Magic No. = 0xbe731504
Min-Max Config. Size = 0x20000
noConfigBackup Flag = 0
Minimum Flash = 0x400000
Minimum RAM = 0x1000000
##Models Supported:
SL500
##
##Images:
BOOT: Offset [Package = 1160, Flash = 0x0], Size = 63904
CRAMFS: Offset [Package = 65064, Flash = 0x10000], Size = 3817472
CONFIG: Offset [Package = 3882536, Flash = 0x3e0000], Size = 0
##
##
nobkup is 0, and CONFIG offset + size is identical to current values, hence do
nothing for CONFIG partition
Upgrading bootloader .....
Bootloader successfully upgraded
Upgrading CRAMfs .....
3a0000 bytes
CRAMfs successfully upgraded
SDRAM self-test Pass.....
Hit Return to enter diagnostics
Type II memory configuration
Starting boot...
Power on
bss_start 8099DB40 bss_end 809A2270
Detected Memory: 16 MB
Calibrating delay loop... 132.71 BogoMIPS
Detected CFI Flash Chip
1 @0xBFC00000 Size(4 MB)
Flash self-test pass.
Boot: Detected cramfs filesystem
SecureLink Boot Loader Software
TYP_REL_BOOTSW.4.1.0, Mar 21 2006, 23:45:55
CPU ID 4 Revision 0
Loading CPU 0 .......
Loading CPU 1 ....
Booting up system,please wait...
Detected LX4189 (PRID: c401),
Revision: 0000001e, 16 entry TLB.
Board has been soft reset:0 times
9 MB SDRAM.
Enabling MMU .......done
Loading Lexra 4xxx/5xxx MMU routines.
Determined physical RAM map:
memory: 00988000 @ 00000000 (usable)
memory: 00638000 @ 00988000 (reserved)
memory: 00040000 @ 00fc0000 (usable)
On node 0 totalpages: 4096
zone(0): 4096 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Linux version 2.4.2_hhl20 (root@gdk) (gcc version 2.95.3 20010315 (release/Monta
Vista)) #1955 ¤G 3¤ë 21 23:46:00 CST 2006
rtsched version <20010618.0943.20>
New MIPS time_init() invoked.
Memory: 7640k/10016k available (1500k kernel code, 2376k reserved, 103k data, 44
k init)
Dentry-cache hash table entries: 2048 (order: 2, 16384 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 1024 (order: 1, 8192 bytes)
Checking for 'wait' instruction... unavailable.
POSIX conformance testing by UNIFIX
Initializing RT netlink socket
Starting kswapd v1.8
pty: 3 Unix98 ptys configured
RTC to Sysclk synchronize Started.
Amd/Fujitsu Extended Query Table v .166 at 0x0040ots per queue
number of CFI chips: 1
Manufacturer ID: c2, Device ID: a8
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 1024 bind 1024)
IP-Config: No network devices available.
Freeing unused kernel memory: 44k freedeadonly.
0:0:8:4: CPU 0 Software Reset
IramStart=80000640,IramSize=39c0
Initializing Crypt.....
Crypt Engine Initialized!
Mode is IRB
Initializing Database
iBE optimized for ALL_ROUTER mode
VPN Addfuncs2Iram
IBE initialization done
Kernel init for VPN successful
ipm_RxTask: Waiting for ICCD MSG
+³{6{s›{c«˜X›[dnÝعted: BusyBox v0.60.2 (2002.10.22-13:52+0000) multi-call bina
ry c›sÖLض›Û·
Starting pid 13, console /dev/console: '/etc/init.d/GOCstartup'
Algorithmics/MIPS FPU Emulator v1.5a
This firmware has been modified by Klimanov Maxim.
Starting modified firmware...
mounting /proc
mounting /dev/pts
setting system clock...
Bringing up loopback interface...done
Creating directories...done
starting user_mgr
starting fileconvertor
starting firewall
...done
bringing up the network
starting evtmgr (syslogd also started)
starting inetd
starting dns
starting ddns
starting sntp
starting l2f_server
starting goahead
Copyright (c) 2002 GoAhead Software Inc. All Rights Reserved
starting dhcpd
starting rip
starting VPN
starting igd
starting pptp
starting ppp
starting monitor
Start my part.
Extracting file fox.script...
assign_memory_buffer:0
rfc_lock:0
extract_file:0
xtract:0
rfc_unlock:0
Changing script (fox.script) rights...
Runing scripStarting pid 120, console /dev/console: '/sbin/getty -L ttyS2 9600 vt100'
ASUS CLI User Access Verification
(none) login: admin
Password :
admin logged in
SL500>

Конец лога говорит о том, что команды из файла GOCstartup выполняются, однако, в какой-то момент происходит запуск консольной программы, которая полностью перехватывает вывод, поэтому просмотреть сообщения, выводимые скриптом через консоль не получится. Перехожу к созданию и сохранению самого файла скрипта fox.script.

В этом файле необходимо вызвать программу, которую видит пользователь на консольном порте или через telnet, а также передать ей необходимые команды для воссоздания arp-таблицы. Создаю отдельный файл для команд, которые надо передать консольной программе. Содержимое основного скрипта приведено ниже.

#!/bin/sh
rfcutil xtract /tmp/fox.console fox.console
/usr/bin/clcli < /tmp/fox.console

Файл дополнительного скрипта (fox.console) также привожу.

admin
admin
ena
conf t
ip arp 192.168.1.2 00:11:22:33:44:55

Первые две строки содержат логин и пароль пользователя, которому разрешён консольный вход.

Автор благодарит Нестерова Игоря и Хомутова Владимира за неоценимую помощь в подготовке материала.

Статьи

Настройки по умолчанию: раз в год и палка стреляет (proxy ARP)

BGP Synchronization и OSPF

MPLS L3VPN поверх DMVPN

Краткое пособие по созданию петель маршрутизации в OSPF в домашних условиях

Передача группового трафика внутри VPN поверх MPLS-сети (Rosen), сигнализация PIM

Spoke to spoke мультикаст в сетях DMVPN

ASUS AiMesh по проводам

Мультигигабитные интерфейсы NBASE-T

Power over IP

DHCP в деталях

IPv6 в Cisco или будущее уже рядом (обновлено 16 октября 2019 года)

Прослушивание сети с помощью коммутатора Cisco Catalyst 3560

Не все стеки одинаково полезны, или стеки StackWise

Перехват трафика с помощью Cisco Nexus

Перехват пакетов с помощью коммутатора NETGEAR FSM726v3

Перехват трафика с помощью Cisco ASR

Intel vPro/AMT или аппаратный антивирус

Intel WiMAX/WiFi Link 5150/5350 или подключение ноутбука к сетям 4G

Adder IPEPS в качестве удалённого антивируса

Извлечение картинок из файлов Microsoft Word

Прослушивание сети с помощью Cisco PIX/ASA

Восстановление голоса из перехваченных RTP-потоков

Yota WiMAX или реалии 4G в Москве

Перехват трафика в Windows с помощью KIS 2010

IPSec шлюз и прочие тонкости ASUS SL1200

Виртуальные локальные сети в Windows

Получение цифрового голоса через канал E1

Прослушивание сети с помощью ASUS SL1200

Прослушивание сети с помощью ASUS WL500W

Изменение прошивки вручную ASUS SL500/1000