-
[L.O.S] Level 30 - ouroborosWargame/L.O.S 2023. 1. 2. 03:31반응형
Level 30 - ouroboros를 풀어보자.
문제 풀이의 방향은 잡았지만, 그 방법을 몰라 오래 걸렸고 결국 다른 write-up을 참고한 문제이다.
소스 코드를 보면 pw의 값을 찾는 간단한 문제이다.
필터링은 rollup과 join이 되고 있는데, 크게 신경을 쓰지 않아도 될 것 같다.

<ouroboros의 php 소스 코드> pw에 항상 참 값을 입력해도 출력되는 것이 없다.
아마도 테이블에 값이 없는 듯 한데, union select를 이용해 확인해보도록 하자.
아래의 사진처럼 union select 1을 입력하였을 때, Pw : 1이 출력되는 것을 볼 수 있다.

<union select를 이용한 출력> 그런데 과연 이 문제를 어떻게 해결해야 하는 것일까??
문제의 테이블에 값이 없는데, 입력한 pw와 result의 pw가 같아야 문제가 해결된다.
아마 내가 입력한 값이 그대로 테이블에 저장이 되고, 그것을 출력하면 되지 않을까??
여기까지 생각하고 union select를 이용해 많은 시도를 했지만, 결국 문제를 해결할 수 없었다.
그래서 구글링을 한 결과, 이 문제를 해결하기 위해서는 Quine의 개념을 알아야 한다는 것을 알게 되었다.
Quine은 입력한 자신의 코드를 그대로 반환하는 프로그램을 의미한다.
(자주는 아니지만, 일부 Wargame이나 CTF 등에서 사용된다고 한다.)
정확히 이 문제에서 필요한 프로그램이다.
기본적인 형태는 union select와 replace를 사용하는 것으로, 많은 설명들이 있어 자세한 것은 생략한다.
아래의 사진처럼 입력을 하면 OUROBOROS Clear!가 출력되며 문제가 해결된다.

<ouroboros 문제 완료> 설명을 생략하는 가장 큰 이유는 잘 모르기 때문이다.
많은 블로그들을 참고하였지만, 어떻게 동작을 하는지를 제대로 이해하지 못했다.
중요한 것은 아니라지만 이러한 것이 존재한다는 것을 알게 된 이상 이해할 수 있도록 공부해야겠다.
반응형'Wargame > L.O.S' 카테고리의 다른 글
[L.O.S] Level 31 - zombie (0) 2023.01.04 [L.O.S] Level 29 - phantom (0) 2023.01.01 [L.O.S] Level 28 - frankenstein (0) 2022.12.31 [L.O.S] Level 27 - blue_dragon (0) 2022.12.30 [L.O.S] Level 26 - red_dragon (0) 2022.12.28