본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 03 :: SQL Injection (Hidden Field)


▼ Challenge 03은 다음과 같습니다.



Search Engine을 이용한 결과 네모로직 퍼즐이라고 합니다.


네모 부분을 클릭하면 JavaScript에 의해 색상이 Black으로 바뀌고 "kk._1~25" 값이 변경됩니다.

이 값들을 열거해 놓은 "answer" 변수를 GET 방식으로 전송하여 일치하면 다음 페이지로 넘어갑니다.


네모로직 퍼즐을 푸는 방법은 검색하시기 바랍니다.


 퍼즐을 맞추면 다음과 같은 페이지가 나옵니다.



Input Form에 무엇을 입력하여도 문제가 풀릴 기미가 보이지 않습니다.

SQL Injection을 해도, 그대로 출력만 됩니다.


name을 입력 받는 페이지에서 소스를 보니, Hidden Field로 "answer" 변수를 전송하고 있습니다.

이곳에 Singe Quote를 입력하여 전송하니, "no hack"이라는 문구가 뜹니다.


이 곳에 SQL Injection을 해야 겠다는 느낌이 팍! 옵니다.


입력 폼에 입력한 값이 DB에 INSERT 되고, SELECT 되어 출력되고 있는 것 같습니다.


 다음과 같은 Query문을 예상해 봅니다.


1
2
3
4
5
// 삽입 Query
INSERT INTO 테이블명 VALUES ('name''answer''ip') ;
 
// 출력 Query
SELECT name, answer, ip FROM 테이블명 WHERE name='***' and answer="***" ;
cs



SELECT 구문에서 "True & False"를 이용하여 전체 데이터를 출력해 보면 어떨까요?


 다음과 같은 Query를 만들수 있습니다.



앞 부분이 True 이든 False 이든, or 뒷 부분이 True 이기 때문에 Always True가 되어, 전체 데이터가 출력됩니다.


( True는 임의의 숫자로 대체 가능합니다. SQL에서는 숫자를 True로 인식합니다. )


실제 문제에서는 "or" 문자가 필터링되어 있으므로, "||" 문자를 이용하여 

"answer" 변수를 조작한 뒤 전송하면 됩니다.