[그림 01] level3 시작화면
level3의 시작은 [그림 01]과 같습니다.
index.php에서는 이와 같은 퍼즐을 보여줍니다.
퍼즐의 의미를 먼저 파악하는 것이 우선일 것 같습니다.
의미는 다음과 같습니다.
가로 세로, 각 숫자만큼의 네모(색칠된 네모)가 있어야 합니다.
퍼즐을 풀게 되면 [그림 02]와 같은 모습이 됩니다.
[그림 02] 퍼즐이 해결된 모습
[그림 02]와 같이 만든 이후 gogo를 클릭하면 다음 화면으로 넘어갈 수 있습니다.
[그림 03] SQL 인젝션을 요구하는 듯한 입력창
네, 그렇습니다. 저 빈 칸으로 되어 있는 부분이 굉장히 눈에 들어옵니다.
마치 SQL 인젝션을 해달라고 도발하는 듯한 빈 칸입니다. 건방집니다. 파헤칩시다.
[그림 04] 아무 값이나 넣었을 때의 모습
일단 111이라는 아무런 값이나 넣어보니 다음과 같은 name, answer, ip가 나옵니다.
이 때 우리가 111을 넣었을 때 어떻게 서버로 전달이 되는지 파악해보는 것이 필수입니다.
[그림 05] 서버로 전송되는 쿼리에 대해
GET 형태로는 http://webhacking.kr/challange/web/web-03/index.php?_1=1&_2=0 뭐시기 뭐시기 .... _25=1&_answer=1010100000011100101011111을 넘기고 있는 것을 볼 수 있고,
POST로는 뒤의 answer=1010100000011100101011111가 넘겨지는 것을 볼 수 있습니다.
DB에서 Select를 할 때 어떻게 되는지는 모르지만 가설을 세워봅시다.
만약
SELECT 뭐시기 FROM 뭐시기 WHERE id=' 입력값 ' and answer=1010100000011100101011111 |
라면 WHERE의 조건문을 TRUE로 만들어줘야 할 것입니다.
[그림 06] 필터링 되는 값
아마 [그림 06]에는 다 표현하지 못했지만, 따옴표, 역슬래쉬 등이 필터링 되는 것을 확인할 수 있다.
따옴표가 필터링이 된다는 것은 name : 으로 된 부분에서는 SQL 인젝션이 막혀있다는 것입니다.
그렇다면 다른 곳에서 WHERE의 TRUE를 만들어야 할 것입니다.
POST로 넘어가는 answer에서 그 해답을 찾아보도록 합시다.
조건문 가설 : WHERE id=' 입력값 ' and answer=1010100000011100101011111
WHERE를 TRUE로 만들기 위해서는 WHERE (뭐시기 뭐시기) or (TRUE)를 해버리면
WHERE ((뭐시기 뭐시기) or (TRUE))가 되어 결론, TRUE가 됩니다.
WHERE id=' 입력값 ' and answer=1010100000011100101011111 or 1 을 하면 TRUE가 되지 않을까 합니다.
answer에 들어가는 값은 int값이므로 따옴표가 없습니다.
POST의 answer 값에 or를 이용하여 쿼리를 날리면 'no hack'을 반환합니다.
int라는 가정으로 || 로 or를 대신하여 값을 보냅니다.
하지만 answer=1010100000011100101011111 || 1를 해도 아무런 변화도 없습니다.
id 값이 NULL이면 처음 창으로 돌아가게 됩니다.
따라서 '&id=아무런 값'도 함께 POST로 넘겨주면 해답이 나오게 됩니다.
[그림 07] 해답
'WARGAMES > webhacking.kr - old' 카테고리의 다른 글
Webhacking.kr_No.15(50) - old (0) | 2016.06.28 |
---|---|
Webhacking.kr_No.14(100) - old (0) | 2016.06.28 |
Webhacking.kr_No.12(250) - old (0) | 2016.06.28 |
Webhacking.kr_No.10(250) - old (0) | 2016.06.28 |
Webhacking.kr_No.06(100) - old (0) | 2016.06.28 |
Webhacking.kr_No.05(300) - old (0) | 2016.06.26 |
Webhacking.kr_No.04(150) - old (0) | 2016.06.22 |
Webhacking.kr_No.01(200) - old (0) | 2016.06.16 |