Move challenge into pkg

This commit is contained in:
nemunaire 2019-02-22 01:29:16 +01:00
commit 7a684f7d03
6 changed files with 3 additions and 3 deletions

59
pkg/challenge/Dockerfile Normal file
View 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
View 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
View file

@ -0,0 +1 @@
image: challenge

93
pkg/challenge/init Executable file
View 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
View file

@ -0,0 +1,10 @@
 .o. .o8 ooooo o8o
 .888. "888 `888' `"'
 .8"888. .oooo888  888 oooo ooo. .oo.
 .8' `888. d88' `888  888 `888 `888P"Y88b
 .88ooo8888. 888 888  888 888 888 888
 .8' `888. 888 888  888 o 888 888 888
 o88o o8888o `Y8bod88P" o888ooooood8 o888o o888o o888o

This is \n.pie.epita.net (\s \m) \t