Today I Learned …
[Lord of SQL Injection] 26번 red_dragon 풀이 본문
* 개인적인 공부 내용을 기록한 글입니다.
이전 문제
https://choco4study.tistory.com/116
26번 문제 red_dragon 분석 및 풀이
26번 문제는 다음과 같다.
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임을 확신할 수 있었다...ㅎ
어쨌든 답을 넣어보면...
26번 문제가 풀리긴 하는데... 이걸 풀었다고 할 수 있나?
일단 자고 일어나서 다시 코드로 짜봐야겠다...
다소 속상하고 찝찝한 클리어다ㅠ
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] 28번 frankenstein 풀이 (0) | 2021.12.25 |
---|---|
[Lord of SQL Injection] 27번 blue_dragon 풀이 (0) | 2021.12.23 |
[Lord of SQL Injection] 25번 green_dragon 풀이 (0) | 2021.12.19 |
[Lord of SQL Injection] 24번 evil_wizard 풀이 (0) | 2021.12.18 |
[Lord of SQL Injection] 23번 hell_fire 풀이 (0) | 2021.12.16 |