CTF/웹해킹

[HackArmour CTF] LeChunk is back! - 웹해킹 / NoSQL Injection

SecurityMan 2022. 5. 30. 11:00

 

쉬운 난이도의 웹해킹 문제

 

이번 대회는 참 컨셉에 충실한것 같다.

 

반응형

 

문제 제목에 나오는 LeChuck은 Monkey Island 라는 게임 시리즈에 나오는 언데드 해적 선장이라고 한다.

 

나는 처음 들어본 게임인데 영미권에서는 꽤나 유명한 게임인듯 보였다.

 

 

문제 설명을 보아하니 LeChuck이 내 웹 페이지를 털어갔는데

 

아마 이 빌런이 시그니처를 어딘가에 남겨 놓았을 거라고 알려준다.

 

그 시그니처를 찾는게 문제의 목표인듯 하다.

 

문페 파일은 따로 주어지지 않고, 문제페이지 주소만 주어진다.

 

 

문제 페이지에 접속해보면 위에 보이는 화면이 다다.

 

검은 바탕에 Hi there! Welcome to the CTF... 라고 적혀있고

 

입력창, 버튼 등등 아무것도 없다.

 

 

일단 문제를 풀기위한 경로를 먼저 찾아야 할 것 같아서 

 

이것 저것 시도해 봤다.

 

가장 먼저 robots.txt 경로를 시도해봤는데 Nothing to see here... 이라고 나오는거 보니

 

이 경로는 아닌듯 했다.

 

 

여러번의 시행착오를 겪은 끝에 드디어 경로를 찾아냈다.

 

/user 경로로 접근을 하면

 

아까와 달리

 

To get info about a user, user the syntax : /user/<username> 이라는 문구가 나온다.

 

이 페이지를 통해서 사용자 정보를 불러올 수 있는듯 하다.

 

 

username에 관한 어떤 정보도 없었기에 일단 /1 을 입력해봤다.

 

그랬더니 No results found for this query 라는 문구가 나왔다.

 

query 라는 단어를 보고 느낌이 팍 왔는데

 

NoSQL Injection 을 해서 푸는 문제인 것 같았다.

 

NoSQL 이란 전통적인 관계형 데이터베이스 보다 덜 제한적인 데이터베이스를 의미한다.

 

특히나 최근 빅데이터 관련해서 아주 많이 사용되고 있는 데이터베이스의 한 종류이다.

 

NoSQL 역시 관계형 데이터베이스 처럼 Injection이 가능하다.

 

NoSQL로 username이 hello 인 사람을 조회할 때

 

User.find({"username" : "hello"}) 이런식으로 조회를 할 텐데

 

hello가 들어갈 부분에 정상적인 username이 아닌 페이로드를 넣어주면 인젝션을 할수 있을 것이다.

 

 

주소창의 username을 입력하는 곳에 /{"$ne": null} 라고 입력했더니 플래그가 출력되었다.

(주소창에 %7B, %20, %7D는 해당 문자가 URL 인코딩이 되어서 그렇게 보이는 것이다.)

 

$ne 는 Not Equal 을 의미한다.

 

{"$ne": null} 라고 입력해주면 {"username" : {"$ne": null}} 이렇게 쿼리가 들어가면서

 

username이 null과 같지 않은 모든 값이 출력되게 되는것이다.

반응형