gayeon_ 2022. 9. 29. 19:35

mango 문제에 접속하면 나오는 페이지다

 

 

 

문제 페이지의 js 코드다

 

9번째 라인을 보면 admin, dh, admi 문자열을 필터링해서 막고 있는걸 확인할 수 있다.

 

이용자가 쿼리로 전달한 uid와 upw를 데이터베이스에 검색한다.

필터링 함수 (function(err, result))를 실행하고 결과가 있다면 유저 아이디를 보낸다.

결과가 없다면 undefined를 보낸다.

 

페이로드를 생성한다

= 공격을 하기 위해 데이터를 넣는다

 

 

$regex

= 정규식을 이용해 데이터를 조회할 수 있게 해주는 키워드

 

$in

= 배열 안의 값들과 일치하는 값을 찾는다

 

 

URL 뒤에 /login?uid=guest&upw[$regex]=.*을 붙이니

guest가 출력되었다.

이는 upw를 데이터베이스에서 검색 후 guest라고 출력된 것이다

=> 위 커리가 참이라는 점을 알 수 있다.

 

우회해서 입력하는 이유는

js 파일에서 admin을 필터링했기 때문이다.

 

 

*은 모든 것을 검색하라는 의미이다

admin을 막아두었기 때문에 ad.in으로 우회해서 검색하도록 코드를 작성하였다.

DH도 마찬가지로 D.{로 우회했다.

 

uid : {$regex : ad.in} 로 서버에 입력되어 uid가 admin인 데이터를 의미한다.

upw에서는 blind sql injection의 substr 처럼 한 자리씩 알아낼 수 있다.

 

4번 라인을 보면 두 가지를 + 로 연결해두었는데

플래그는 영문과 숫자가 섞여있기 때문이다.

 

9번 라인의 괄호 안에 있는 부분을 페이로드라고 한다.

 

import 설치할 때 cmd에서 
pip install 설치할 패키지
이러한 형식으로 설치해야 한다.

 

실행해보면

 

성공!

플래그가 하나씩 출력되는 것을 확인할 수 있다.