initrd の root のパスワードをつぶす

LS-WSGL/R1

EM モードや RamRoot でも root になれるよう、 initrd の root のパスワードをつぶす。

先日 は initrd の中身を見る操作を HD-HGLAN で実行したが、 今度は LS-WSGL セルフで作業する。
できるだけ LS-WSGL だけで何でもできるように。

initrd の取り出し

/boot/initrd.buffalo から U-Boot のヘッダを取り除き、 圧縮を解いて initrd を取り出す。

ヘッダの削除

root@LS-WSGL678:/boot# dd if=initrd.buffalo of=initrd.gz bs=64 skip=1
87853+1 records in
87853+1 records out
root@LS-WSGL678:/boot# ls -l initrd*
-rw-r--r--    1 root     root      5622690 Jul 22  2008 initrd.buffalo
-rw-r--r--    1 root     root      5622626 Mar  2 08:29 initrd.gz
root@LS-WSGL678:/boot#

圧縮を解く

root@LS-WSGL678:/boot# gunzip initrd.gz
root@LS-WSGL678:/boot# ls -l initrd*
-rw-r--r--    1 root     root     16777216 Mar  2 08:30 initrd
-rw-r--r--    1 root     root      5622690 Jul 22  2008 initrd.buffalo
root@LS-WSGL678:/boot# file initrd
initrd: Linux rev 1.0 ext2 filesystem data
root@LS-WSGL678:/boot#

initrd のマウント

中身にアクセスするためマウントする。
root@LS-WSGL678:/boot# mount -o loop initrd /tmp/root
mount: could not find any device /dev/loop#
root@LS-WSGL678:/boot#
がー。

loop デバイスの作成

/dev/loop# が見つからないとのことなので、/dev/loop0 を作る。
root@LS-WSGL678:/boot# ls /dev/M*
ls: /dev/M*: No such file or directory
root@LS-WSGL678:/boot#
/dev/MAKEDEV がないので、手で作る。

loop デバイスは、ブロック型、メジャーは 7、マイナは loop0 なら 0

root@LS-WSGL678:/boot# mknod /dev/loop0 b 7 0
root@LS-WSGL678:/boot# 

initrd のマウント(再)

もう一度マウント。こんどこそ。
root@LS-WSGL678:/boot# !mount
mount -o loop ./initrd /tmp/root
/sbin/hotplug [block]
root@LS-WSGL678:/boot# ls /tmp/root
bin         lib         lost+found  root        sys         var
dev         libexec     mnt         rootfs      tmp
etc         linuxrc     proc        sbin        usr
root@LS-WSGL678:/boot#

パスワードをつぶす

/tmp/root/etc/shadow の root のパスワードを消す
root@LS-WSGL678:/boot# vi /tmp/root/etc/shadow
	:
	:
root@LS-WSGL678:/boot# grep root !$
grep root /tmp/root/etc/shadow
root::11009:0:99999:7:::
root@LS-WSGL678:/boot#

initrd のアンマウント

root@LS-WSGL678:/boot# umount /tmp/root
/sbin/hotplug [block]
root@LS-WSGL678:/boot#

initrd.buffalo の作成

逆の手順で initrd.buffalo を作る

圧縮

root@LS-WSGL678:/boot# ls -l initrd
-rw-r--r--    1 root     root     16777216 Mar  2 08:30 initrd
root@LS-WSGL678:/boot# gzip initrd
長い...
root@LS-WSGL678:/boot# ls -l initrd.*
-rw-r--r--    1 root     root      5622690 Jul 22  2008 initrd.buffalo
-rw-r--r--    1 root     root      5596070 Mar  2 08:43 initrd.gz
root@LS-WSGL678:/boot#

mkimage ...

次は mkimage で U-Boot のフォーマットに変換するのだが、、
root@LS-WSGL678:/boot# mkimage
sh: mkimage: command not found
root@LS-WSGL678:/boot#
当たり前のことながら LS-WSGL 標準ファームに mkimage はない。

仕方がないので、LS-HGL ハックキットから持ってきた。

