ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[网络安全提高篇] 一〇四.网络渗透靶场Oracle+phpStudy本地搭建万字详解(SQL注入、XSS攻击、文件上传漏洞)

2021-03-23 16:57:09  阅读:562  来源: 互联网

标签:网络安全 XSS Windows 数据库 phpStudy 漏洞 SQL Oracle 自学


当您阅读到该篇文章时,作者已经将“网络安全自学篇”设置成了收费专栏,首先说声抱歉。感谢这一年来大家的阅读和陪伴,这100篇安全文章记录了自己从菜鸡到菜鸟的成长史,该部分知识也花了很多精力去学习和总结。由于在外读书且需要养娃,所以按最低价9.9元设置成了收费专栏,赚点奶粉钱,感谢您的抬爱。当然,如果您还是一名在读学生或经济拮据,可以私聊我给你每篇文章开白名单,也可以去github下载对应的免费文章,更希望您能进步,一起加油喔!

接下来我会接着之前的内容继续分享,“网络安全提高班”新的100篇文章即将开启,包括Web渗透、内网渗透、靶场搭建、CVE复现、攻击溯源、实战及CTF总结,它将更加聚焦,更加深入,也是作者的慢慢成长史。换专业确实挺难的,Web渗透也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

前文带领大家深入Metasploit技术,涉及后渗透相关的技术,包括信息收集、权限提权、移植漏洞模块和后门。这篇文章将教大家搭建一个Oracle+phpStudy本地网络渗透靶场,并应用SQL注入、XSS攻击、文件上传漏洞三个场景。在搭建Oracle环境时遇到的各种问题,所幸写一篇详细的教程供大家学习,下一篇将详细介绍Oracle注入漏洞。本文参考了Cream、Fox、c0ny1好友兼老师的文章和代码,非常感谢。具体内容如下:

  • 如果您是安全初学者,不妨自己在虚拟机中搭建一个靶场环境

文章目录

作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

环境及靶场下载地址:

其他资料下载地址:

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

提高篇:(自学系列100篇目录放在文章末尾)


一.Oracle基础介绍

数据库的基本概念如下:

  • 数据库(Database,DB)
    按照数据结构来组织、存储和管理数据的仓库
  • 数据库管理系统(Database Management System, DBMS)
    是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS
  • 数据库管理员( Database Administrator, DBA)
    操作和管理DBMS的人员,简称DBA

数据库通常分为两类:

  • 关系型数据库
    Oralce、DB2、MSSQL、SyBase、Informix、MySQL、Access、Postgresql等,是指采用了关系模型来组织数据的数据库,其以行和列的形式(二维表)存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库、
  • 非关系型数据库
    Redis、Mongodb、Nosql、Hbase等,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统,如以键值对(Key-Value)存储,用于解决大数据应用难题和大规模数据集合多重数据种类带来的挑战。

这篇文章主要围绕Oracle数据讲解,也是企业用得最广泛地数据库。Oracle数据库的特点如下:

  • 全球化、跨平台的数据库
  • 支持多用户、高性能的事务处理
  • 强大的安全性控制和完整性控制
  • 支持分布式数据库和分布处理

在这里插入图片描述

下面介绍SQL的分类,主要分为五大类,核心是对数据的增删改查。读者可以简单学习下数据库的基础知识。作者之前数据库的文章也介绍过。

  • DDL(数据定义语言)
  • DML(数据操纵语言)
  • TCL(事务控制语言)
  • DQL(数据查询语言):数据库注入用得比较多
  • DCL(数据控制语言):数据库赋权攻击用得比较多

在这里插入图片描述


二.Oralce安装配置

本文主要介绍Windows环境下的搭建,如果是Linux推荐使用Docker快速搭建。

1.基础知识

环境配置永远是第一步,这里简单介绍下配置过程,网上教程也比较多。Windows安装Oracle的流程包括:

  • 准备Oracle安装包
  • 根据需求下一步安装
  • 设置监听服务并启动
  • 配置TNS和Listener

透明网络底层(Transparence Network Substrate)需要通过读取TNS配置文件才能列出经过配置的服务器名,安装过程中建议关闭防火墙。参考文章:

在这里插入图片描述

Oracle数据库操作的常用工具如下,下面这些工具可以管理Oracle数据库。

在这里插入图片描述

  • SQL Plus
    安装完毕Oracle 11g之后,在开始菜单中会产生Oracle自来的管理工具,其中就包括SQL Plus。SQL Plus是以命令行的方式管理Oracle数据库的工具,缺点是得学习命令,优点是功能强大且会了命令之后,操作起来更了解底层,实现更加快捷方便。
  • DataBase Control
    企业管理器,其实就是个web界面的Oracle管理工具,功能一般,但是比较直观,初学者可以用用。
  • Net Manager
    网络管理器,主要是管理与Oracle数据库服务连接的,如果其他的工具或者程序想要访问Oracle数据库服务,就得Net Manager来管。
  • Database Configuration Assistant
    数据库配置助手,主要是用来可视化的创建、配置、删除数据库的。
  • Navicat for Oracle
    Navicat是一款非常快捷、可靠的数据库管理工具,它不是Oracle公司的。个人感觉它界面清洁,操作方便。当然,在Oracle管理工具里面PL/SQL Developer还是王道。Navicat此处只是作为了解Oracle数据库的一种渠道,认识下就行。在MySQL数据库管理工具里面,Navicat有着更加重要的地位。
  • PL/SQL Developer
    PL/SQL Developer与其说是一个数据库管理工具,它更像一个面向Oracle数据库对象的集成开发环境。程序开发人员往往使用PL/SQL Developer来玩转Oracle就够了,PL/SQL你绝对值得拥有。

2.安装Oracle数据库

Oracle数据库的下载地址如下:

在这里插入图片描述

作者这里下载了Windows 64位Oracle 11c版本,因为Oracle 19c版本的ORC8和Navicat配置总失败 o(╥﹏╥)o

下载版本信息如下:

在这里插入图片描述

第一步,解压两个文件夹,将win64_11gR2_database_2of2.zip解压放到Compoents文件夹。

在这里插入图片描述

第二步,双击setup.exe安装程序,跟着安装向导,取消安全更新。安装过程中建议关闭防火墙。

在这里插入图片描述

第三步,选择仅安装数据库软件。

在这里插入图片描述

第四步,选择单例数据库安装。

在这里插入图片描述

第五步,选择安装企业版。

在这里插入图片描述

第六步,设置安装目录(作者在D盘创建了oracle文件夹)。

  • Oracle基目录:D:\oracle\app
  • 软件位置:D:\oracle\app\product\11.2.0\dbhome_1

在这里插入图片描述

第七步,执行先决条件检查。

在这里插入图片描述

软件安装完成的概要信息如下图所示。

在这里插入图片描述

第八步,继续安装产品。

在这里插入图片描述

最终完成安装。

在这里插入图片描述


三.创建监听服务

第一步,打开监听安装程序。

  • 开始 => 所有程序 => Oracle-OraDb11g => Net Configuration Assistant

注意:前面我们在安装Oracle时选择“仅安装数据库软件”。

在这里插入图片描述

第二步,选择“监听程序配置”。

在这里插入图片描述

第三步,选择“添加”。

在这里插入图片描述

第四步,选择默认监听名称“LISTENER”。

在这里插入图片描述

第五步,选择TCP连接。

在这里插入图片描述

第六步,选择默认端口1521,这也是Oracle数据库对应的端口。

在这里插入图片描述

第七步,选择“否”。

在这里插入图片描述

最后点击完成。

在这里插入图片描述

在这里插入图片描述


四.创建实例

第一步,打开监听安装程序。

  • 开始 => 所有程序 => Oracle-OraDb11g => Database Configuration Assistant

在这里插入图片描述

第二步,点击下一步默认配置Oracle数据库。

在这里插入图片描述

第三步,创建数据库。

在这里插入图片描述

第四步,选择“一般用途或事物处理”。

在这里插入图片描述

第五步,全局数据库名和SID中选择“orcl”。

在这里插入图片描述

第六步,默认配置Enterprise Manager。

在这里插入图片描述

第七步,设置口令中选择“所有用户使用同一管理口令”,输入“123456”。

在这里插入图片描述

第八步,默认下一步,“使用模板中的数据库文件位置”。

在这里插入图片描述

第九步,默认恢复配置。

