スマモッチャーの解析(rootを取る)

スマモッチャーの起動ログを取得する事ができ、ログイン直前までの段取りは出来ました。が、肝心のアカウントのIDとパスワードが分かりません。rootのパスワードが分かっていれば色々と知ることが出来るかもなのですが…(と知っていないふりをしておきます)。そこで、解析を試みてみました。とっかかりは前回取得したLinuxの起動ログです。ログを見るとシリアルFlashが5つのパーティションに分けられている様です。


[ 0.610000] gk_flash gk_flash.0: GD25Q64C (8192 Kbytes)
[ 0.620000] 5 cmdlinepart partitions found on MTD device gk_flash
[ 0.620000] Creating 5 MTD partitions on "gk_flash":
[ 0.630000] 0x000000000000-0x000000050000 : "U"
[ 0.640000] 0x000000050000-0x0000001f0000 : "K"
[ 0.640000] 0x0000001f0000-0x000000310000 : "R"
[ 0.650000] 0x000000310000-0x000000590000 : "A"
[ 0.660000] 0x000000590000-0x000000800000 : "H"



という事で、とりあえずシリアルFlashから中身をマルっと吸い出して解析しようと思います。Linuxに入れないのでその前の段階、U-Bootで吸い出せれば万々歳です。なので、U-Bootに入っているコマンドを調べてみます。Linux起動直前で止めるには、Enter押しっぱなしの状態で電源ONです。


U-Boot 2012.10 (Dec 26 2017 - 18:17:43) for GK7102 rb-sc1045-v2.0 (GOKE)

HAL: 20160913
DRAM: 64 MiB
Flash: 8 MiB
NAND: [No SPI nand]
SD/MMC: 0
SF: 8 MiB [page:256 Bytes] [sector:64 KiB] [count:128] (GD25Q64C)
In: serial
Out: serial
Err: serial
Net: Int PHY
Hit any key to stop autoboot: 1
GK7102 #
GK7102 #
GK7102 # help
[PROCESS_SEPARATORS] help
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm - boot application image from memory
bootp - boot image via network using BOOTP/TFTP protocol
bootvx - Boot vxWorks from an ELF image
bootz - boot Linux zImage image from memory
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
dhcp - boot image via network using DHCP/TFTP protocol
echo - echo args to console
editenv - edit environment variable
env - environment handling commands
erase - erase FLASH memory
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
fatwrite- write file into a dos filesystem
flinfo - print FLASH memory information
gkupdate- Gk_update sub-system
go - start application at address 'addr'
help - print command description/usage
iminfo - print header information for application image
imls - list all images found in flash
imxtract- extract a part of a multi-image
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
md - memory display
mm - memory modify (auto-incrementing address)
mmc - MMC sub system
mmcinfo - display MMC info
mtest - simple RAM read/write test
mw - memory write (fill)
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
sf - SPI flash sub-system
sleep - delay execution for some time
snand - SpiNAND sub-system
source - run script from memory
tftpboot- boot image via network using TFTP protocol
version - print monitor, compiler and linker version
GK7102 #



sf, fatwrite が有りますね。これがあればシリアルFlashの中身をSDカードへ書き出すことが出来そうです。GD25Q64Cは容量が8MByteなので、マルっと吸い出し、ファイル化します。uSDカードを指してコマンド実行です。


GK7102 # sf probe
[PROCESS_SEPARATORS] sf probe
SF: 8 MiB [page:256 Bytes] [sector:64 KiB] [count:128] (GD25Q64C)
GK7102 #
GK7102 #
GK7102 # sf read 0xc1000000 0 0x800000
[PROCESS_SEPARATORS] sf read 0xc1000000 0 0x800000
GK7102 # fatinfo mmc 0
[PROCESS_SEPARATORS] fatinfo mmc 0
Interface: MMC
Device 0: Vendor: Man 744a45 Snr e5201dfe Rev: 0.2 Prod: USD
Type: Removable Hard Disk
Capacity: 15079.0 MB = 14.7 GB (30881792 x 512)
Partition 1: Filesystem: FAT32 "NO NAME "
GK7102 # fatwrite mmc 0:1 0xc1000000 gk_flash.bin 0x800000
[PROCESS_SEPARATORS] fatwrite mmc 0:1 0xc1000000 gk_flash.bin 0x800000
writing gk_flash.bin
8388608 bytes written
GK7102 #
GK7102 #
GK7102 # fatls mmc 0
[PROCESS_SEPARATORS] fatls mmc 0
system volume information/
8388608 gk_flash.bin

1 file(s), 1 dir(s)

GK7102 #



ファイル化(gk_flash.bin)できたので、ここからはWindows上でも作業できます。が、個人的なやりやすさからVMware上に構築したUbuntuを使用します。Ubuntu上にファイルを置いて、バイナリの内容を探っていきます。


$ binwalk -y filesystem ./gk_flash.bin

DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
2031616 0x1F0000 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 1058498 bytes, 217 inodes, blocksize: 131072 bytes, created: 2018-08-28 05:24:06
3211264 0x310000 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 2248460 bytes, 4 inodes, blocksize: 131072 bytes, created: 2019-01-14 08:29:23
5832716 0x59000C JFFS2 filesystem, little endian



JFFS2の位置が起動ログと若干異なりますが、キリの良い数値である起動ログ側が正しそうです。それぞれの区画でファイルを切り出します。


$ dd if=gk_flash.bin of=gk_flash_U.bin bs=1 skip=$((0x000000)) count=$((0x050000))
$ dd if=gk_flash.bin of=gk_flash_K.bin bs=1 skip=$((0x050000)) count=$((0x1a0000))
$ dd if=gk_flash.bin of=gk_flash_R.bin bs=1 skip=$((0x1f0000)) count=$((0x120000))
$ dd if=gk_flash.bin of=gk_flash_A.bin bs=1 skip=$((0x310000)) count=$((0x280000))
$ dd if=gk_flash.bin of=gk_flash_H.bin bs=1 skip=$((0x590000)) count=$((0x270000))



gk_flash_R.bin, gk_flash_A.binがSquashfs、gk_flash_H.binがJFFS2なので、これらをmountして中身を見てみます。ただ、JFFS2は少々手順が必要になるので、Squashfsの方からやってみます。


$ sudo mount ./gk_flash_A.bin /mnt
$ ls /mnt
ca-bundle-add-closeli.crt cloud.ini p2pcam
$ sudo umount /mnt
$ sudo mount ./gk_flash_R.bin /mnt
$ ls /mnt
bin etc init linuxrc mnt opt proc run sys usr
dev home lib media nfsroot p2pcam root sbin tmp var
$
$ ls /mnt/etc/
display hosts issue passwd resolv.conf shadow
fstab init.d mdev.conf profile securetty TZ
group inittab mtab protocols sensors Wireless
hostname inputrc nsswitch.conf random-seed services



gk_flash_R.bin がどうやらビンゴみたいです。passwdもshadowもあります。


$ cat /mnt/etc/passwd
root:abcABCabcABC:0:0::/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
haldaemon:x:68:68:hald:/:/bin/sh
dbus:x:81:81:dbus:/var/run/dbus:/bin/sh
ftp:x:83:83:ftp:/home/ftp:/bin/sh
nobody:x:99:99:nobody:/home:/bin/sh
sshd:x:103:99:Operator:/var:/bin/sh
default:x:1000:1000:Default non-root user:/home/default:/bin/sh



passwdの中身を見ると、どうやらrootはshadow化されてませんね。
ひと手間省くことができます("abcABCabcABC"に置き換えてます)。
"abcABCabcABC"の部分が暗号化されたrootのパスワードです。
このままでは正式なパスワードが分かりません…が、そこは蛇の道は蛇です。その手の解析ツールがあるわけです。John the Ripper password cracker を使います。Ubuntuならapt-getで取得できますが、可能なら自前でコンパイルした方が良いです。理由はあるべきファイルが無かったりするのですよね。実行に支障は無いですが。

Johnさんは兎に角手あたり次第総当たりで見つける手法なのでマシンパワーが必要です。場合によっては月や年単位になるかもです。ま~、でもそこは…実は既にパスワードを知っているので総当たりにルールを適用して時間短縮で見つけ出させました。


$ echo "root:abcABCabcABC:0:0::/root:/bin/sh" > ./root_passwd.txt
$ john ./root_passwd.txt
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Warning: MaxLen = 13 is too large for the current hash type, reduced to 8
Press 'q' or Ctrl-C to abort, almost any other key for status
xyz_0XYZ_1xyz_2XYZ (root)
1g 0:03:12:59 0.000086g/s 3877Kp/s 3877Kc/s 3877KC/s xxxxxxxx..xxxxxxxx
Use the "--show" option to display all of the cracked passwords reliably
Session completed
$ john --show ./root_passwd.txt
root:xyz_0XYZ_1xyz_2XYZ:0:0::/root:/bin/sh

1 password hash cracked, 0 left



3時間かかりました。
解析できたパスワードで実際にログインできることも確認済みです。
スポンサーサイト



tag : Linux

コメントの投稿

非公開コメント

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
08 | 2019/09 | 10
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ Linux RaspberryPi 三段化 6P43P-E 全段差動プッシュプル トランジスタ式ミニワッター 6P43P TRminiWatterPart4 MPD DAC OpenOCD FON2405E buildroot イーサネットコンバータ FM3ペリフェラル Bluetooth BeagleBoneBlack ODROID-U2 library FM3評価ボード mingw OpenGL 6N6P bitbake KiCad 計測 プリアンプ Edison VMware FM4 ミニワッター シングル TL-WR700N 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter