86 lines
1.9 KiB
Bash
Executable File
86 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Simple helper to exercise checker.py in check/put/get modes.
|
|
|
|
set -u
|
|
set -o pipefail
|
|
|
|
HOST=${POLYPHONIA_TEST_HOST:-127.0.0.1}
|
|
if [[ -v POLYPHONIA_TEST_FLAG ]]; then
|
|
FLAG=${POLYPHONIA_TEST_FLAG}
|
|
else
|
|
# Default to attack-defence style flag: 31 chars of A-Z0-9 plus '='
|
|
FLAG="$(LC_ALL=C tr -dc 'A-Z0-9' </dev/urandom | head -c 31)="
|
|
fi
|
|
FLAG_ID=${POLYPHONIA_TEST_FLAG_ID:-placeholder-flag-id}
|
|
VULN=${POLYPHONIA_TEST_VULN:-1}
|
|
PRESET_STORED=${POLYPHONIA_TEST_STORED:-}
|
|
|
|
RUN_LAST_STDOUT=""
|
|
RUN_LAST_STDERR=""
|
|
|
|
print_cmd() {
|
|
printf '$'
|
|
for arg in "$@"; do
|
|
printf ' %q' "$arg"
|
|
done
|
|
printf '\n'
|
|
}
|
|
|
|
run_checker() {
|
|
local stdout_file
|
|
local stderr_file
|
|
stdout_file=$(mktemp)
|
|
stderr_file=$(mktemp)
|
|
|
|
print_cmd python3 checker.py "$@"
|
|
python3 checker.py "$@" >"${stdout_file}" 2>"${stderr_file}"
|
|
local code=$?
|
|
RUN_LAST_STDOUT=$(cat "${stdout_file}")
|
|
RUN_LAST_STDERR=$(cat "${stderr_file}")
|
|
rm -f "${stdout_file}" "${stderr_file}"
|
|
|
|
if [[ -n "${RUN_LAST_STDOUT}" ]]; then
|
|
printf '%s\n' "${RUN_LAST_STDOUT}"
|
|
else
|
|
echo "<stdout empty>"
|
|
fi
|
|
|
|
if [[ -n "${RUN_LAST_STDERR}" ]]; then
|
|
printf '%s\n' "${RUN_LAST_STDERR}" >&2
|
|
else
|
|
printf '<stderr empty>\n' >&2
|
|
fi
|
|
|
|
echo "exit code: ${code}"
|
|
return "${code}"
|
|
}
|
|
|
|
run_checker check "${HOST}"
|
|
check_code=$?
|
|
|
|
run_checker put "${HOST}" "${FLAG_ID}" "${FLAG}" "${VULN}"
|
|
put_code=$?
|
|
|
|
stored_flag_id="${PRESET_STORED}"
|
|
|
|
if [[ -z "${stored_flag_id}" ]]; then
|
|
if [[ ${put_code} -eq 101 && -n "${RUN_LAST_STDOUT}" ]]; then
|
|
stored_flag_id=$(printf '%s' "${RUN_LAST_STDOUT}" | tail -n 1)
|
|
else
|
|
stored_flag_id="${FLAG_ID}"
|
|
fi
|
|
fi
|
|
|
|
run_checker get "${HOST}" "${stored_flag_id}" "${FLAG}" "${VULN}"
|
|
get_code=$?
|
|
|
|
exit_code=0
|
|
for code in "${check_code}" "${put_code}" "${get_code}"; do
|
|
if [[ ${code} -ne 101 ]]; then
|
|
exit_code=${code}
|
|
break
|
|
fi
|
|
done
|
|
|
|
exit "${exit_code}"
|