-
[L.O.S] Level 15 - assassinWargame/L.O.S 2022. 12. 5. 03:47반응형
Level 15 - assassin을 풀어보자.
'=' 연산자 대신 사용했던 like에 대한 이해가 필요한 문제이다.
코드를 살펴보면 id 파라미터에 admin을 넣어주면 문제는 해결된다.
그런데 싱글쿼터(')를 필터링하고 있고, pw 파라미터가 들어갈 쿼리는 like로 입력을 하고 있다.

<assassin의 php 코드 내용> like는 문자열을 검색할 수 있는 연산자로, 각종 기호 연산자와 함께 사용할 수 있다.
아래의 사진을 보면, %를 입력했는데 Hello guest가 출력되었다.
%는 모든 문자를 검색할 수 있는 기호 연산자로, 항상 참 값이 나온다고 생각하면 되겠다.
id가 guest인 것은 db에 guest id를 가장 먼저 등록했기 때문이다.

<%를 이용한 참 값 입력> 이러한 성질을 이용하여 먼저 pw의 길이를 구해보도록 하자.
여기서 id가 아닌 pw를 구하는 이유는 입력되는 select 구문을 잘 보면 알 수 있다. (자세한 설명은 생략)
'_' 연산자는 한 글자의 자리를 나타내는 것이다.
아래 작성한 코드의 의미는 자리 수를 length를 곱하여 1씩 늘려 가면서 입력한다.
Hello guest는 입력 값이 참일 때 출력되므로, 자리 수가 맞지 않으면 출력되지 않는다.
그것을 이용해 Hello guest가 출력되었을 때가 pw의 자리 수가 맞는다는 뜻이고, 결과로 8이 나왔다.

<pw의 길이를 구하는 파이썬 코드> 이제 pw를 알아내면 되는데, 자리 수를 맞춰가면서 한 문자씩 입력을 하는 방식을 적용했다.
그 결과 아래의 pw가 나왔다.


<출력된 비밀번호> 하지만, 구한 pw를 입력하면 Hello guest가 출력된다.
사실 위에서 구한 것은 guest id의 pw가 되겠다.
왜나하면 Hello guest가 출력된 것을 기준으로만 pw를 구했기 때문이다.

<guest의 비밀번호> 문제를 해결하는데 필요한 것은 admin의 pw이므로, 코드에 한 가지를 추가해주어야 한다.
그것은 Hello admin이 출력되었을 때의 pw가 무엇인지에 대한 내용이다.
아래의 사진처럼 코드를 추가한 후, 실행하면 admin의 pw가 출력된다.


<admin의 비밀번호> admin의 3번째 인덱스와 6번째 인덱스의 pw가 구해졌다.
'_' 연산자를 사용하여 자리를 맞춘 후, pw를 넣으면 ASSASSIN Clear!가 출력되며 문제가 해결된다.


<assassin 문제 완료> 반응형'Wargame > L.O.S' 카테고리의 다른 글
[L.O.S] Level 17 - zombie_assassin (0) 2022.12.05 [L.O.S] Level 16 - succubus (0) 2022.12.05 [L.O.S] Level 14 - giant (0) 2022.12.04 [L.O.S] Level 13 - bugbear (0) 2022.12.04 [L.O.S] Level 12 - darkknight (0) 2022.12.04