LOS - 26번 red_dragon

sookyeong·2022년 3월 30일
0

[26] red_dragon


문제


풀이

  1. 딱히 필터링 없음

  2. id값이 7자 이내여야함


solve 조건은 admin 계정의 no를 알아내는 것이다.

주어진 쿼리문이다.

$query = "select id from prob_red_dragon where id='{$_GET['id']}' and no={$no}";

이것만 보면 상당히 간단해보이는 문제다.

no를 맞춰주는 것이 목표이기 때문에, id값을 닫아주고 뒷부분을 주석으로 날려준 후 $no는 개행해주면 된다.

이전에 마주친 적이 있었던 것 같은 문제다.


이 경우의 페이로드 예시는 다음과 같다.


[1] id 페이로드

'||no=%23
  • 딱 7자다.

[2] pw 페이로드

%0a[비교할숫자]

페이로드에 의해 변조된 쿼리문은 다음과 같아진다.

$query = "select id from prob_red_dragon where id=''||no=#' and no=
	[비교할숫자]";

따라서, no=[비교할숫자] 일 시 Hello admin이 출력된다.


기다리다보면 나타나겠지의 심산으로

자동화 도구를 이용해 0부터 하나하나 올라가봤지만... 시간이 아무리 지나도 답을 뱉지 않았다.

이유를 고민해보니... 아무래도 엄청 큰 수인 것 같았다.

때문에 no의 대략적인 범위를 찾아내는 것으로 접근 방법을 바꿨다.


새로운 접근의 페이로드 예시는 다음과 같다.


[1] id 페이로드

'||no>%23
  • = ⇒ >

[2] pw 페이로드

%0a[비교할숫자]

먼저, url에 직접 페이로드를 전달하여 대략적인 자릿수를 알아내고자 했다.

그 결과...

찾고 있는 숫자가 무려 500000000대라는 이보다 대략적일 수 없는 정보를 얻었다.

이진탐색을 적용한다고 해도 터무니 없이 큰 숫자다.

별 수 없이 위에서부터 한자리씩 숫자를 바꿔가며 범위를 찾고 있자니...

상당히 찝찝했지만 이틀 밤을 샌 관계로 더 이상은 한계였다...

그냥 내려놓고 찾기로 했다.


한참을 찾은 끝에...

586482013에서는 뜨는 admin이

586482014에서는 뜨지 않는 것을 발견했다!

이로써 답은 586482014임을 확신할 수 있었다...


결과

profile
actions speak louder than words

0개의 댓글