root@LS-WSGL678:/boot# cd /
root@LS-WSGL678:/# tar zxvf /mnt/disk1/share/LS-HGL_hackkit_1.00.tar.gz ./usr/local/sbin/mkimage
./usr/local/sbin/mkimage
root@LS-WSGL678:/# mkimage -l /boot/initrd.buffalo
sh: /usr/local/sbin/mkimage: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
root@LS-WSGL678:/#
うごかんかぁ。
root@LS-WSGL678:/# ls -l /lib/ld-linux.so*
lrwxrwxrwx    1 root     root           11 Nov  1 02:03 /lib/ld-linux.so.3 -> ld-2.3.6.so
root@LS-WSGL678:/# cd /lib
root@LS-WSGL678:/lib# ln -s ld-2.3.6.so ld-linux.so.2
root@LS-WSGL678:/lib# ls -l /lib/ld-linux.so.*
lrwxrwxrwx    1 root     root           11 Mar  2 09:08 /lib/ld-linux.so.2 -> ld-2.3.6.so
lrwxrwxrwx    1 root     root           11 Nov  1 02:03 /lib/ld-linux.so.3 -> ld-2.3.6.so
root@LS-WSGL678:/lib# !mkimage
mkimage -l /boot/initrd.buffalo
mkimage: /lib/libc.so.6: version `GLIBC_2.0' not found (required by mkimage)
root@LS-WSGL678:/lib#
くそー。OABI で作った mkimage はうごかんか。

仕方がないので、LS-HGL ハックキットをまるごと展開する。

root@LS-WSGL678:~# cd /mnt/disk1/share/
root@LS-WSGL678:/mnt/disk1/share# ls
LS-HGL_hackkit_1.00.sh      LS-HGL_hackkit_1.00.tar.gz
root@LS-WSGL678:/mnt/disk1/share# mkdir root
root@LS-WSGL678:/mnt/disk1/share# cd root
root@LS-WSGL678:/mnt/disk1/share# tar zxvf ../LS-HGL_hackkit_1.00.tar.gz
	:
	:
root@LS-WSGL678:/mnt/disk1/share/root#
root@LS-WSGL678:/mnt/disk1/share/root# chroot .
sh-3.1# mkimage
Usage: mkimage -l image
          -l ==> list image header information
       mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
          -A ==> set architecture to 'arch'
          -O ==> set operating system to 'os'
          -T ==> set image type to 'type'
          -C ==> set compression type 'comp'
          -a ==> set load address to 'addr' (hex)
          -e ==> set entry point to 'ep' (hex)
          -n ==> set image name to 'name'
          -d ==> use image data from 'datafile'
          -x ==> set XIP (execute in place)
sh-3.1# exit
exit
root@LS-WSGL678:/mnt/disk1/share/root#
ジェイルの中ならいけそう。
その前に掃除
root@LS-WSGL678:/mnt/disk1/share/root# rm /usr/local/sbin/mkimage /lib/ld-linux.so.2
root@LS-WSGL678:/mnt/disk1/share/root# 
initrd.gz をジェイル内にコピーする。
root@LS-WSGL678:/mnt/disk1/share/root# cp /boot/initrd.gz boot
root@LS-WSGL678:/mnt/disk1/share/root# ls boot
initrd.gz
root@LS-WSGL678:/mnt/disk1/share/root#
mkimage で initrd.buffalo を作る
root@LS-WSGL678:/mnt/disk1/share/root# chroot .
sh-3.1# /usr/local/sbin/mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initrd -d /boot/initrd.gz /boot/initrd.buffalo
Image Name:   initrd
Created:      Sun Mar  2 09:27:59 2008
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    5596070 Bytes = 5464.91 kB = 5.34 MB
Load Address: 0x00000000
Entry Point:  0x00000000
sh-3.1#
行けたっぽい。

ジェイルを抜ける

sh-3.1# exit
exit
root@LS-WSGL678:/mnt/disk1/share/root#

/boot/initrd.buffalo の置き換え

root@LS-WSGL678:/mnt/disk1/share/root# cd /boot
root@LS-WSGL678:/boot# mv initrd.buffalo initrd.buffalo.orig
root@LS-WSGL678:/boot# cp /mnt/disk1/share/root/boot/initrd.buffalo .
root@LS-WSGL678:/boot# ls -l initrd.buffalo*
-rw-r--r--    1 root     root      5596134 Mar  2 09:30 initrd.buffalo
-rw-r--r--    1 root     root      5622690 Jul 22  2008 initrd.buffalo.orig
root@LS-WSGL678:/boot#

再起動

まずは普通に再起動する。
	:
	:
Using device ide0, partition 1

Loading from block device ide device 0, partition 1: Name: hda1
  Type: U-Boot  File:/uImage.buffalo

1757556 bytes read
   Image Name:   Linux-2.6.16.16-arm1
   Created:      2008-07-22   7:22:37 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1757492 Bytes =  1.7 MB
   Load Address: 00008000
   Entry Point:  00008000
Using device ide0, partition 1

Loading from block device ide device 0, partition 1: Name: hda1
  Type: U-Boot  File:/initrd.buffalo

5596134 bytes read
   Image Name:   initrd
   Created:      2008-03-02   0:27:59 UTC
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    5596070 Bytes =  5.3 MB
   Load Address: 00000000
   Entry Point:  00000000
Using device ide1, partition 1
	:
	:
ちゃんと 2008-03-02 になっている。
置き換え自体は成功。

BUFFALO INC. LinkStation series
LS-WSGL678 login:
普通に立ち上がってきた。

次は、RamRoot

	:
	:
linuxrc:choose operation (timeout 4[s])
 1:RamRoot other:HddRoot  ? 1
-RamdiskRoot-
	:
	:
BUFFALO INC. LinkStation series
LS-WSGL-EM678 login: 
こちらも無事立ち上がってきた。

root でログイン

BUFFALO INC. LinkStation series
LS-WSGL-EM678 login: root
login[1229]: root login  on `ttyS0'



BusyBox v1.1.1 (2008.07.15-06:14+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

#
でけた。

LinkStation Mini
LS-WSGL
楽天市場
Amazon
Yahoo!ショッピング
Livedoor デパート
Sofmap
TSUKUMO ネットショップ
ムラウチドットコム
ヤマダ電機WEB
パソQ


スーパーブロック
ハックの記録
LinkStation/玄箱 をハックしよう

EM モードに root でログイン

Copyright (C) 2003-2008 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市