一、前期准备:宝塔安装
https://www.bt.cn/new/product_windows

















二、域名差异
通常对于网站的访问,一般有两种访问方式:一种是 IP 地址访问,一种是域名访问
主站
www.xiaodi8.com:80 47.75.212.155 php
分站
blog.xiaodi8.com 47.242.212.243 47.75.212.155(有可能是不同 IP 地址,有可能是相同的 IP 地址)
端口站
通过访问不同的端口会访问到不同的网站/程序
www.xiaodi8.com:88 java
目录站
www.xiaodi8.com/bbs 论坛 java
www.xiaodi8.com/ 博客 php
示例:

访问该文件夹,打开的就是另一个网站的页面

子站
三、源码差异
1、源码目录结构对应
后台目录,文件目录,逻辑目录,前端目录,数据目录,配置文件等
1.1 后台目录(后端核心代码)
存放服务器端业务逻辑、API、数据模型等。
常见命名:
app/-- 应用核心代码(Laravel、Node.js 常用)src/-- 源代码根目录(Java、Go、TypeScript 项目)backend/-- 与前端并列的后端根目录controller/或handlers/-- 控制器/请求处理层service/-- 业务逻辑层model/或entity/-- 数据模型/实体dao/或repository/-- 数据访问层api/-- RESTful / GraphQL 接口定义admin/-- 后台管理功能专用目录middleware/-- 中间件task/或job/-- 定时任务/队列任务
1.2 文件目录(用户上传、静态资源等)
存储由用户或系统产生的非代码文件。
常见命名:
uploads/-- 用户上传文件(图片、文档等)storage/-- 存储目录(含私有文件、缓存、日志等)public/-- 公开可访问的静态资源(HTML、CSS、JS、图片)assets/-- 前端资源(有时与公开目录合并)media/-- 媒体文件(Django 常用)downloads/-- 提供下载的文件temp/或tmp/-- 临时文件目录
1.3 逻辑目录(业务逻辑层)
专注于实现具体业务规则,独立于控制器和数据访问。
常见命名:
logic/-- 直译业务逻辑business/-- 业务层service/-- 服务层(也可以归入后台目录,但更突出逻辑)domain/-- 领域驱动设计中的领域层workflow/-- 复杂业务流程编排rule/-- 规则引擎相关calculator/-- 特定计算逻辑(如计费、积分)
1.4 前端目录(客户端代码)
存放界面交互、UI组件、静态资源等。
常见命名:
frontend/或client/-- 前端根目录src/-- 前端源码(React、Vue 脚手架习惯)views/-- 页面级组件(传统 MVC 模式)components/-- 可复用的 UI 组件pages/-- 按路由组织的页面(Next.js、Nuxt 常用)layouts/-- 布局组件styles/或css/-- 样式文件static/-- 静态资源(无需构建的图片、字体等)assets/-- 需要构建工具处理的资源public/-- 构建后直接拷贝的根资源(如index.html)
1.5 数据目录(数据库、缓存、备份等)
存放数据库文件、数据迁移、种子数据或持久化缓存。
常见命名:
data/-- 通用数据目录database/-- 数据库相关脚本或文件migrations/-- 数据库迁移文件seeds/或seeders/-- 测试数据填充脚本backup/-- 数据备份cache/-- 缓存文件(如 Redis 快照、页面缓存)sql/-- 原始 SQL 脚本dump/-- 数据库导出文件
1.6 配置文件目录
存放应用、框架、依赖等配置。
常见命名:
config/-- 最通用的配置目录conf/-- 轻量级配置文件目录settings/-- 常见于 Python(Django、Flask)env/-- 环境变量相关文件(.env也可能在根目录)etc/-- 模仿 Unix 风格的系统配置.config/-- 隐藏配置目录(用户级)resources/-- 有时包含配置(如 Java 的resources/application.yml)bootstrap/-- 框架启动配置(Laravel 特有)
1.7 其他常见目录(补充)
logs/-- 日志文件tests/-- 单元测试、集成测试docs/-- 文档scripts/-- 构建、部署、运维脚本vendor/或node_modules/-- 第三方依赖(通常不提交版本库)build/或dist/-- 编译输出目录
2、源码开发语言类型
ASP,ASPX,PHP,Java,Python,Go,Javascript等
3、 语言开发框架组件
PHP:Thinkphp Laravel YII CodeIgniter CakePHP Zend等
JAVA:Spring MyBatis Hibernate Struts2 Springboot等
Python:Django Flask Bottle Turbobars Tornado Web2py等
Javascript:Vue.js Node.js BootstrapJ Query Angular等
4、 开源闭源加密类型
开源:公开可以直接下载的源码,如 zblog
闭源:没有公开的,是企业内部开发的
加密:有源码但是是乱码的,如通达 OA
四、数据差异
**数据库类型:**Access、MYSQL、SqlServer、Oracle、Redis、DB2、Postgresql、MongoDB等


