环境搭建

因为Oracle比较大,所以我选择在自己的云服务器上装docker镜像

docker 仓库加速参考

docker 安装Oracle

# vim /etc/docker/daemon.json
# 文件加入如下内容
{
	  "registry-mirrors": [
	"https://no1pfk8z.mirror.aliyuncs.com",
	"https://kfwkfulq.mirror.aliyuncs.com", 
	"https://2lqq34jg.mirror.aliyuncs.com", 
	"https://pee6w651.mirror.aliyuncs.com",
	"https://hub-mirror.c.163.com/",
	"https://reg-mirror.qiniu.com"
	  ]
 }
# 使用指令如下
docker pull truevoly/oracle-12c 
docker images 检查镜像是否下载pull成功
docker run -d -p 9999:8080	 -p 1521:1521 truevoly/oracle-12c
# 按照网上各路教程挂载路径总是出错,就先这样了
# 进入容器
docker exec -it 容器id /bin/bash
# 进入Oracle
sqlplus system/oracle@//localhost:1521/xe
# 修改system 密码改成了oracle
alter user system identified by oracle; 
# 然后就可以用navicat连接了,端口1521,主机ip填写云服务器的ip
# 服务我这里默认叫xe,可以用下面的语句查询到
show parameter service_name
# 然后就能连接成功了
入门Oracle

找到一篇不错的入门Oracle文章,B站视频(我看的黑马程序员)也不错,就是慢一点。推荐边看这篇入门文章边在视频中找不懂的点学习,速度相对快一点,学习质量也更好一些。初步还是计划先学到增删改查。

Oracle和MySQL的不同点

  1. Oracle只有一个全局数据库,不像MySQL可以创建多个数据库。
  2. Oracle与mysql不同的是,Oracle这个大数据库下有多个用户,每个用户能管理自己的几个表,类比MySQL,oracle的用户概念就类似于MySQL中的数据库。

Oracle常见数据类型

  1. 字符型
    CHAR 固定长度的字符类型
    VARCHAR2 可变长度的字符类型
  2. 数值型
    NUMBER(有效数字位数,小数点到有效数字的位数)
    INTENGER 和NUMBER不同的点就是只能存整数
    二进制浮点数 BINARY_FLOAT BINARY_DOUBLE
    FLOAT
  3. 日期型
    DATE 精准到秒
    TIMESTAMP 精确到秒的小数点后9位
  4. LOB型
    BLOB 存图像声音视频等二进制数据
    CLOB 存字符
    NCLOB 存UNICODE类型的数据

建库建表整起来

另外用户建在表空间中,表建在用户中,因此自己在Oracle建一个测试数据库的操作如下

# 先创建表空间,为接下来的各种表找个存储的地方,相当于有了块地
# 为什么要先创建表空间?
# 因为表需要一个存储区。在创建过程中,Oracle还会自动创建数据文件。
create tablespace test 
datafile '/tmp/test.dbf' 
size 100m 
autoextend on 
next 10m
# 有地了就要有人,因此创建用户 这里我创建了otest用户,密码123456,指定表空间test
create user otest identified by 123456 default tablespace test
# 有人了,需要给他指定规则,也就是赋予权限,这里给的dba权限,Oracle中的最高权限
# 有权限后,就可以使用navicat连接
grant dba to otest
# 接下来就可以创建表了,Oracle常见数据类型:number数字 varchar2 字符串 date 日期
和MySQL差不多,就不多说了
create table test(
	id number(10),
	usr varchar2(16),
	pwd varchar2(32)
)
# 插入数据
insert into test values(1,'admin','admin')

接下来是数据的常见操作语句,和MySQL都是一样的

select * from table_name    #查
insert into test values(1,'admin','admin')   #增
update table_name set col1=val1 where col2=val2    #改
delete from table_name where col=val    #删
Oracle注入入门一

基本上是按照上面的入门文章实操了一遍

基础知识

# 在MySQL中可以用
select 1
# 在Oracle中select必须跟表名,如果没有表则跟dual
select 1 from dual

postgresql 官方docker镜像 docker oracle镜像_MySQL

注释

postgresql 官方docker镜像 docker oracle镜像_web安全_02

单引号和双引号

''等同于NULL

单引号用于字符串

双引号用于表名列名等

参考链接

拼接字符串

postgresql 官方docker镜像 docker oracle镜像_MySQL_03

rownum

返回指定行数的内容,没有MySQL中的limit好用,rownum只能用=1,<,<=

postgresql 官方docker镜像 docker oracle镜像_MySQL_04

获取版本号

select banner from v$version

也可以用`select banner from v$version where banner like ‘Oracle%’ ,显示具体的版本信息。这里有个注意点,Oracle具体字段值是区分大小写的,双引号的内容也是区分大小写的

postgresql 官方docker镜像 docker oracle镜像_docker_05

获取用户名

  • 获取当前用户名
    这其实和MySQL是一样的,知识Oracle规则要求select必须跟表名

postgresql 官方docker镜像 docker oracle镜像_网络安全_06

  • 获取所有用户名

查询当前用户权限

postgresql 官方docker镜像 docker oracle镜像_docker_07

查询用户的表名

select table_name from all_tables where owner='OTEST'

postgresql 官方docker镜像 docker oracle镜像_web安全_08

查询指定表的列名

select column_name from all_tab_columns where table_name='TEST'

postgresql 官方docker镜像 docker oracle镜像_MySQL_09

具体攻击还是想找个环境搞搞,结果找不到免费的,sad,但是单单在navicat测试语句是真的枯燥,所以先实践到这了