feat: Unmount root partition cleanly
This commit is contained in:
parent
ccc0ea0b5e
commit
15cac26395
1 changed files with 41 additions and 13 deletions
54
infect.sh
54
infect.sh
|
@ -56,23 +56,51 @@ echo '
|
||||||
pivot_root . old_root
|
pivot_root . old_root
|
||||||
rm second_stage.sh
|
rm second_stage.sh
|
||||||
|
|
||||||
apk add alpine-base util-linux-misc syslinux
|
apk add alpine-base util-linux-misc syslinux gdb procps
|
||||||
|
|
||||||
|
_ppid=$$
|
||||||
|
while [[ "$_ppid" != 1 ]]; do
|
||||||
|
parent=$_ppid
|
||||||
|
_ppid=$(cut -f4 -d" " /proc/$parent/stat)
|
||||||
|
done
|
||||||
|
|
||||||
|
busybox kill -- "-$parent"
|
||||||
|
|
||||||
|
cp /etc/inittab /etc/inittab.bak
|
||||||
|
echo "tty1::wait:/sbin/getty -n -l /third_stage.sh 38400 tty1" > /etc/inittab
|
||||||
|
|
||||||
|
# here be dragons
|
||||||
|
|
||||||
|
echo -e "set follow-fork-mode child
|
||||||
|
set solib-absolute-prefix /old_root
|
||||||
|
file /old_root$(cat /proc/1/cmdline)
|
||||||
|
attach 1
|
||||||
|
call (int)execl(\"/sbin/init\", \"/sbin/init\", 0)
|
||||||
|
" | gdb
|
||||||
|
' > second_stage.sh
|
||||||
|
|
||||||
|
echo '#!/bin/ash
|
||||||
|
rm third_stage.sh
|
||||||
|
|
||||||
|
# kill all remaining processes
|
||||||
|
lsof | grep old_root | awk "{print \$1}" | uniq | xargs kill -9 2>/dev/null
|
||||||
|
|
||||||
/bin/umount -Rl old_root/* 2>/dev/null
|
/bin/umount -Rl old_root/* 2>/dev/null
|
||||||
rm -rf old_root/*
|
/bin/umount old_root
|
||||||
|
|
||||||
export DISKOPTS="-k lts /old_root"
|
# get nameservers
|
||||||
echo sys > /tmp/alpine-install-diskmode.out
|
udhcpc
|
||||||
|
|
||||||
|
# restore inittab
|
||||||
|
mv /etc/inittab.bak /etc/inittab
|
||||||
|
|
||||||
|
# maybe ask user what kernel they want? TODO
|
||||||
|
export DISKOPTS="-k lts"
|
||||||
setup-alpine
|
setup-alpine
|
||||||
|
|
||||||
echo "Fixing MBR..."
|
|
||||||
rootdev=$(grep old_root /proc/mounts | cut -d" " -f1 | sed -E "s/[0-9]+$//")
|
|
||||||
dd if=/usr/share/syslinux/mbr.bin of=$rootdev
|
|
||||||
extlinux -i /old_root/boot
|
|
||||||
|
|
||||||
echo "It is now safe to turn off your computer."
|
echo "It is now safe to turn off your computer."
|
||||||
' > second_stage.sh
|
|
||||||
bin/ash second_stage.sh
|
|
||||||
|
|
||||||
# that will probably fail
|
|
||||||
reboot
|
reboot
|
||||||
|
' > third_stage.sh
|
||||||
|
chmod +x third_stage.sh
|
||||||
|
|
||||||
|
setsid bin/ash second_stage.sh
|
||||||
|
|
Loading…
Reference in a new issue