在这里插入图片描述

在这里插入图片描述

第十步,设置字符集。此处设置使用Unicode和UTF8编码。

在这里插入图片描述

第十一步,点击默认下一步。

在这里插入图片描述

第十二步,点击创建数据库。

在这里插入图片描述

安装过程如下图所示:

在这里插入图片描述

在这里插入图片描述


五.配置TNS文件

使用Oracle数据库之前,还需要配置TNS文件。透明网络底层(Transparence Network Substrate)通过读取TNS配置文件才能列出经过配置的服务器名。

第一步,找到指定目录。

  • D:\oracle\app\product\11.2.0\dbhome_1\NETWORK\ADMIN

在这里插入图片描述

第二步,修改tnsnames.ora文件,将HOST=的值修改为本机IP。

在这里插入图片描述

第三步,配置listener.ora文件,其目录和tnsnaeme.ora在同一个目录中。增加一段内容及IP设置。

在这里插入图片描述

修改代码如下:

# listener.ora Network Configuration File: D:\oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\oracle\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )

   (SID_DESC = 
     (GLOBAL_DBNAME = orcl) 
     (ORACLE_HOME = D:\oracle\app\product\11.2.0\dbhome_1) 
     (SID_NAME = orcl) 
   )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = D:\oracle\app

第四步,进入Windows服务(services.msc)重启listener。

  • OracleOraDb11g_home2TNSListener

在这里插入图片描述

第五步,重启数据库实例服务。

  • OracleServiceORCL

在这里插入图片描述


六.Navicat连接数据库

此时我们尝试启动数据库,并介绍简单的SQL语句。

第一步,使用SQL Plus语句连接Oracle数据库。

  • sqlplus sys/123456@orcl as sysdba
    sys为用户名,123456为设置的密码

在这里插入图片描述

第二步,查看数据库版本信息。

  • select * from v$version where rownum=1;

在这里插入图片描述

第三步,查看所有用户名。

  • select username from all_users;

在这里插入图片描述

第四步,创建账号eastmount,密码为123456。

  • create user eastmount IDENTIFIED by 123456;
    CREATE USER ‘username’ IDENTIFIED BY ‘password’;

在这里插入图片描述

注意,某些Oracle创建用户时会直接报错“公用用户名或角色名无效”,如下图所示。

在这里插入图片描述
这是因为Oracle Database 12c推出了可插拔库,管理用户也分为两种:
(a) 本地用户
指在插拔数据库(PDB)中的用户,和之前版本没有区别。
(b) 公用用户
只存在于可插拔环境中,在传统的数据库环境中不存在这种应用。可以简单的把它当做容器(CDB)用户,可以在各个通用与所有可插拔数据库(PDB)中使用。这个用户就像是小区的物业管理员,由小区物业来任命并且可以管理小区所有用户。

如果第一次登录CDB数据库,用传统方式创建用户会报错,这就是因为在CDB环境创建的用户为公共用户,语法和普通用户不同。 创建公用用户 “eastmount” 需要使用C##作为该用户名的开头。当然,我们也可以切换当前容器到指定的PDB容器中,此时不需要添加C##即可创建成功。

在这里插入图片描述

第五步,赋予权限连接数据库(CONNECT)、实体创建(RESOURCE)和管理员(DBA)。

  • GRANT CONNECT, RESOURCE, DBA TO eastmount;

在这里插入图片描述

第六步,使用Navicat连接Oracle数据库。

  • 主机名是本机地址(127.0.0.1),端口是1521,服务名是ORCL
  • 用户名eastmount,密码为123456

在这里插入图片描述

登录成功如下图所示:

在这里插入图片描述

比如查询版本信息也会有反馈。

在这里插入图片描述

注意,某些Navicat连接时会遇到各种错误提示,比如“ORA-12541 TNS 无监听程序”,发现原来是oracle的监听没有启动,启监听后就连接成功。其他错误请自行百度解决。
在这里插入图片描述


七.配置phpStudy环境

这篇文章使用的数据库是基于 phpstudy+Oracle,常见的配置如下图所示:

  • 常见企业配置
    Linux(Centos/Ubuntu等)+Oracle
    Window Server类+Oracle
  • 个人配置
    Linux+Oracle (Linux+Docker+Oracle)
    Window NT+Oracle
    phpstudy+Oracle

