adding validated services? patching forcad_local.py
This commit is contained in:
85
OmCTF-2025/checkers/polyphonia/test_checker.sh
Executable file
85
OmCTF-2025/checkers/polyphonia/test_checker.sh
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/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}"
|
||||
Reference in New Issue
Block a user