1、本地数据库搭建
**本地数据库:**源码和数据库在同一台服务器上





2、分离数据库搭建
**站库分离:**源码和数据库在不同的服务器上
eg. 假如你拿到了目标的一个源码,分析到了数据库配置文件,其中有账号密码和连接的地址
答: 数据库连接只让来网站服务器 IP(假设是:47.242.212.243) 的连接,如果你不是这个 IP (47.242.212.243)地址,账号密码给你也无法连接
3、云数据库搭建
核心思想:外联 外部连接
以 RDS 为例,














**背景:**www.xiaodi8.com 47.242.212.243,数据库放在云数据库上面,然后我拿到了 www.xiaodi8.com 的 webshell 网站权限,我怎么去获取到数据库里面的数据 权限
**解决问题:**47.242.212.243 只能让它去连接云数据库,本地真机攻击机器 xx.xx.xx.xx 去连接数据库 账号密码正确也无法连接
渗透思路:
- 上传一个数据库连接脚本到网站上,访问脚本去让脚本去连接数据库
- 利用网站权限上传代理流量工具,做数据中转的操作,去连接数据库
五、平台差异
1、系统:Windows、Linux、MacOS等
2、容器:Docker、K8s、Vmware、VirtualBox等
3、中间件:Apache、Nginx、IIS、lighttpd、Tomcat、Jboos、Weblogic、Websphere、Jetty等
六、解析差异
1、URL 路由:URL访问对应文件,MVC模型等
1.1 url 访问对应文件
www.xiaodi8.com/admin/login.php = 源码/admin/login.php
1.2 MVC 模型源码
www.xiaodi8.com/admin/login ≠ 源码/admin/login
源码中明明有这个目录,却访问不到,这是由于它是:
框架开发 MVC 模型源码:根据框架的路由决定
后期在进行代码审计的时候,我们要区分 MVC 和非 MVC 模型的源码,目的是要去搞清楚访问网站的地址和文件的对应关系该怎么找
model :操作数据库
view:前端显示
controller:写业务逻辑的
2、绝对相对路径:相对当前目录,完整的目录路径
相对路径(相对当前路径):.../.../
**绝对路径(完整的目录路径):**C:\wwwroot\test01.veii5.cn\blog
C:\wwwroot\test01.veii5.cn\blog.../.../ = C:\wwwroot
C:\wwwroot\test01.veii5.cn\blog.../.../.../ = C:\BtSoft
C:\wwwroot\test01.veii5.cn\blog.../.../.../C:\BtSoft = C:\BtSoft
3、格式权限:后门解析格式,代码正常执行,脚本执行权限等
3.1 后门解析格式
网站的语言不一样,解析格式也不一样
网站如果是 php 的网站,你上传的后门文件就是.php 的后门
网站如果是 java 的网站,你上传的后门文件就是.java 的后门
3.2 代码正常执行
php 文件要用 php 格式的代码,java 文件要用 java 格式的代码编写
3.3 脚本执行权限

访问 1.php

现在修改 upload 的权限,这样设置的目的是为了防止给脚本执行权限

再访问一下 1.php,发现访问不了了,这是因为读取执行权限被拒绝了

**解决办法:**换其他目录上传文件