在这里插入图片描述

Windows环境phpstudy的基本配置步骤包括:

  • Step 1: 安装phpstudy,注意其版本2014(64)、2016(32)、2018(32)、Pro(64)
  • Step 2: 配置php.ini,添加扩展:extension=php_oci8_12c.dll、extension=php_pdo_oci.dll
  • Step 3: 重启Apache,在phpinfo中查看是否有OCI8,如没有则需要在扩展
  • Step 4: 解决连接Oracle数据库的OCI8问题

第一步,安装phpStudy软件。

在这里插入图片描述

安装后如下图所示:

在这里插入图片描述

第二步,打开网站发现phpstudy是32位和支持TS。PHP版本的Architecture参数对应的数字x64还是x86,以及是TS(线程安全)还是NTS(非线程安全)。

  • 输入网址:http://127.0.0.1/phpinfo.php

在这里插入图片描述

第三步,编辑php.ini配置文件,增加扩展信息。

在这里插入图片描述

增加的内容如下(可以取消注释):

  • extension=php_oci8.dll
  • extension=php_oci8_11g.dll
  • extension=php_pdo_oci.dll

5.6以上版本使用extension=php_oci8_12c.dll。

在这里插入图片描述

第四步,重启Apache,查看phpinfo中是否有oci8。此时作者的配合成功,OCI8表示Oracle数据库和PHP可以互相调用。

在这里插入图片描述

第五步,将连接Oracle数据库的代码放置指定目录中。

  • D:\phpstudy\PHPtutorial\WWW

在这里插入图片描述

包含SQL注入的核心代码如下。但是,此时访问PHP的 oci_connect()函数报错 “Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries”。

在这里插入图片描述

第六步,解决OCI8未出现或OCI函数调用出错的问题。
注意,如果没有出现OCI8或出错,可能需要下载扩展,下载的时候一定要看清PHP版本(Architecture参数以及TS或NTS)。

在这里插入图片描述

作者下载的版本是php_oci8-2.0.12-5.4-ts-vc9-x86.zip。

在这里插入图片描述

在这里插入图片描述

第七步,将其DLL文件放在对应版本(5.4.45)的ext文件夹中:

  • D:\phpstudy\PHPTutorial\php\php-5.4.45\ext

在这里插入图片描述

如果代码连接数据库时仍然报错,则只有进行最后一招,作者也是通过该步骤成功配置OCI8。

在这里插入图片描述

第八步,下载oracle客户端instantclient_11_2文件(32对应PHPX86)。

在这里插入图片描述

在这里插入图片描述

第九步,把安装的oracle的客户端文件夹(E:\instantclient_11_2)内的全部文件复制到apache内的bin文件夹下,重启apache。

  • E:\phpstudy\PHPTutorial\Apache\bin

在这里插入图片描述

此时,我们的PHP终于成功连接Oracle数据库。

在这里插入图片描述


八.Oracle注入漏洞靶场

你可能会疑问,为什么要配置Oracle数据库呢?
因为下一篇文章我们将详细介绍Oracle数据库注入的相关知识,同时它也是最常用的数据库,因此这篇文章详细介绍了配置过程,接着简单搭建该靶场环境。

第一步,将Oracle注入的文件(sql-test.php)复制到指定目录。

  • D:\phpstudy\PHPtutorial\WWW

在这里插入图片描述

第二步,使用Navicat打开数据库并创建一个简单的demo表。

在这里插入图片描述

注意,数据库表名和字段设置为大写。

-- ----------------------------
-- Table structure for "EASTMOUNT"."demo"
-- ----------------------------
DROP TABLE "EASTMOUNT"."demo";
CREATE TABLE "EASTMOUNT"."demo" (
"id" NUMBER NOT NULL ,
"name" VARCHAR2(20 BYTE) NULL ,
"age" NUMBER NULL ,
"sex" VARCHAR2(20 BYTE) NULL 
)
LOGGING
NOCOMPRESS
NOCACHE
;

在这里插入图片描述

第三步,简单插入一条数据。

在这里插入图片描述

第四步,安装OWASP Mantra浏览器。做安全渗透的非常推荐大家使用该浏览器,它可以做各种调试以及提交POST请求。

