ObjectID란?
- ObjectID는 몽고디비의 data type 중 하나로, 주로 PK의 데이터 타입으로 사용된다.
- 몽고디비의 모든 도큐먼트는 _id 필드를 가진다. _id는 어떤 타입이여도 상관없지만 컬렉션 내에서 unique해야 한다.
- _id의 디폴트 타입은 ObjectID 타입이며, ObjectID를 개발자가 입력하지 않았다면 MongoDB 드라이버가 만들어준다.
- rdb에서처럼 auto_increment하는 키를 pk로 사용하지않는 이유는 몽고디비가 분산 환경에서 사용되기 때문이다. (샤딩된 환경에서 고유 식별자로 사용)
- ObjectID는 위 그림과 같이 12바이트이며, 시간+랜덤 값+count의 조합이다.
- count도 랜덤 값으로 서로 다른 시스템에서 충돌되지 않는 ObjecdtID를 생성하지 않도록 만든 값
이 문제를 풀기 위해서는 위에 적은 objectid를 이해해야한다.
페이지에 접속하면 게시글마다 게시글번호(no)가 있는데 objectid 구조를 알면 패턴이 보인다.
랜덤값은 모두 같고 count는 두번째 글에서 +1, 시간값은 65~6b 사이에 있다는 것을 알 수 있다.
/api/board/<objectid> 에 하나씩 넣어보면 플래그를 얻을 수 있다.
'dreamhack' 카테고리의 다른 글
[Dreamhack] amocafe (0) | 2024.02.07 |
---|---|
[Dreamhack] proxy-1 (0) | 2024.02.02 |
[Dreamhack] Command Injection Advanced (0) | 2024.02.02 |
[Dreamhack] sql injection bypass WAF (0) | 2024.02.01 |
[Dreamhack] error based sql injection (0) | 2024.02.01 |