[LOS] nightmare
LOS : https://los.rubiya.kr/
✔️ 문제
문제는 다음과 같다.
문자열 길이에 제한이 걸려 있는 것으로 보인다.
✔️ 풀이
풀이를 위한 코드는 다음과 같다.
if($result['id']) solve("nightmare");
strlen 함수로 pw 길이가 6글자를 넘어가지 못하게
막혀있는 것을 확인할 수 있다.
그리고 특이한 것은 id != admin 이면서 pw를 검사하고 있고,
풀이를 위해서는 id 값이 들어가야하는 것이다.
당연히 아무런 반응이 없는 것을 확인할 수 있다.
또한, preg_match 함수로 #과 - 각 주석처리에 대해서
필터링 처리 되어 있는 것을 확인할 수 있다.
생각해볼 수 있는 것이
1) 6글자를 넘지 않는 페이로드이면서
2) #과 - 이외의 주석처리를 진행한다.
이전 참고한 블로그에 나와있는 설명에서 볼 수 있듯이,
/**/ 또는 ;%00 을 통해서 #과 -를 대체하여 주석처리를 할 수 있는데
/**/는 너무 길어서 문자열 제한에 걸리므로 ;%00을 사용해보자.
그러면 이미 벌써 2글자를 사용하고 있고,
앞의 구문을 참으로 만들기 위해서는 ')을 사용해야 한다.
어떻게든 문자열로 구문을 참으로 만들기 위해서
')or1;%00 다음과 같이 작성해보았는데,
문자 하나 차이로 길이 제한에 걸리게 되었다.
그러다가 간략하게 줄일 수 있는 방법을 구글링을 통해서
검색하던 와중에 숫자 없이 문자로만 구성된 문자열은
0으로 형변환이 되면서 ('')=0 구문이 참이 된다는 설명을 보게 되었다.
바로 한번 시도해보았다.
다음과 같이 ')=0 이라는 구문이 1번 조건에 맞게 참이 되고,
;%00 이라는 구문은 #과 - 같이 주석처리 되기 때문에
문제가 풀리는 것을 확인할 수 있다.
화이팅💪