在这里插入图片描述

第五步,访问最终效果如下图所示。

在这里插入图片描述

漏洞解析:
连接成功之后我们需要编写对应的PHP代码。这里的代码如下图所示,基本流程是连接数据库,然后进行select查询并将查询结果反馈到表格table中。我们先简单进行代码安全审计,发现问题如下:

  • 参数用户可控
    $_GET[‘id’]:参数是由前端传递过来的,用户通过自定义可以控制该参数。
  • 后台无过滤或者过滤不严谨
    $sql = “select * from demo where id=”.$id;没有进行过滤操作。

通过这两点漏洞就可以实现SQL注入。

在这里插入图片描述

完整代码如下:

<?php
  header("Content-Type:text/html;charset=utf-8");
  $id = @$_GET['id'];
  //连接数据库的参数配置
  $dbstr ="(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT = 1521)) 
                (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (INSTANCE_NAME = orcl)))";  
  
  //连接数据库,前两个参数分别是账号和密码
  $conn = oci_connect('eastmount', '123456', $dbstr);
  if (!$conn)
  {
    $Error = oci_error(); //错误信息
    print htmlentities($Error['message']);
    exit;
  }
  else
  {
    echo "<h3>Oracle 注入实验</h3>"."<br>";
    //ocilogoff($conn);
    echo $id."<br>";
    $sql = "select * from DEMO where ID=".$id;        //sql语句
    echo "SQL语句:".$sql."<br>";
    $ora_test = oci_parse($conn, $sql);              //编译sql语句 
    oci_execute($ora_test, OCI_DEFAULT);             //执行 
    while($r=oci_fetch_row($ora_test))               //取回结果 
    { 
      $i=0;
      //echo $ora_test[0]; 
      echo "ID: ".$r[$i++]."  </t> <br>";
      echo "NAME: ".$r[$i++]."  </t><br>  ";
      echo "AGE: ".$r[$i++]."  </t><br>  ";
      echo "SEX: ".$r[$i++]."  </t><br>  ";
    }
  }
  oci_close($conn);                                 //关闭连接
?>


九.XSS攻击靶场

注意,整篇文章主要围绕Oracle数据库搭建介绍。如果你只是使用后面这两个靶场,只需要phpStudy或XAMPP直接打开Apache即可。

该靶场由Fox好友提供,前面基础篇的文章也进行详细讲解,没做过的同学不妨试试。

在这里插入图片描述

运行结果如下图所示,总共有9关,你可以进行各种弹框XSS攻击。Let’s GO!!!

在这里插入图片描述


十.文件上传漏洞靶场

该靶场由c0ny1好友提供,前面基础篇的文章也进行详细讲解,没做过的同学不妨试试。

在这里插入图片描述

运行结果如下图所示,总共有21关,你可以进行各种文件上传漏洞绕过及Webshell获取。

在这里插入图片描述

当然,如果您有好的本地靶场代码,也欢迎发送给我完善那个开源的项目。


十一.总结

写到这里,这篇文章就介绍完毕,希望您喜欢,本文主要介绍Oracle+phpStudy本地搭建网络渗透靶场,涉及SQL注入、XSS攻击、文件上传漏洞三种场景。文章非常长,作者也花费了很长时间,希望对您有帮助,下一篇我们将详细介绍Oracle注入漏洞。再次感谢Cream、Fox、c0ny1好友兼老师。

  • 一.Oracle基础介绍
  • 二.Oralce安装配置
  • 三.创建监听服务
  • 四.创建实例
  • 五.配置TNS文件
  • 六.Navicat连接数据库
  • 七.配置phpStudy环境
  • 八.Oracle注入漏洞靶场
  • 九.XSS攻击靶场
  • 十.文件上传漏洞靶场

这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。

欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。

2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

在这里插入图片描述

(By:Eastmount 2021-03-23 夜于武汉 http://blog.csdn.net/eastmount/ )


参考文章如下,感谢这些大佬。


自学篇(建议直接跳转到正文):

标签:网络安全,XSS,Windows,数据库,phpStudy,漏洞,SQL,Oracle,自学
来源: https://blog.csdn.net/Eastmount/article/details/115057662

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有