本地部署前后端项目教程
本地部署前后端项目,课程作业要求,记一下笔记,怕自己忘了
顺便给其他同学一个思路吧~ 有任何错误、疑问都可以提一下!
思路
由于部署的是前后端项目,有三种方式:
前后端一起部署
打包前端代码生成dist文件夹,将dist文件夹中的复制到后端的static中,然后打包后端生成jar包,直接运行即可(无需安装nginx)
简单,但不易修改,不提倡(自己也没试成功嘻嘻)
前后端分离部署
前端后端分别打包,分别运行,前端是通过nginx代理的,后端启动jar包,前端的请求使用nginx代理发送到后端。
宝塔面板部署
适用于新手搭建,之前用过还挺快,就不知道老师那边过不过关(doge)
教程:
干货速码!初学者如何建立网站-搭建宝塔Linux后台面板
记Linux使用宝塔部署Vue+Springboot前后端分离项目
以下是第二种方法的步骤👇
实验设备及需求
前后端项目一份(前端Vue、后端Spring)
VM虚拟机
Ubuntu一台(用于存放前后端,及运行环境)
Centos7两台(用于放置数据库和Redis)
这里因人而异,我分开是为了方便操作,如果嫌 ...
针对eduSrc平台制作搜索脚本
新年难得放松一些,闲来无事,想着好久没上edu漏洞平台看看了,看看有什么礼品上架,顺便想看看朋友怎么样,但奈何平台都没有搜索功能┭┮﹏┭┮,查起来也极不方便。
于是就挤了点时间随便写了下搜索脚本,写的不多,难度不大,但功能基本包含,写得不好的地方还请大佬们多多指教。
脚本概述
本脚本主要是针对三个不同的搜索对象:用户,礼品以及高校。
信息处理上,利用Xpath和正则表达式对其进行一个对应信息的搜索获取,基本功能完整,提供可视化搜索进度。
菜单如下图👇
main函数如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748if __name__ == '__main__': global baseUrl, headers global numStart, expectedGiftNum global red, green, yellow, blue, end red = '\033[1m\033[31m ...
WebShell(3)| 木马上传方式及查杀防范
木马上传方式
直接上传
通过直接上传一句话木马获取webShell。
数据库备份webShell
网站进制上传可执行文件,此时我们可以上传正常的图片马,然后通过数据库备份功能修改备份后的文件名,使得图片马能够成功解析执行。
1copy/b 1.jpg+1.txt 2.jpg # 将文件写入图片中,这里的文件不局限于txt文件
有时候数据库备份功能对备份的地址做了前端的限制,只需修改前端源码,成功绕过。
突破本地js验证webShell
若网站对上传只做了前端限制,可以通过修改前端代码或者删除检测代码,还可以通过抓包改包成功上传一句话木马。
上传其他脚本webShell
有时候一台服务器上由于搭建了不同脚本的几个网站,导致服务可同时执行多种脚本,此时我们可以尝试上传其他脚本来绕过对某一脚本的限制。
00截断webShell
00截断是利用服务器对%00后面的字符不再识别,导致攻击者可构造%00之前的后缀名为可执行文件,成功绕过白名单限制。
解析漏洞webShell
利用不同服务器存在的解析漏洞成功绕过后缀名限制上传。如IIS、apache、nginx等
利用编辑器漏洞webShell ...
WebShell(2)| 内存马(不死马)
什么是内存马
内存马是无文件攻击的一种常用手段,随着攻防演练热度越来越高:攻防双方的博弈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webShell或以文件形式驻留的后门越来越容易被检测到,内存马使用越来越多。
webShell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。
但传统的webShell都是基于文件类型的,攻击者可以利用上传工具或网站漏洞植入木马。
而其中的区别在于webShell内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。
Java内存马可参考文章——一文看懂内存马
PHP内存马
PHP内存马,也叫做PHP不死马、不死僵尸,在线下AWD比赛中是常用手段之一,用于权限维持。
在蚁剑中也有专门的插件可以一键注入内存马。原理也很简单,相对于Java可以直接把整个shell写入内存,php内存马的实现则是将一个木马反复写入,达到无法删除的目的。
不死马原型如下:
12345678910111213<?php ignore_user_ ...
WebShell(1)| 基础详解
前段时间忙着项目,awd比赛等,都没怎么写博客,不是没学,是不知道写啥。
好了,话不多说,2022年的第一篇博客。
WebShell基础
什么是WebShell?
顾名思义,web的含义是显然需要服务器开放web服务,shell的含义是取得对服务器某种程度上操作权限。
webShell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webShell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
webShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。
入侵者在入侵了一个网站后,通常会将asp或php后门文件与网站目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
Shell是一个人机交互页面,能操控服务器并获取权限。
Shell文件有个变态的地方,就是可从服务器那边接收数据并执行、返回结果,也就是说只要把shell文件上传到目标服务器,就能操控服务器了。
利用webShell可以在Web服务器上执行系统命令、 ...
Scrapy爬虫框架
Scrapy框架概念
Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。
Scrapy文档地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
Scrapy框架作用
少量的代码,就能够快速的抓取。一般用于爬取大量数据。
Scrapy框架工作流程
回顾request的爬虫流程
我们可以在此基础上改写流程:
而上面改写的流程图也更加便于大家去理解scrapy的流程
Scapy的流程
其流程详细如下:
爬虫中起始的url构造成request对象——>爬虫中间件——>引擎——>调度器
调度器把request——>引擎——>下载中间件——>下载器
下载器发送请求,获取response响应——>下载中间件——>引擎——>爬虫中间件——>爬虫
爬虫提取url地址,组装成request对象——>爬虫中间件——>引擎——>调度器,重复步骤2
爬虫提取数据——>引擎——&g ...
Redis学习笔记(3)
Redis应用问题
前言
用户的数据一般都是存储于数据库中,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里硬件中最慢的了。
当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就崩溃,所以为了避免用户直接访问数据库,会用Redis作为缓存层。
Redis是内存数据库,将数据库的数据缓存在Redis中,相当于数据缓存在内存中,内存的读写速度比硬盘快好几个数量级,这也大大提高了系统性能。
引入了缓存层,随之而来的是有关缓存异常的一些问题:缓存穿透、缓存击穿、缓存雪崩、缓存颠簸、缓存预热、缓存降级…而前三个也正是有些企业面试经常考察的问题。
缓存穿透
概念
缓存层和数据库中都没有的数据,而用户不断发起请求,导致请求在访问缓存时,发现缓存缺失,再去访问数据库,如果从数据库中查不到该数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端持久的意义。
而我们数据库的 id 都是1开始自增上去的,如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。
造成原因
自身 ...
Redis学习笔记(2)
前方多图提醒,请耐心等待加载或刷新页面,已参考多种资料,作图不易,且看且珍惜。(快累趴了)
Redis主从复制
概述
主从复制,主机数据更新后根据配置和策略,自动同步道备机的master/slaver机制,Master以写为主,Slave以读为主。
其作用有以下几点:
读写分离:主服务器负责写,各从服务器负责读,即主机写,从机读
容灾快速恢复:主从多台服务器进行持久化操作,任意一台服务器宕机也不会影响数据恢复,有效避免了单点故障问题,使数据持久化更加安全
其他:主从复制是实现哨兵模式和Redis集群的前提
实现主从复制
每一台Redis服务器启动时,默认都为主服务器(master),可通过命令info replcation查看
配置文件修改
123mkdir /myredis # 创建文件夹存储配置文件cd /myredis # 进入文件夹cp /etc/redis.conf /myredis/redis.conf # 复制原配置文件,以便操作
创建reids6379.conf、reids6380.conf、reids6381. ...
Spring boot整合Redis
Jedis、Spring-data-redis的配置以及区别
Jedis如何配置
jedis引入依赖
12345<!-- Jedis引入依赖--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
连接Redis客户端
Jedis直连
123Jedis jedis = new Jedis("192.168.30.0", 6379); jedis.set("hello", "world");String value = jedis.get("hello");
JedisPool 连接池的使用
配置文件jedis.properties
12345678# 资源池最大连接数maxTotal=50 # 资源池 ...
Redis学习笔记(1)
Redis键(key)
命令
描述
keys *
查看当前库所有key
exists <key>
判断某个key是否存在
type <key>
查看key是什么类型
del <key>
删除指定的key数据
expore <key> <time>
为给定的key设置过期时间time(单位秒)
ttl <key>
查看还有多少秒过期,-1表示永不过期,-2表示已过期
select <index>
切换当前数据库(共16个数据库,0为默认库)
dbsize
查看当前数据库key的数量
flushdb/flushall
清空当前库/全部库
Redis字符串(String)
String类型是二进制安全的,意味着Redis的String可包含任何数据,比如jpg图片或者序列化的对象。
一个Redis中字符串value最多可以是512M。
命令
描述
set <key> <value>
添加键值对
get <key ...