1 Oracle Oracle을 비교적 시장 점유율이 크고 일부 매우 큰 데이터베이스에서 자주 사용되는 비교적 초기 RDBMS 데이터베이스로 소개하는 것은 쉽습니다. 다양한 SQL 언어에 대한 우수한 지원 외에도 다양한 풍부한 패키지, 저장 프로시저를 제공하고 Java 및 라이브러리 생성까지 지원합니다. 이러한 강력한 기능은 해킹에 좋은 편의를 제공합니다.
Oracle 자체에는 많은 기본 계정과 많은 저장 프로시저가 시스템에 의해 생성됩니다. 지난 몇 년 동안 오버플로 및 SQL을 포함한 많은 Oracle 취약점이 공개되었습니다. 주사도 포함. 여기서 SQL 주입 취약점은 특히 중요합니다. Oracle에서는 다른 키워드 AUTHID CURRENT_USER를 추가하지 않으면 생성된 저장 프로세스가 실행 시 생성자로 실행되고, 공용은 이러한 저장 프로세스에 대한 액세스 권한이 모두 없기 때문에 모두 호출할 수 있는 권한이 있습니다. 내장된 저장 프로세스에 주입이 있으므로 일반 사용자가 Oracle 시스템 권한으로 쉽게 업그레이드할 수 있습니다. Oracle 자체에는 많은 내장 계정이 있으며 그 중 일부에는 기본 비밀번호가 있고 CONNECT 권한이 있습니다. 이런 방식으로 Oracle 포트가 방화벽으로 보호되지 않고 원격으로 연결할 수 있으면 기본 계정을 사용할 수 있습니다. 원격으로 시스템에 접속한 후 시스템에 저장된 프로세스의 SQL을 사용하여 취약점을 주입하면 시스템이 충돌하게 됩니다. 물론 Oracle에 로그인하려면 SID가 필요하지만 Oracle의 tnslintener는 비밀번호를 설정하는 것이 어렵지 않습니다. 기본적으로 tnscmd를 사용할 수 있습니다. .pl은 services 명령을 사용하여 시스템의 SID를 찾습니다(최신 버전에서는 이 결함이 수정되었습니다). 이는 Oracle에 침입하는 매우 전형적인 모드이기도 합니다.
2 오라클 웹 해킹 기술 배경
Oracle의 풍부한 시스템 테이블. Oracle의 거의 모든 정보는 시스템 테이블에 저장됩니다. 데이터베이스의 현재 운영 상태, 현재 사용자 정보, 현재 데이터베이스 정보, 사용자가 접근할 수 있는 데이터베이스 및 테이블에 대한 정보... 시스템 테이블은 전체 데이터베이스의 거의 핵심 부분입니다. 긴급하게 필요한 시스템 테이블을 쿼리하여 모든 정보를 얻으십시오. 예를 들어, sys.v_$option에는 Java 지원 여부 등 현재 데이터베이스에 대한 일부 정보가 포함되어 있고, all_tables에는 모든 테이블 정보가 포함되어 있으며, all_tab_colmuns에는 모든 열 정보가 포함되어 있습니다. 정보 얻기, 나중에 시스템 테이블을 사용하여 민감한 정보를 얻는 방법에 대한 설명과 관련됩니다.
오라클의 다양한 취약점 중, 저장 프로시저의 주입(Injection)에 대해 이야기하는 것이 시급하다. 선택됨 스키마를 SQL 문자열로 구성하여 구현하면 데이터와 명령이 혼합되기 쉬워 SQL 주입이 발생합니다. 그러나 주입이 발생하는 위치에 따라 주입 취약성의 특성도 다릅니다. Oracle은 PL/SQL을 사용하는데, select 등의 DML 언어에서 취약점이 발생합니다. 다국어 구현을 지원하지 않기 때문에 GRANT DBA TO LOVEHSELL 및 기타 DDL 언어 등 자체 언어를 실행하려는 경우 , 함수 또는 저장 프로시저를 직접 만들어야 하며, 관련 권한이 없는 경우 커서 주입을 사용하고 dbms_sql 패키지를 사용하여 제한을 피할 수도 있습니다. 대부분의 주입은 위의 제한된 주입입니다. 권한을 늘리려는 목적을 달성하려면 직접 만든 일부 다른 패키지나 커서에 의존해야 하지만 여전히 매우 일반적인 취약점이 있지만 주입 환경은 매우 느슨합니다. input.begin과 end 사이에 위치한 익명 pl/sql 블록의 주입은 거의 제한 없이 여러 단어에 직접 주입될 수 있다는 것을 알 수 있습니다. 우리 웹의 문제는 주입 기술이 이러한 빛을 되찾게 해준 것입니다.
위에서 언급한 내용은 오라클의 공격적인 기술 중 일부이지만 현재 많은 환경에서는 웹 서비스가 외부 세계에 개방되어 있고 백엔드 보스 데이터베이스가 방화벽으로 보호되고 있어 데이터베이스의 세부 정보를 너무 많이 잃어버리는 것은 불가능합니다. , 더 이상 직접 로그인이 불가능합니다. 데이터베이스가 작동 중입니다. 이때는 웹 중지 취약점을 이용하여 백업 데이터베이스를 공격하는 것을 고려해야 합니다. 이제 오라클 웹 환경에서 인젝션을 개발하는 방법을 살펴보겠습니다! 오라클은 다양한 웹 환경에서 잘 작동하며, asp, .net, jsp에서는 다양한 웹 환경이 미치는 영향이 크지 않습니다. 들어오는 매개 변수는 전혀 필터링되지 않지만 .net 및 jsp 언어는 강력한 범주 언어이기 때문에 수치 주입의 경우 SQL 언어가 필터링되지 않더라도 매개 변수 허용 시 오류가 발생할 수 있습니다. 문자열 클래스에는 더 많은 매개변수가 있습니다. PHP 환경에서는 모든 '가 '로 이스케이프되고, oracle 환경에서는 '가 이스케이프되지 않습니다(oracle 환경에서 올바른 이스케이프는 ''여야 함). 하지만 우리 자체의 주입 담론에서는 '를 사용할 수 있습니다. '로 변환되어 손상되므로 주입 중에는 사용할 수 없습니다'. 단, 웹 환경에서는 제한이 없습니다. 데이터베이스 측면에서 담론이 매개변수 모드로 실행되면 문자열 연결 모드를 사용하지 않는 한 주입할 수 없다. ) 문자열 연결 모드도 두 가지 유형으로 구분됩니다. 매개변수는 select, update, insert 등의 DML 단어에 있고, 매개변수는 pl/sql 익명 블록에 있습니다. 그러면 나중에 논의할 오류를 기준으로 현재 담론의 범주를 쉽게 판단할 수 있습니다. pl/sql 익명 블록에서는 비교적 드물지만 이러한 주입에 제한이 없다는 점은 배제되지 않습니다. 다중 대화를 구현하고 무엇이든 할 수 있으며 이는 로컬 로그인과 다르지 않습니다.
3 오라클 웹 해킹의 기본 아이디어
다음 부분에서는 대상을 결정하는 방법에 대해 설명합니다. 주입 매개 변수의 결정은 데이터베이스의 특성에 따라 데이터베이스가 Oracle에 속하는지 확인하는 방법입니다. --category 해석을 지원하지만 별도의 구현을 지원하지 않습니다. Oracle에는 all_tables와 같은 많은 시스템 테이블이 있으며 이러한 테이블에 액세스하면 Oracle의 일부 기능도 확인할 수 있습니다. utl_http.request와 같이 언어를 결정하는 데에도 사용할 수 있습니다. 예를 들어, ||는 Oracle에서는 조인 기호이지만 다른 데이터베이스에서는 그렇지 않습니다. |chr(123)=chr(123)| |chr(123) 성공적으로 실행될 수 있다면 Oracle이어야 합니다. 또한, 일부 스크립트는 데이터베이스 쿼리 오류가 발생할 때 오류 메시지를 처리하지 않으며 누출될 수도 있습니다. 실제 백업 데이터베이스를 명확하게 볼 수 있습니다.
다음으로 긴급하게 결정해야 할 것은 주입 지점의 유형입니다. 일반적으로 우리가 입력하는 매개 변수는 숫자이거나 단순히 문자입니다(많은 사람들이 검색 유형 주입이라고 부르는 것은 실제로 문자로 분류되어야 합니다). 숫자 카테고리는 전혀 생각하지 마세요. -- 해석 문자를 추가하면 발화를 정확하게 닫을 수 있습니다. 문자 카테고리라면 전체 발화를 어떻게 정확하게 만들 수 있을지 고민해야 할 겁니다. 일반적으로 ' 및 - 이러한 주입 문자를 추가하여 자신만의 주입 상황을 구성합니다. 여러 개의 SQL 단어와 로직에 매개 변수가 나타나는 등 일부 복잡한 상황에서는 상황에 맞게 주입 단어를 신중하게 구성해야 합니다. 다양한 SQL 명령을 쉽게 배열할 수 있는 완전한 환경만 있으면 됩니다 :)