Mango
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 설치할 패키지
이러한 형식으로 설치해야 한다.
실행해보면
플래그가 하나씩 출력되는 것을 확인할 수 있다.