2022년 사이버공격방어대회 (CCE) BabyWeb Write Up 입니다.

문제에 접속하면 텍스트박스와 제출 버튼이 보입니다.

해당 서버는 다음과 같은 파일로 구성되어 있습니다.

먼저 public/app.py 입니다. 이 코드의 핵심은 try문 안에 있습니다.
48번째 라인을 return하는 것이 목적인 것으로 보입니다.
또한, flag.service를 필터링하는것으로 보아, 해당 인자를 필터링을 우회하여 전달해야 하는 것으로 보입니다.

Internal/app.py 소스코드 입니다. [그림 2.3]의 48번 함수 get()을 호출하면 실행되는 코드로 보입니다. 10번 라인에서, flag.service가 들어오면 FLAG를 return하도록 구성되어 있는 것을 확인할 수 있습니다.
8번 라인에서 URL이 /flag로 구성되어 있어서, 최종적으로 전달해야 할 인자는 http://flag.service/flag입니다.

그러나 그대로 전송하게 되면, 코드에서 확인한 것처럼 필터링에 걸립니다.
보통 CTF에서 문자열 필터링을 하게 되면, 특정 문자열과 특수문자들을 걸러내게 됩니다. 그러나 [그림 2.3]의 코드를 다시 확인해보면, 특수문자를 필터링하는 구문이 존재하지 않습니다. 따라서, URL에서 사용하는 URL Encoding 방식으로 인자를 전달하면 필터링 우회가 가능할 것으로 보입니다.
한 글자만 변환해도 우회가 가능합니다.
f는 %66이므로, http://%66lag.service/flag를 입력하면 됩니다.

해당 문자열을 입력하면 flag가 출력됩니다.
'CTF > ETC' 카테고리의 다른 글
| [CTF] CCE2022 reborn of php Write-Up | Web (0) | 2026.03.10 |
|---|
댓글