[그림 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

+ Recent posts