(Lord of SQLInjection) cyclops 문제입니다.
잘못알고 있는게 있다면 알려주시는 댓글은 언제나 환영입니다.

제공되는 코드를 보면 id가 first이며 pw는 second이어야 한다고 합니다.
추가로 친절하게 주석에는 union select를 사용하라고 알려줍니다.
일단 이전 문제들과 동일하게 CRS방화벽이 걸려있다고 생각하고
문제에 접근하였습니다.
이전에 사용한 CRS를 우회하는 코드를 변형해서 사용하기로 했습니다.
-1'<@=1 OR {a 1}=1 OR '
union select를 사용하라고 했으니 아래와 같은 코드로 변형했습니다.
-1'<@=1 union select 'first','second'%23
변형한 코드를 문제사이트에 전달해보면

어째서 인지 Forbidden이 출력됩니다.
여기서 도저히 감이 오질않아 먼저 해결한 지인에게 힌트를 받았습니다.
지인의 말로는 필터링이 걸려있다고 합니다.
해서 필터링을 알아보면

-1'<@=1 union select 1,2%23
먼저 예상가는건 first와 second를 사용하면 해결되니
이 두개의 필터링을 예상했지만 1,2로 바꾸어도 Forbidden이 출력됩니다.
그 다음으로 예상가는 것은 union과 select인데

-1%27<@=1 OR id='union'%23
id='union'을 넣어 판단해보면 Forbidden이 출력되는데
아래와 같이 uniona를 넣으면 필터링에 걸리지 않았습니다.
-1'<@=1 OR id='uniona'%23

즉 'union' 만을 필터링하고 있으므로 문자열 필터링을 우회하는 방법이 가능할것으로 보입니다.
여러가지 방법이 있지만 union은 SQL구문으로써의 역할을 해야하므로
주석처리를 이용한 필터링을 사용하였습니다.
-1'<@=1 union/**/select 1,2%23
union만을 정확하게 필터링하므로 주석처리인 /**/ 을 이용해 select까지
하나의 문자열로 인식하게 전달하면 주석처리이후
주석처리 부분은 공백이 되어 쿼리가 실행되게 됩니다.

문제없이 union select 구문이 실행되는 것을 확인했으니
문제해결을 위해 first와 second를 넣어서 전달해보면
-1'<@=1 union/**/select 'first','second'%23

문제가 해결되었습니다!
소스코드에 필터링이 되어있지 않고 CRS방화벽에 필터링이 되어있는 경우를
처음 겪어보는 문제라서 삽질이 많았습니다.
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) manticore 문제 (0) | 2022.12.04 |
---|---|
(Lord of SQLInjection) chupacabra 문제 (0) | 2022.12.04 |
(Lord of SQLInjection) godzilla 문제 (0) | 2022.12.01 |
(Lord of SQLInjection) death 문제 (0) | 2022.12.01 |
(Lord of SQLInjection) cthulhu 문제 (0) | 2022.11.30 |