글 작성자: 근삼이


WEB Level 6

Level6에 들어가면 5개의 게시글이 올라온 게시판이 하나 나옵니다. 

눈에 들어오는 1번 게시물을 보면 “Reading suninatas's Writing!^^” 이라는 힌트 아닌 힌트가 써져있습니다. 

2번 게시물에는 md5 해시를 인/디코딩 할 수 있는 사이트의 링크가 보입니다. (https://md5hashing.net/

4번과 5번 게시물에는 의미를 알 수 없는 말들이 써져있었습니다.




3번 게시물을 클릭하자, 팝업창이 하나 떴습니다. Password를 입력하라는 메시지가 떠 있었는데, 친절하게도 입력한 패스워드가 어떻게 쿼리 되는지에 대한 쿼리문이 아래에 자세하게 나와 있었습니다. 

사용자가 적절한 패스워드를 입력하면, T_Web13 이라는 테이블에서 nldx값이 3인 라인szPwd라는 컬럼을 참조하는 쿼리 문이었습니다. 

SQL 인젝셕 공격을 시도하여, Password에 [ ‘1 or '1'='1' -- ] 이라는 무조건 참이 되는 값을 입력하여 우회해 보려 하였으나, "No Hacking!!"이라는 메시지가 뜨면서, 쿼리문이 전달되지 않았습니다. 

여러 테스트를 해보았더니, 해당위치의 입력하는 필드에는 ’=‘ 문자, ’and', 'union', 'select', '(', ')', 'from', '#', 'desc', 'order', 'by', 'having', 'group by' 등의 문자열들이 필터링이 되고 있었습니다. 



하지만, 필터링이 부족했습니다. 테스트를 통해 알아낸 결과, 해당 필드는 ‘like'나 부등호(>, <) 등이 가능했습니다. 따라서 다음과 같은 구문들로 필터링을 우회하여 원하는 참 구문을 전달 할 수 있었습니다.


개요

부족한 필터링으로 ‘<’ , ‘>’ , ‘like' 사용가능

사용 예시

1' or '1' like '1' --

1' or '2' like '2' --1' or '1' < '2' --

1' or '2' > '1' --


위 우회방법은 가장 기본적인 형태의 우회입니다. 필터링 우회는 필터링 처리방식이나, 필터링 설정 위치에 따라 그 형태가 무시무시하게 다양하기 때문에 다양한 우회 형식에 대해서 찾아보고, 자신만의 우회 방식을 연구해볼만한 가치가 있습니다.


다시 본론으로 돌아와서, 위와 같은 구문으로 쿼리문을 전달했더니, “Congratulation!! auth_key is suninatastopofworld! Now, you can read this article." 이라는 팝업이 뜬 직후, 접근 권한이 없다는 메시지가 출력이 되는 것을 볼 수 있었습니다. 

메시지로 보아서는, 쿼리문 전달에는 성공하였지만, ‘suninatastopofworld!’ 라는 주어진 힌트를 이용해서 접근해야 한다는 것을 알 수 있었습니다. 



인증정보를 전달해야 하기 때문에, 쿠키정보를 확인해 보았더니, auth_key라는 이름의 쿠키가 존재했습니다.

auth_key필드의 값을 suninatastopofworld! 로 변조하여 페이지를 요청하였으나, 기대와는 다르게 접근권한이 없다고 나왔습니다. 고민하며 게시글들을 다시 읽어보는데, md5 해시 사이트가 눈에 보였습니다.



사이트에 들어가서 suninatastopofworld! 문구를 md5로 해시하였더니, 65038b0559e459420aa2d23093d01e4a입니다. 나온 해시값을 다시 쿠키값의 auth_key 필드에 넣어고 페이지를 다시 요청해 보았더니, 드디어 페이지가 정상적으로 나옵니다. 

열린 페이지에는 “KeyFinding^^” 이라는 문구가 써져있고, 아무것도 없었습니다. 해당 페이지의 소스를 보았더니 아래와 같은 정보가 있습니다.



소스코드에 위와같이 "KEY_HINT" 와 "Rome's First Emperor" 이라는 힌트정보가 들어있습니다. 말 그대로 해석해보면, 로마의 첫 번째 황제가 누구인지 물어보는 것 같습니다. 



AUTH KEY 입력하는 곳에 '로마의 첫 번째 황제 이름을 입력하자 성공하였습니다.

반응형