1. 下载并解压软件包(本篇适用以下三个版本)
apache-tomcat-10.0.16.tar.gz
apache-tomcat-8.5.75.tar.gz
apache-tomcat-9.0.58.tar.gz
2. 确认JDK版本为1.8
3. 启动服务
进入解压后的目录,进入bin目录,启动服务
# ./startup.sh 4. 查看启动日志
# tail -f /root/apache-tomcat-8.5.75/logs/catalina.2022-04-26.log 5. 检查监听端口
# netstat -nltup |grep 8080 6. 防火墙放行端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent [root@localhost ~]# firewall-cmd --zone=public --add-port=8009/tcp --permanent [root@localhost ~]# firewall-cmd --reload 查看放行的public端口 [root@localhost ~]# firewall-cmd --zone=public --list-ports 7. 访问网页 IP:8080
版本8.5.75:
版本10.0.16
版本9.
sql注入基础 SQL注入就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。
登录框绕过 正常情况 当我们进入登陆页面的时候,会输入账号和密码,网站会运行下面的sql语句,当账号username和密码password正确时,会登录成功。
select * from users where username='name' and password='pwd'; 利用'or 1=1 # select * from users where username='' or 1=1 #' and password=''; sql语句中,#表示注释。username='' 为假,1=1为真,假or真=真,所以这条sql语句可以正常运行。
上面的语句等价于
select * from users where username='' or 1=1; 而这条语句中,我们并不需要知道这个网站的账号和密码,便可以实现绕过登录框,直接进入网站的效果。
练习题目 https://www.mozhe.cn/bug/detail/RktjK0hPMDJIUlZMVjVFb3BDcWphZz09bW96aGUmozhe
十年河东,十年河西,莫欺少年穷
学无止境,精益求精
一、Nginx 关于Nginx的用途,听到最多的两个词,就是:
端口转发 负载均衡 负载均衡不属于现阶段要学习的内容,重点来看一看端口转发,本文用它来解决跨域请求的问题。
二、CROS 跨域资源共享 我们需要知道,同源的三要素:协议【http协议、https协议】、域名、端口。
如果比较两个地址,只要三者中只要有任何一个不同,就算跨域。
// 协议:http // 域名:localhost // 端口:8011 http://localhost:8011 出于安全原因,浏览器限制从脚本(比如JavaScript)内发起的跨源HTTP请求。
如果浏览器检测到跨域,它会尝试发起一次请求,然后查看返回的内容中,是否一个有允许跨域请求的标记(CORS响应头),如果有正确的标记,那么就不拦截;如果没有标记,浏览器就会阻止这个请求。并报错。
三、项目中为何产生跨域 在前后台分离的项目中,前台和后台分别运行在不同的端口上。
所以前台向后台发起异步请求时,会因为跨域,而被浏览器拦截下来。
这时解决方案是使用Nginx 配置 被访问的服务器允许跨域请求。
四、Nginx 实例配置 假设我们有两台服务器【同一个服务器,但端口不同】
服务器1:
server{ listen 80; server_name localhost; location / { root /html/index.html; } } 服务器2:
server { listen 8001; server_name localhost; # default_type application/octet-stream; #charset koi8-r; #access_log logs/host.access.log main; location /getuser { default_type application/json; return 200 '{id:abc:age:12}'; } } 现在如果让服务器1的index.
1. 下载软件包
以下三个版本都合适:
nginx-1.18.0.tar.gz
nginx-1.20.2.tar.gz
nginx-1.21.5.tar.gz
2. 解压软件包,并进入解压后的目录
3. 安装依赖项
# yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 4. 编译安装软件
[root@localhost nginx-1.20.2]# pwd/root/nginx-1.20.2[root@localhost nginx-1.20.2]# ./configure
执行结果
# make && make install 结果
5. 查找工作目录,并进入
# whereis nginx 6. 进入sbin目录
7. 启动服务
指定配置文件启动 # ./nginx -c /usr/local/nginx/conf/nginx.conf 关闭防火墙,或者放行端口 # systemctl stop firewalld # /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 登录网页 IP:80
mysql初始化错误【一】MySQL 初始化DATA报错
[ERROR] InnoDB: io_setup() failed with EAGAIN after 5 attempts.[ERROR] InnoDB: Cannot initialize AIO sub-system[ERROR] InnoDB: Plugin initialization aborted with error Generic error[ERROR] Plugin ‘InnoDB’ init function returned error.[ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.[ERROR] Failed to initialize plugins.
解决方法:
$ cat /proc/sys/fs/aio-max-nr65536 #64k个
$ vi /etc/sysctl.conffs.aio-max-nr=262144 #调整为256k个
$ sysctl -p
mysql初始化错误【二】Can’t find error-message file ‘/usr/local/mysql/errmsg.sys’
原因:一般是初始化的basedir 的路径指定错误了,basedir 一般指定数据库的bin,lib之类的文件
解决方法:初始化的去掉basedir
mysqld --initialize --user=mysql --datadir=/data
查看PID和端口的命令。
1.由端口号查询PID号
有时候会提示:“XXX端口被占用”,那么你不得不依据此端口去查看该端口下运行的哪些进程
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装
yum install -y gcc 二、下载并解压安装包 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -zxvf redis-5.0.3.tar.gz 三、cd切换到redis解压目录下,编译,安装 cd redis-5.0.3 make make install PREFIX=/usr/local/redis 四、启动服务 #前台启动 cd /usr/local/redis/bin/ ./redis-server #后台启动 从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录 cp redis.conf /usr/local/redis/bin/ #修改 redis.conf 文件,把 daemonize no 改为 daemonize yes ./redis-server redis.conf 五、设置开机启动 vim /etc/systemd/system/redis.service 复制如下内容: [Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl start redis.
转至:https://www.jb51.net/article/225654.htm
1、表空间容量指标查询 2、表空间扩容 方式1:手工改变已存在数据文件的大小 方式2:允许已存在的数据文件自动增长 方式3:增加数据文件 1、表空间容量指标查询 SELECT TABLESPACE_NAME 表空间, To_char(Round(BYTES / 1024, 2), '99990.00') || '' 实有, To_char(Round(FREE / 1024, 2), '99990.00') || 'G' 现有, To_char(Round(( BYTES - FREE ) / 1024, 2), '99990.00') || 'G' 使用, To_char(Round(10000 * USED / BYTES) / 100, '99990.00') || '%' 比例 FROM (SELECT A.TABLESPACE_NAME TABLESPACE_NAME, Floor(A.BYTES / ( 1024 * 1024 )) BYTES, Floor(B.FREE / ( 1024 * 1024 )) FREE, Floor(( A.
sql注入绕过之sqlmap的数据包换行问题 autoDecoder例 碰到个SQL注入,但是网站有防护,如图: 可以通过change body encoding来绕过waf 但是当我们放到sqlmap中跑注入,发现报500错误,后续可以通过autoDecoder来解决,详细如下:
数据包是Content-Type: multipart/form-data; 的注入 但是sqlmap不识别\r\n的符号,所以无法跑出注入 使用sqlmap --proxy=http://127.0.0.1:8080代理到burp查看请求 原因就在于\n符号,sqlmap不知道什么原因无法识别请求体的换行为\r\n,导致请求全是500,报错了 http数据包里的换行应该为\r\n,可以编写autoDecoder的flask脚本解决问题 flask脚本如下:
# -*- coding:utf-8 -*- # author:f0ngf0ng # 解决sqlmap中的\n无法识别为\r\n问题 from flask import Flask,request app = Flask(__name__) @app.route('/encode',methods=[POST]) def encrypt(): param = request.form.get('data') # 获取 post 参数 param = param.replace(\r\n,\n) data = param.replace(\n,\r\n) print(bytes(data,encoding=utf-8)) return data @app.route('/decode',methods=[POST]) # 不解密 def decrypt(): param = request.form.get('data') # 获取 post 参数 return param if __name__ == '__main__': app.
11、查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;
SELECT st.* FROM student st, (SELECT DISTINCT a.sno FROM (SELECT * FROM sc) a, (SELECT * FROM sc WHERE sc.sno='s001') b WHERE a.cno=b.cno) h WHERE st.sno=h.sno AND st.sno<>'s001' 12、查询至少学过学号为“s001”同学所有一门课的其他同学学号和姓名;
SELECT * FROM sc LEFT JOIN student st ON st.sno=sc.sno WHERE sc.sno<>'s001' AND sc.cno IN (SELECT cno FROM sc WHERE sno='s001') 13、把“SC”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;
UPDATE sc c1 SET score=( SELECT AVG(s.score) score FROM teacher t,course c,sc s WHERE t.
21、查询各科成绩前三名的记录:(不考虑成绩并列情况)
SELECT * FROM (SELECT sno,cno,score,row_number()over(PARTITION BY cno ORDER BY score DESC) rn FROM sc) WHERE rn<4 22、查询每门课程被选修的学生数
SELECT cno,COUNT(sno)FROM sc GROUP BY cno; 23、查询出只选修了一门课程的全部学生的学号和姓名
SELECT sc.sno,st.sname,COUNT(cno) FROM student st LEFT JOIN sc ON sc.sno=st.sno GROUP BY st.sname,sc.sno HAVING COUNT(cno)=1; 24、查询男生、女生人数
SELECT ssex,COUNT(*)FROM student GROUP BY ssex; 25、查询姓“张”的学生名单
SELECT * FROM student WHERE sname LIKE '张%'; 26、查询同名同性学生名单,并统计同名人数