(Lord of SQLInjection) nightmare 문제입니다.
먼저 필터링을 살펴보면 prob, _, . , (, ), # , - 을 필터링하고 있습니다.
처음에는 (, ) 각각 필터링하고 있다고 생각했는데 여러가지를 시도하다 안되서 지인의 힌트를 받았는데
\( | \ ) 과는 다르게 \( \) 은 다른거니 잘 살펴보라고 하더군요
그렇게 힌트를 받아서 알아보니 () 괄호가 이렇게 아무것도 없는 경우에만 필터링을 한다는 것을 알게 되었습니다.
즉 ('')와 같은 상태라면 싱글쿼터 때문에 필터링이 되지 않습니다.
이어서 다음 구문을 살펴보면 strlen( )으로 길이를 6미만으로 제한하고 있습니다.
즉 우리가 입력할 수 있는 공격코드의 길이가 5이어야만 한다는 것을 알 수 있는 부분입니다.
다음 쿼리 부분을 보면 pw=( ' ' ) 상태로 괄호를 감싸고 있는데 싱글쿼터 내부에 pw를 입력할 수 있으니
우리가 공격할 부분이 이 곳입니다.
다만 and id!='admin' 때문에 뒷부분을 주석처리 해주는 것이 필요합니다.
주석처리를 하기위해 # -- %;00 중에서 # 과 - 는 필터링이 걸려있으니 ;%00을 사용해 보겠습니다.
세미콜론(;)다음으로 싱글쿼터가 닫히지 않았는데 주석처리가 정상적으로 작동해 오류가 발생하지 않은 것입니다.
그럼 이제 pw가 true를 출력하게 만들어야 하는데 여기서 많은 삽질이 있었습니다.
결론만 정리하면
pw=(''); 는 값이 없는 상태이므로 ('')=0;으로 작성한다면 pw에는 true 출력이 가능합니다.
=0을 문제사이트에 추가해서 제출해보면
문제가 해결되었습니다!
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) dragon 문제 (0) | 2022.09.25 |
---|---|
(Lord of SQLInjection) xavis 문제 (0) | 2022.09.21 |
(Lord of SQLInjection) zombie_assassin 문제 (0) | 2022.08.31 |
(Lord of SQLInjection) succubus 문제 (0) | 2022.08.31 |
(Lord of SQLInjection) assassin 문제 (0) | 2022.08.24 |