Move challenge into pkg
This commit is contained in:
parent
1c522d1780
commit
7a684f7d03
6 changed files with 3 additions and 3 deletions
59
pkg/challenge/Dockerfile
Normal file
59
pkg/challenge/Dockerfile
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
FROM alpine AS mirror
|
||||
|
||||
RUN mkdir -p /out/etc/apk/ && \
|
||||
cp /etc/apk/repositories /out/etc/apk/ && \
|
||||
cp -r /etc/apk/keys /out/etc/apk/keys
|
||||
|
||||
RUN apk add --no-cache \
|
||||
mdocml-apropos
|
||||
|
||||
RUN apk add --no-cache --initdb -p /out \
|
||||
alpine-baselayout \
|
||||
beep \
|
||||
bind-doc \
|
||||
bind-tools \
|
||||
busybox \
|
||||
ca-certificates \
|
||||
curl \
|
||||
curl-doc \
|
||||
e2fsprogs \
|
||||
ethtool \
|
||||
ethtool-doc \
|
||||
fbida-fbi \
|
||||
fbida-doc \
|
||||
htop \
|
||||
htop-doc \
|
||||
iproute2 \
|
||||
iproute2-doc \
|
||||
kbd \
|
||||
kbd-bkeymaps \
|
||||
kbd-doc \
|
||||
kbd-vlock \
|
||||
man \
|
||||
musl \
|
||||
nano \
|
||||
openssh-client \
|
||||
openssh-doc \
|
||||
openssh-keygen \
|
||||
pciutils \
|
||||
pciutils-doc \
|
||||
ssmtp \
|
||||
ssmtp-doc \
|
||||
tcpdump \
|
||||
tcpdump-doc \
|
||||
testdisk \
|
||||
testdisk-doc \
|
||||
tini \
|
||||
ttf-inconsolata \
|
||||
util-linux \
|
||||
util-linux-doc
|
||||
|
||||
RUN makewhatis /out/usr/share/man
|
||||
|
||||
RUN rm -rf /out/etc/inittab
|
||||
|
||||
|
||||
FROM scratch
|
||||
|
||||
COPY --from=mirror /out/ /
|
||||
COPY lib/ /lib/
|
||||
98
pkg/challenge/adlin
Executable file
98
pkg/challenge/adlin
Executable file
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/sh
|
||||
|
||||
# FUNCTIONS ###########################################################
|
||||
|
||||
# script usage
|
||||
usage() {
|
||||
>&2 cat <<EOF
|
||||
ADLIN token generator
|
||||
EOF
|
||||
}
|
||||
|
||||
# token generator
|
||||
token_generator() {
|
||||
{
|
||||
echo -n ${PKEY}
|
||||
for d
|
||||
do
|
||||
echo -n :${d}
|
||||
done
|
||||
} | sha512sum | cut -d ' ' -f 1
|
||||
}
|
||||
|
||||
# JSON token format helper
|
||||
token_format() {
|
||||
local TID=$1
|
||||
local TOKEN=$2
|
||||
shift 2
|
||||
|
||||
[ $# -gt 0 ] && {
|
||||
local DATA=',
|
||||
"data": [';
|
||||
for d; do
|
||||
[ -z "$Z" ] && Z=1 || DATA="$DATA, "
|
||||
DATA="$DATA\"$d\""
|
||||
done
|
||||
DATA="$DATA]"
|
||||
}
|
||||
|
||||
local challenge=
|
||||
[ -z "${TID}" ] || {
|
||||
challenge="
|
||||
\"challenge\": ${TID},"
|
||||
}
|
||||
|
||||
cat <<EOF
|
||||
{
|
||||
"login": "${ULGN}",${challenge}
|
||||
"token": "${TOKEN}"${DATA}
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
# /proc/cmdline parser (from Gentoo Wiki)
|
||||
cmdline() {
|
||||
local value
|
||||
value=" $(cat /proc/cmdline) "
|
||||
value="${value##* $1=}"
|
||||
value="${value%% *}"
|
||||
[ "$value" != "" ] && echo "$value"
|
||||
}
|
||||
|
||||
|
||||
# GLOBAL VARIABLES ####################################################
|
||||
|
||||
ULGN=$(cmdline adlin.login)
|
||||
PKEY=$(cmdline adlin.key)
|
||||
|
||||
|
||||
# MAIN ################################################################
|
||||
|
||||
[ $# -lt 1 ] && { usage; exit 1; }
|
||||
|
||||
TOKENID="$1"
|
||||
case "${TOKENID}" in
|
||||
token1|token2)
|
||||
HDATA=42
|
||||
;;
|
||||
token3|token6)
|
||||
DATA=$(date +%s%N)
|
||||
;;
|
||||
token4)
|
||||
echo "${TOKENID} is not here! Perhaps it has been accidentally deleted?" >&2
|
||||
exit 2
|
||||
;;
|
||||
token5)
|
||||
HDATA=$(dig +short +time=1 +tries=0 adlin.nemunai.re $2 | sed 's/["\\]//g') || {
|
||||
echo "Try again! Your resolver settings seems not good :(" >&2
|
||||
exit 3
|
||||
}
|
||||
echo $HDATA | grep "not here" 2> /dev/null && exit 3
|
||||
;;
|
||||
*)
|
||||
DATA=$@
|
||||
TOKENID=
|
||||
;;
|
||||
esac
|
||||
|
||||
token_format "${TOKENID#token}" "$(token_generator ${TOKENID#token} ${HDATA} ${DATA})" ${DATA}
|
||||
1
pkg/challenge/build.yml
Normal file
1
pkg/challenge/build.yml
Normal file
|
|
@ -0,0 +1 @@
|
|||
image: challenge
|
||||
93
pkg/challenge/init
Executable file
93
pkg/challenge/init
Executable file
|
|
@ -0,0 +1,93 @@
|
|||
#!/bin/sh
|
||||
|
||||
mount -t proc proc /proc
|
||||
mount -t sysfs sysfs /sys
|
||||
|
||||
/bin/busybox --install -s
|
||||
|
||||
mdev -s
|
||||
|
||||
modprobe snd-pcsp
|
||||
|
||||
# /proc/cmdline parser (from Gentoo Wiki)
|
||||
cmdline() {
|
||||
local value
|
||||
value=" $(cat /proc/cmdline) "
|
||||
value="${value##* $1=}"
|
||||
value="${value%% *}"
|
||||
[ "$value" != "" ] && echo "$value"
|
||||
}
|
||||
|
||||
# Get some command line options
|
||||
USER_LOGIN=$(cmdline adlin.login)
|
||||
USER_PKEY=$(cmdline adlin.key)
|
||||
|
||||
# Define hostname
|
||||
hostname adlin-${USER_LOGIN}
|
||||
|
||||
# Launch some TTYs
|
||||
for i in `seq 2 4`
|
||||
do
|
||||
while true
|
||||
do
|
||||
/usr/bin/setsid /sbin/agetty -l /sbin/fakelogin 38400 "tty${i}" linux
|
||||
done &
|
||||
done
|
||||
|
||||
# Hide us!
|
||||
/bin/rm -f /init /linuxrc
|
||||
|
||||
# Randomize time at boot
|
||||
/bin/date -s 19$((70 + $RANDOM % 30))0$((1 + $RANDOM % 9))0$((1 + $RANDOM % 9))0$((1 + $RANDOM % 9)).0$((1 + $RANDOM % 9))01 > /dev/null
|
||||
/sbin/sysctl -w net.ipv4.ip_default_ttl=4 > /dev/null
|
||||
|
||||
# Launch some daemons
|
||||
/usr/bin/setsid /usr/sbin/crond > /dev/null &
|
||||
|
||||
# Change font
|
||||
zcat /usr/share/consolefonts/Inconsolata-16r.psf.gz | loadfont
|
||||
|
||||
# Prepare token 4
|
||||
mkdir -p /mnt
|
||||
|
||||
for l in a b c d e f g h i j k l m n o p q r s t u v w x y z zz; do
|
||||
[ -b /dev/sd$l ] || break
|
||||
done
|
||||
|
||||
/bin/dd if=/dev/zero of=/dev/sd${l} count=1 > /dev/null 2> /dev/null
|
||||
/bin/dd if=/dev/zero of=/dev/sd${l}1 count=1 bs=10240000 > /dev/null 2> /dev/null
|
||||
/sbin/mkfs.ext4 /dev/sd${l}1 > /dev/null 2> /dev/null
|
||||
mount /dev/sd${l}1 /mnt > /dev/null 2> /dev/null
|
||||
N1=$((72 - $RANDOM % 35))
|
||||
N2=$((25 + $RANDOM % 35))
|
||||
{
|
||||
echo -n $N1
|
||||
echo -n $N2
|
||||
echo -n ${USER_PKEY:$N1:$N2} | sha512sum | cut -d " " -f 1
|
||||
|
||||
} > /mnt/token4
|
||||
sync
|
||||
rm /mnt/token4
|
||||
sync
|
||||
umount /mnt
|
||||
|
||||
|
||||
# Launch requested init
|
||||
if grep init= /proc/cmdline > /dev/null 2> /dev/null
|
||||
then
|
||||
INIT=$(cmdline init)
|
||||
[ -z "${INIT}" ]
|
||||
|
||||
while true
|
||||
do
|
||||
sleep $((10 + $RANDOM % 49))
|
||||
beep -f 1000 -r 2 -n -r 5 -l 10 --new
|
||||
done &
|
||||
|
||||
exec /usr/bin/setsid sh -c "exec '${INIT}' </dev/tty1 >/dev/tty1 2>&1"
|
||||
else
|
||||
while true
|
||||
do
|
||||
/usr/bin/setsid /sbin/agetty -l /sbin/fakelogin 38400 tty1 linux
|
||||
done
|
||||
fi
|
||||
10
pkg/challenge/issue
Normal file
10
pkg/challenge/issue
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
[0;32;40m .o. .o8 [0;36;40mooooo o8o
|
||||
[0;32;40m .888. "888 [0;36;40m`888' `"'
|
||||
[0;32;40m .8"888. .oooo888 [0;36;40m 888 oooo ooo. .oo.
|
||||
[0;32;40m .8' `888. d88' `888 [0;36;40m 888 `888 `888P"Y88b
|
||||
[0;32;40m .88ooo8888. 888 888 [0;36;40m 888 888 888 888
|
||||
[0;32;40m .8' `888. 888 888 [0;36;40m 888 o 888 888 888
|
||||
[0;32;40m o88o o8888o `Y8bod88P" [0;36;40mo888ooooood8 o888o o888o o888o
|
||||
[0;37;40m
|
||||
|
||||
This is [01m\n.pie.epita.net[0m (\s \m) \t
|
||||
Reference in a new issue