4889软件园:电脑手机软件下载大全,热门手机游戏免费下载

4889软件园 > 资讯文章 > 英雄联盟更新包md5校验失败(关于 Linux 安全基线扫描/运维安全Demo方面的一些笔记)

英雄联盟更新包md5校验失败(关于 Linux 安全基线扫描/运维安全Demo方面的一些笔记)

作者:佚名 来源:4889软件园 时间:2023-03-08 16:50:17

英雄联盟更新包md5校验失败(关于 Linux 安全基线扫描/运维安全Demo方面的一些笔记)

英雄联盟更新包md5校验失败文章列表:

英雄联盟更新包md5校验失败(关于 Linux 安全基线扫描/运维安全Demo方面的一些笔记)

关于 Linux 安全基线扫描/运维安全Demo方面的一些笔记

写在前面

笔记是学习整理的,适合基线扫描参考,常见运维安全Demo。

整理了一份,希望对小伙伴有帮助.生活加油,天天开心!

博文主要围绕以几个方面:

Linux基本防护:账户安全、文件系统安全、关闭不需要的服务

用户切换与提权su和sudo,

SSHd访问控制

加密与解密/对称加密、非对称加密、md5息摘要

AIDE入侵检测

端口扫描

一、Linux基本防护

一、Linux基本防护

账户安全:设置账户有效期,锁定与解锁账户密码,修

改登陆信息

文件系统安全:修改

文件 ATTR属性,设置mount挂载

关闭不需要的服务

设置账号有效期

使用chage工具

-d 0, 强制修改密码

-E yyyy-mm-dd,指定失效日期(-1 取消)

##创建账户dachui[root@liruilong ~]$ useradd dachui####查看账户dachui的过期时间[root@liruilong ~]$ chage -l dachui最近一次密码修改时间 :8月 18, 2020密码过期时间 :从不密码失效时间 :从不帐户过期时间 :从不 ##永不过期两次改变密码之间相距的最小天数 :0两次改变密码之间相距的最大天数 :99999在密码过期之前警告的天数 :7###-E 指定账户dachui的过期时间[root@liruilong ~]$ chage -E 2029-10-01 dachui[root@liruilong ~]$ chage -l dachui最近一次密码修改时间 :8月 18, 2020密码过期时间 :从不密码失效时间 :从不帐户过期时间 :10月 01, 2029 ##过期时间指定两次改变密码之间相距的最小天数 :0两次改变密码之间相距的最大天数 :99999在密码过期之前警告的天数 :7###-E 后跟数字-1,代表取消账户的过期时间设置[root@liruilong ~]$ chage -E -1 dachui[root@liruilong ~]$ chage -l dachui最近一次密码修改时间 :8月 18, 2020密码过期时间 :从不密码失效时间 :从不帐户过期时间 :从不 ##账户永不过期两次改变密码之间相距的最小天数 :0两次改变密码之间相距的最大天数 :99999在密码过期之前警告的天数 :7

设置强制要求用户修改密码 -d 0 案例

########设置强制要求用户修改密码 -d 0 案例##第一步:给用户dachui设置密码[root@liruilong ~]$ echo 123456 | passwd --stdin dachui更改用户 dachui 的密码 。passwd:所有的身份验证令牌已经成功更新。##第二步:使用dachui用户远程本机[root@liruilong ~]$ ssh dachui@127.0.0.1......dachui@127.0.0.1 s password: #输入密码123456[dachui@liruilong ~]$ #可以登录,ctrl D 退出##第三步:管理员设置dachui用户必须修改密码,否则无法登录[root@liruilong ~]$ chage -d 0 dachui##第四步:重新使用dachui用户远程本机,需要重新设置密码#因为是普通用户,权限低,所以密码必须是8位以上,字母和数字(tarena123)[root@liruilong ~]$ ssh dachui@127.0.0.1dachui@127.0.0.1s password: #输入密码123456You are required to change your password immediately (root enforced)Last failed login: Tue Aug 18 08:38:45 CST 2020 from localhost on ssh:nottyThere was 1 failed login attempt since the last successful login.Last login: Tue Aug 18 08:33:19 2020 from localhostWARNING: Your password has expired.You must change your password now and login again!Changing password for user dachui.Changing password for dachui.(current) UNIX password: #输入以前的密码123456New password: #设置新的密码为123,太过简单无法通过BAD PASSWORD: The password is too similar to the old oneNew password: #设置新的密码为654321,密码最少是8位BAD PASSWORD: The password is shorter than 8 charactersNew password: #设置新的密码:tarena123Retype new password: #重新输入新密码:tarena123passwd: all authentication tokens updated successfully.Connection to 127.0.0.1 closed.#第五步:重新使用账户dachui远程本机[root@liruilong ~]$ ssh dachui@127.0.0.1dachui@127.0.0.1s password: #输入密码:tarena123Last login: Tue Aug 18 08:38:49 2020 from localhost[dachui@liruilong ~]$ #ctrl D 登出

账号的锁定/解锁

使用passwd命令: -l 锁定、-u 解锁、-S 看状态

####-S(大写) 查看用户dachui密码的状态[root@liruilong ~]$ passwd -S dachuidachui PS 2020-08-18 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)###-l 锁定dachui账户[root@liruilong ~]$ passwd -l dachui锁定用户 dachui 的密码 。passwd: 操作成功####-S(大写) 查看用户dachui密码的状态,密码被锁定,无法登录使用[root@liruilong ~]$ passwd -S dachuidachui LK 2020-08-18 0 99999 7 -1 (密码已被锁定。)###使用账户dachui远程本机,无法登录[root@liruilong ~]$ ssh dachui@127.0.0.1dachui@127.0.0.1's password: #密码为: tarena123Permission denied, please try again.dachui@127.0.0.1's password:###-u 解锁dachui账户[root@liruilong ~]$ passwd -u dachui解锁用户 dachui 的密码。passwd: 操作成功###重新使用账户dachui远程本机,可以登录[root@liruilong ~]$ ssh dachui@127.0.0.1dachui@127.0.0.1s password: #密码为: tarena123Last failed login: Tue Aug 18 08:55:30 CST 2020 from localhost on ssh:nottyThere was 1 failed login attempt since the last successful login.Last login: Tue Aug 18 08:46:50 2020 from localhost[dachui@liruilong ~]$ #ctrl D 退出登录Connection to 127.0.0.1 closed.#####-S(大写) 重新查看用户dachui密码的状态,已解锁[root@liruilong ~]$ passwd -S dachuidachui PS 2020-08-18 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

强制定期修改密码

配置文件 /etc/login.defs

主要控制属性

主要控制属性

PASS_MAX_DAYS —》 用户密码的最长有效期

PASS_MIN_DAYS —》 用户密码的最短有效期

PASS_WARN_AGE —》 用户密码过期的前几天会发送警告信息

#######此管理用户密码的操作,只会对后面创建的用户生效,以前的则不影响[root@liruilong ~]$ vim /etc/login.defs......25 PASS_MAX_DAYS 60 #一个密码最长可以使用60天26 PASS_MIN_DAYS 0 #一个密码最少要用多少天,否则无法修改,0不设置27 PASS_MIN_LEN 5 #密码的最少长度为528 PASS_WARN_AGE 7 #密码过期的前7天,对用户发送警告信息......#####对当前用户的密码进行管理,/etc/shadow 为用户密码的配置文件###用户密码的最长有效期为99999,可以直接修改配置文件对以前的用户进行密码管理[root@liruilong ~]$ cat /etc/shadow | head -3root:$6$l2XJYza/aL1Ug4Ta$4kBxc4ED.pyWbBR5Yg3XVX/3lT3S0Efuh4eNxC83AdIlYDeEzcafsbV8YkVo88T0W/vVDTxpYtiFceiUM9qQk0::0:99999:7:::bin:*:17632:0:99999:7:::daemon:*:17632:0:99999:7:::

伪装登录提示

伪装登录提示

配置文件 /etc/issue、/etc/issue.net

分别使用于本地、远程登录

默认会提示内核、系统等版本信息

这个 centos7 可能有点问题,可以写到 .bashrc 文件里:.bashrc文件通常也是通过某个bash启动文件来运行的。因为.bashrc文件会运行两次:一次是 当你登入bash Shell时,另一次是当你启动一个bash shell时。如果你需要一个脚本在两个时刻都得 以运行,可以把这个脚本放进该文件中。

#####修改本地用户登录的提示信息[root@liruilong ~]$ vim /etc/issueWelcome to Tedu#####修改网络用户登录的提示信息,远程登录时显示,ssh默认关闭此功能##可以不修改[root@liruilong ~]$ vim /etc/issue.netWelcome to Ted

文件系统安全

锁定/解锁保护文件

文件属性控制:chattr、lsattr

、- 控制方式属性i:不可变 (immutable)属性a: 仅可追加(append only)

######创建一个测试文件[root@liruilong ~]$ vim test.shhello the worldni hao.#########文件如果有i的属性,则对于此文件,增删改查均无法操作##lsattr 查看文件的属性[root@liruilong ~]$ lsattr test.sh---------------- test.sh##chattr 给文件test.sh增加i的属性[root@liruilong ~]$ chattr i test.sh##查看文件test.sh属性[root@liruilong ~]$ lsattr test.sh----i----------- test.sh##测试,写入操作和删除操作都无法进行[root@liruilong ~]$ echo 123 > test.sh-bash: test.sh: 权限不够[root@liruilong ~]$ rm -rf test.shrm: 无法删除"test.sh": 不允许的操作##取消文件test.sh的i的属性,通过lsattr查看[root@liruilong ~]$ chattr -i test.sh[root@liruilong ~]$ lsattr test.sh---------------- test.sh#########文件如果有a的属性,则对于此文件,只能执行追加的操作####对于日志文件执行a属性,防止内容被篡改##给文件test.sh增加一个a属性,lsattr查看[root@liruilong ~]$ chattr a test.sh[root@liruilong ~]$ lsattr test.sh-----a---------- test.sh###测试,追加内容的操作可以进行,写入,删除失败[root@liruilong ~]$ echo 123 >> test.sh[root@liruilong ~]$ echo 123 > test.sh-bash: test.sh: 不允许的操作[root@liruilong ~]$ rm -rf test.shrm: 无法删除"test.sh": 不允许的操作##取消文件test.sh的a的属性,通过lsattr查看[root@liruilong ~]$ chattr -a test.sh[root@liruilong ~]$ lsattr test.sh---------------- test.sh

文件系统挂载熟悉

mount 挂载属性

noexec: 不可执行程序

noatime: 不更新文件的访问时间

noexec:
挂载设备时,添加此选项,则此设备中的所有程序均不可被执行(例如:病毒或木马)
noatime:
计算机中的文件都有访问时间(atime),修改时间(mtime);
挂载设备时,添加此选项,则所有文件的访问时间都不再被更新;
如果计算机中的a文件被用户访问,则a文件的atime就会被修改,对于web服务器而言,会有成千上万的
用户访问网页,则这个网页的atime就会被频繁修改,会消耗大量的CPU资源,需要在挂载的时候使用

#########boot分区挂载示例,其他挂载方法类似[root@liruilong ~]$ vim /etc/fstabUUID=c120742d-5bdf-48c3-b830-3bfb3e796009 /boot xfsdefaults,noexec,noatime 0 0###-o remount 重新挂载,让配置生效[root@liruilong ~]$ mount -o remount /boot/###查看挂载的属性,/boot分区下,有了noexec,noatime[root@liruilong ~]$ mount....../dev/sda1 on /boot type xfs (rw,noexec,noatime,attr2,inode64,noquota)......#####定义一个不断输出a的脚本,赋予x执行权限,却无法运行[root@liruilong ~]$ vim /boot/test.sh#!/bin/bashwhile :doecho adone##必须是在/boot/目录下,执行脚本[root@liruilong ~]$ cd /boot[root@liruilong boot]$ chmod x test.sh[root@liruilong boot]$ ./test.sh-bash: ./test.sh: 权限不够

程序和服务控制

禁用非必要的系统服务: 使用systemctl、chkconfig (centos6使用) 工具

可选服务列表(选择进行关闭)

可选服务列表

cups.service 打印服务

postfix.service 邮件服务

NetworkManager.service 网络管理服务(network可以替代)

firewalld 防火墙 (iptables可以替代)

atd.service 一次性计划任务(crond可以替代)

bluetooth.service 蓝牙服务

autofs.service 自动挂载

pcscd.service 智能卡设备资源管理器

#####停止服务,并设置为开机不会自动启动[root@liruilong ~]$ systemctl stop firewalld[root@liruilong ~]$ systemctl disable firewalld

二、用户切换与提权

su切换用户身份

切换与提权的应用场景

切换用户身份,When?:SSH远程管理/运维测试

提升执行权限,when?:管理权限细分

su切换的基本用法:Substitube User,换人

快速切换为指定的其他用户

普通用户执行时,需验证目标用户的口令

root执行时,无需验证口令

命令格式

用法1:su [-] [目标用户]

用法2:su [-] -c “命令” [目标用户]

su操作示例

从普通用户切换为root,并登录新Shell环境,执行 su -,或者su - root,不指名目标用户时,默认视为root

#####创建新的用户jerry,并设置密码为123456[root@liruilong ~]$ useradd jerry[root@liruilong ~]$ echo 123456 | passwd --stdin jerry更改用户 jerry 的密码 。passwd:所有的身份验证令牌已经成功更新。###从root用户切换到jerry用户[root@liruilong ~]$ su - jerry###查看当前当前登录的用户身份为jerry,普通用户的权限很低[jerry@liruilong ~]$ whoamijerry[jerry@liruilong ~]$ cat /etc/shadowcat: /etc/shadow: Permission denied[jerry@liruilong ~]$ ls /root/ls: cannot open directory /root/: Permission denied[jerry@liruilong ~]$ exit #退出jerry用户登录状态logout

#####创建新的用户tom,并设置密码为123456[root@liruilong ~]$ useradd tom[root@liruilong ~]$ echo 123456 | passwd --stdin tom更改用户 tom 的密码 。passwd:所有的身份验证令牌已经成功更新。###从root用户切换到jerry用户,管理员切换成普通用户身份不需要密码[root@liruilong ~]$ su - jerry上一次登录:二 8月 18 10:21:41 CST 2020pts/0 上###从jerry用户切换到tom用户,普通用户身份的切换需要输入密码[jerry@liruilong ~]$ su - tomPassword: #输入tom用户的密码[tom@liruilong ~]$ exit #退出tom用户的登录logout[jerry@liruilong ~]$ exit #退出jerry用户的登录logout

###从root用户切换到jerry用户,管理员切换成普通用户身份不需要密码[root@liruilong ~]$ su - jerry上一次登录:二 8月 18 10:23:02 CST 2020pts/0 上###su - 后面不跟用户,则默认是切换到root用户下[jerry@liruilong ~]$ su -Password: #输入管理员root的密码Last login: Tue Aug 18 10:23:53 CST 2020 on pts/0[root@liruilong ~]$ exit #退出,回到jerry用户下[jerry@liruilong ~]$ exit #退出,回到最出的root解释器下

root以指定的普通用户身份执行任务:以用户tom的身份创建目录,以用户tom的身份执行管理员操作会出错

###-c 以普通用户jerry的身份执行一条命令[root@liruilong ~]$ su - jerry -c "touch /tmp/test.txt"##查看文件的属性[root@liruilong ~]$ ll /tmp/test.txt-rw-rw-r-- 1 jerry jerry 0 8月 18 10:25 /tmp/test.txt####错误,普通用户没有权利去重启sshd服务[root@liruilong ~]$ su - tom -c "systemctl restart sshd"Error creating textual authentication agent:......

分析su切换的使用情况:安全日志 /var/log/secure,记录su验证、Shell开启与关闭

[root@liruilong ~]$ tail -4 /var/log/secureAug 18 10:25:03 localhost su: pam_unix(su-l:session): session opened for userjerry by root(uid=0)Aug 18 10:25:03 localhost su: pam_unix(su-l:session): session closed for userjerryAug 18 10:40:50 localhost su: pam_unix(su-l:session): session opened for usertom by root(uid=0)Aug 18 10:40:51 localhost su: pam_unix(su-l:session): session closed for usertom

sudo 提升执行权限

sudo提权的基本用法

Super or another Do,超级执行:管理员预先为用户设置执行许可,被授权用户有权执行授权的命令,验证自己的口令

执行提权命令: 用法: sudo 提权命令

查看提权命令: 用法:sudo -l

配置sudo提权

修改方法

推荐:visudo

其他:vim /etc/sudoers ---> wq!(强制保存并退出)授权记录格式`

用户或组
#指定给特定用户授权或者组(多个用户属于一个组)
#指定给组授权时,组的前面必须加 %,例如:%wheel

主机列表
#允许哪些客户机可以通过这个用户登录本机去执行命令,例如:ALL(指所有客户机)
提权身份
#给第一列的用户赋予权限,例如:(root)

[NOPASSWD]:命令列表 #前半部分是不需要密码执行命令;后半部分是要执行的命令,且;命令要写绝
对路径

%wheel ALL=(root) ALL #给wheel组中的所有用户,赋予root的权限,让其可以在任何主机上以root的身份去执行任何命令

允许mike以root权限执行 /sbin/ 下的所有命令,但是,禁止修改eth0网卡的参数

/sbin/* #模糊匹配,/sbin/下的所有命令都可以用sudo提权使用!/sbin/ifconfg etho #! 代表取反,该命令不能被sudo提权使用

####sudo 提权,让普通用户jerry可以执行systemctl restart sshd 命令[root@liruilong ~]$ id jerryuid=1002(jerry) gid=1002(jerry) 组=1002(jerry)####通过which命令,获取systemctl的绝对路径[jerry@liruilong ~]$ which systemctl/bin/systemctl###最后一行追加,允许jerry用户,可以以任何人的身份,从任何客户端,执行此命令##立刻生效[root@liruilong ~]$ visudo......jerry ALL=(ALL) /usr/bin/systemctl######测试,验证##切换到jerry用户下[root@liruilong ~]$ su - jerry上一次登录:二 8月 18 10:50:16 CST 2020pts/0 上####使用sudo提权命令,重启sshd服务[jerry@liruilong ~]$ sudo systemctl restart sshd[sudo] password for jerry: ##jerry用户密码:123456Sorry, try again.###sudo -l 查看jerry用户可以执行的sudo提权命令[jerry@liruilong ~]$ sudo -l......User jerry may run the following commands on liruilong:(ALL) /usr/bin/systemctl

wheel组的用户无需验证可执行所有命令

####通过which命令,获取parted分区命令的绝对路径[root@liruilong ~]$ which parted/usr/sbin/parted###最后一行追加,允许tom用户,可以以任何人的身份,从任何客户端,无密码使用parted命令##立刻生效[root@liruilong ~]$ visudo......jerry ALL=(ALL) /usr/bin/systemctltom ALL=(ALL) NOPASSWD:/usr/sbin/parted######测试,验证##切换到tom用户下[root@liruilong ~]$ su - tom上一次登录:二 8月 18 10:40:50 CST 2020pts/0 上##sudo提权后,tom用户下,查看磁盘/dev/sda的分区情况[tom@liruilong ~]$ sudo parted /dev/sda printModel: VMware, VMware Virtual S (scsi)Disk /dev/sda: 21.5GBSector size (logical/physical): 512B/512BPartition Table: msdosDisk Flags:Number Start End Size Type File system Flags1 1049kB 1075MB 1074MB primary xfs boot2 1075MB 21.5GB 20.4GB primary lvm[tom@liruilong ~]$ exit #退出tom用户登录

分析sudo提权的使用情况: 修改全局配置,启动日志Defaults logfile="/var/log/sudo"

##########修改全局配置,启动的日志,该日志记录sudo提权的使用情况##最后一行添加:Defaults logfile="/var/log/sudo"[root@liruilong ~]$ visudo......jerry ALL=(ALL) /usr/bin/systemctltom ALL=(ALL) NOPASSWD:/usr/sbin/partedDefaults logfile="/var/log/sudo"########验证日志信息,需先执行一次提权命令[root@liruilong ~]$ su - tom上一次登录:二 8月 18 10:56:52 CST 2020pts/0 上##sudo提权后,tom用户下,查看磁盘/dev/sda的分区情况[tom@liruilong ~]$ sudo parted /dev/sda printModel: VMware, VMware Virtual S (scsi)Disk /dev/sda: 21.5GBSector size (logical/physical): 512B/512BPartition Table: msdosDisk Flags:Number Start End Size Type File system Flags1 1049kB 1075MB 1074MB primary xfs boot2 1075MB 21.5GB 20.4GB primary lvm[tom@liruilong ~]$ exit #退出tom用户的登录状态######查看日志,看看sudo提权的使用信息[root@liruilong ~]$ cat /var/log/sudoAug 18 13:02:12 : jerry : TTY=pts/0 ; PWD=/home/jerry ; USER=root ;COMMAND=/bin/systemctl restart sshdAug 18 13:18:34 : tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ;COMMAND=/sbin/parted /dev/sda print

三、sshd访问控制

SSH基本防护

SSH防护概述

存在的安全隐患

密码嗅探、键盘记录

暴力枚举账号、猜解密码

常见的防护措施

用户限制、黑白名单

更改验证方式(密码 --> 密钥对)

防火墙…

sshd基本安全配置

配置文件 /etc/ssh/sshd_config

Port 3389 //改用非标准端口

ListenAddress 192.168.168.174

PermitrootLogin //禁止root登录

#####修改ssh配置时,先备份sshd主配置文件[root@liruilong ~]$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak####修改虚拟机ssh远程连接得端口为3389[root@liruilong ~]$ vim /etc/ssh/sshd_config17 Port 3389##重启sshd服务[root@liruilong ~]$ systemctl restart sshd#xshell测试使用ssh远程时必须加端口号3389[c:~]$ ssh root@192.168.2.100 3389####用户只能通过192.168.2.100这个IP地址远程liruilong这台虚拟机[root@liruilong ~]$ vim /etc/ssh/sshd_config20 ListenAddress 192.168.2.100##重启sshd服务,虚拟机新添加网卡配置其他IP地址测试[root@liruilong ~]$ systemctl restart sshd#xshell测试使用ssh远程时必须加端口号3389[c:~]$ ssh root@192.168.2.100 3389

#####禁止root远程登录虚拟机liruilong[root@liruilong ~]$ vim /etc/ssh/sshd_config38 PermitRootLogin no##重启sshd服务,xshell使用root远程登录liruilong失败[root@liruilong ~]$ systemctl restart sshd#####xshell以普通用户jerry的身份可以登录liruilong虚拟机##使用su -切换成root身份,或者使用sudo提权命令[c:~]$ ssh jerry@192.168.2.100 3389 #密码123456[tom@liruilong ~]$[tom@liruilong ~]$ su - root #su - 切换root用户密码: #输入root密码[root@liruilong ~]$

配置文件 /etc/ssh/sshd_configUseDNS no //不解析客户机地址LoginGraceTime 1m //登录限时MaxAuthTries 3//每连接最多认证次数

UseDNS no #不对客户机进行域名解析,访问网站的普通用户是没有域名的,不需要解析
LoginGraceTime 1m #用户在ssh远程服务器时,如果1分钟内用户没有输入用户名和密码,则断开连接

#########举例演示##登录限时修改为10s,真实环境需要长一点[root@liruilong ~]$ vim /etc/ssh/sshd_config37 LoginGraceTime 10s115 UseDNS no##重启sshd服务[root@liruilong ~]$ systemctl restart sshd###使用xshell远程连接时,不输入密码,等待10s中,会出现连接关闭的提示[c:~]$ ssh jerry@192.168.2.100 3389Connection closing...Socket close.

MaxAuthTries 3 : #用户远程服务器时,密码错误,可以尝试多少次

#这里的3不是指的3次,是一个概数,需要不断尝试错误连接,来得出这里得数字#########举例演示##修改连接认证次数为3[root@liruilong ~]$ vim /etc/ssh/sshd_config40 MaxAuthTries 3##重启sshd服务[root@liruilong ~]$ systemctl restart sshd##使用xshell远程连接,输入错误密码,输入两次就会出现连接端口的提示[c:~]$ ssh jerry@192.168.2.100 3389Connection closing...Socket close.

ssh经常一段时间就断掉解决办法去掉注释,改成

vim /etc/ssh/sshd_configClientAliveInterval 30ClientAliveCountMax 86400

这两行的意思分别是

    、客户端每隔多少秒向服务发送一个心跳数据

    、客户端多少秒没有相应,服务器自动断掉连接

重启sshd服务

#service sshd restart

sshd黑/白名单配 配置文件 /etc/ssh/sshd_configDenyUsers USER1 USER2 …AllowUsers USER1@HOST USER2 …DenyGroups GROUP1 GROUP2 …AllowGroups GROUP1 GROUP2 …

#####设置黑白名单时,如果要允许或拒绝多个用户,用户之间以空格作为分隔符DenyUsers #设置黑名单,拒绝某些用户登录本机AllowUsers #设置白名单,允许某些用户登录本机DenyGroups #设置黑名单,拒绝一个或多个用户组登录本机AllowGroups #设置白名单,允许一个或多个用户组登录本机AllowUsers USER1@HOST #设置白名单,允许用户USER1从HOST这台主机登录本机

应用示例:仅允许一部分用户(从指定地点)登入,其他任何用户均禁止登入

####使用xshell让用户jerry使用3389端口登录[c:~]$ ssh jerry@192.168.2.100 3389[jerry@liruilong ~]$ su - root #切换为root身份[jerry@liruilong ~]$#######设置白名单,仅允许tom可以ssh远程登录服务器,其他任何用户都无法登录##如果设置的是白名单,则不需要设置黑名单了,默认是拒绝其他用户远程登录[root@liruilong ~]$ vim /etc/ssh/sshd_config42 AllowUsers tom##重启sshd服务[root@liruilong ~]$ systemctl restart sshd######xshell远程测试##jerry无法再登录了[c:~]$ ssh jerry@192.168.2.100 3389 #登录密码123456##tom用户可以远程登录[c:~]$ ssh tom@192.168.2.100 3389 #登录密码 123456[tom@liruilong ~]$```bash#######设置黑名单,仅拒绝tom通过ssh远程登录服务器,其他用户都允许[root@liruilong ~]$ vim /etc/ssh/sshd_config42 DenyUsers tom##重启sshd服务[root@liruilong ~]$ systemctl restart sshd######xshell远程测试##tom无法再登录了[c:~]$ ssh tom@192.168.2.100 3389 #登录密码123456##jerry用户可以远程登录[c:~]$ ssh jerry@192.168.2.100 3389 #登录密码 123456[tom@liruilong ~]$

#######设置黑名单,拒绝用户tom从IP地址为192.168.2.1的主机,来远程服务器svr7[root@svr7 ~]$ vim /etc/ssh/sshd_config42 DenyUsers tom@192.168.2.1##重启sshd服务[root@svr7 ~]$ systemctl restart sshd

SSH密钥对验证

sshd验证方式控制

口令验证::检查登录用户的口令是否一致:密码验证:#当windows被攻击,系统被植入木马,容易被攻击者从键盘记录等方式中获取密码

密钥验证:检查客户端私钥与服务器上的公钥是否匹配:密钥验证:#密钥验证的安全度很高;#不会有输入密码的过程,键盘工具方式无效;

PasswordAuthentication yes #ssh支持密码验证

47 AuthorizedKeysFile .ssh/authorized_keys ##指定公钥的存放位置,在用户的家目录下的.ssh目录中的authorized_keys文件中

密钥对验证的实现思路

第一步:客户机创建密钥对,私钥文件:id_rsa 公钥文件: id_rsa.pub;

第二步: 客户机上传公钥到服务器上用户的家目录下 ./ssh/authorized_keys文件;
ssh-copy-id 命令,会自动将公钥放到指定用户家目录的对应文件中

创建SSH密钥对:使用工具 ssh-keygen

可以手动指定加密算法(-t rsa 或 -t dsa)

若不指定,默认采用RSA加密

######非交互的方式创建密钥对[root@svr7 ~]$ ssh-keygen -N '' -f /root/.ssh/id_rsaGenerating public/private rsa key pair.Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256: pb7aZI5xtlulc1Z3MQjjsNGLu5mbCHxU5JfPtWOe w root@svr7The keys randomart image is: ---[RSA 2048]---- | . || . . .o|| = o .o || . B o .=|| S * .= || o = .oo= .|| .. *o. .o || .@* . . o|| o*O oE| ----[SHA256]----- ###密钥对会生成在/root/.ssh/目录下[root@svr7 ~]$ ls /root/.ssh/id_rsa id_rsa.pub known_hosts

部署SSH公钥

#方法一:将公钥通过ssh-copy-id放到192.168.2.200的服务器上[root@svr7 ~]$ ssh-copy-id root@192.168.2.200#查看公钥文件的保存路径[root@client ~]$ ls /root/.ssh/authorized_keys

四、加密与解密

加解密概述

加密目的及方式

确保数据的机密性对称加密:加密/解密用同一个密钥非对称加密:加密/解密用不同的密钥(公钥、私钥)

保护信息的完整性(常用于做数据完整性校验)信息摘要:基于输入的信息生成长度较短、位数固定的散列值

常见的加密算法

对称加密DES,Data Encryption StandardAES,Advanced Encryption Standard

非对称加密RSA,Rivest Shamirh AdlemanDSA,Digital Signature Algorithm

Hash散列技术,用于信息摘要MD5, Message Digest Algorithm 5 : 根据输入的文本(长度不限) ,生成固定长度(比如128位)的摘要文本SHA, Secure Hash Algorithm1 : 只要输入的文本不同,则生成的摘要文本也不一样

MD5完整性检验

使用md5sum校验工具

生成MD5校验值

与软件官方提供的校验值比对

GPG加解密厂具

GnuPG简介

GnuPG,GNU Privacy Guard : http://www.gnupg.org/ 最流行的数据加密、数字签名工具软件

########查看gpg的版本,以及支持的算法[root@node1 ~]$ gpg --versiongpg (GnuPG) 2.0.22libgcrypt 1.5.3Copyright (C) 2013 Free Software Foundation, Inc.License GPLv3 : GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Home: ~/.gnupg支持的算法:公钥:RSA, ?, ?, ELG, DSA对称加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224压缩:不压缩, ZIP, ZLIB, BZIP2

GPG对称加解密

基本用法

加密操作:--symmetric 或 -c

解密操作:--decrypt 或 -d

####定义一个测试文件test.txt[root@node1 ~]$ echo "hello the world" > test.txt####使用gpg -c 对文件进行加密,输入加密密码 123456【tab键切换,回车确定】[root@node1 ~]$ gpg -c test.txt

####加密完成后,会生成一个以.gpg结尾的加密文件[root@node1 ~]$ ls -l test.txt.gpg-rw-r--r-- 1 root root 63 8月 20 09:58 test.txt.gpg###删除原始文件[root@node1 ~]$ rm -rf test.txt

######使用gpg -d解密数据,将数据解密后放到/opt/test02.txt文件中###解密密钥存放在/root/.gnupg/secring.gpg文件中##加密和解密在同一台服务器上,有解密密钥的存在,不需要输入密码直接解密[root@node1 ~]$ gpg -d test.txt.gpg > /opt/test02.txtgpg: CAST5 加密过的数据gpg: 以 1 个密码加密hello the worldgpg: 警告:报文未受到完整的保护###查看解密后的文件内容[root@node1 ~]$ cat /opt/test02.txthello the world

#######在node1上加密文件,在node2上解密文件[root@node1 ~]$ scp test.txt.gpg root@192.168.2.200:/root/####客户端node2上查看加密数据[root@node2 ~]$ ls -l test.txt.gpg-rw-r--r-- 1 root root 63 8月 20 10:16 test.txt.gpg######解密数据,存放到test.txt文件中##根据提示需要输入密码 123456[root@node2 ~]$ gpg -d test.txt.gpg > /root/test.txt##查看解密后的数据[root@node2 ~]$ ls -l test.txt-rw-r--r-- 1 root root 16 8月 20 10:17 test.txt[root@node2 ~]$ cat test.txthello the world

GPG非对称加解密

基本过程

前期准备工作UserB 创建密钥对:--gen-keyUserB 导出公钥:--export、--armor 或 -aUserA 导入公钥:--import

[root@node1 ~]$ gpg --gen-keygpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.请选择您要使用的密钥种类:(1) RSA and RSA (default) #默认使用密钥类型(2) DSA and Elgamal(3) DSA (仅用于签名)(4) RSA (仅用于签名)您的选择? #直接回车选择默认密钥类型RSA 密钥长度应在 1024 位与 4096 位之间。您想要用多大的密钥尺寸?(2048) #密钥长度,默认2048您所要求的密钥尺寸是 2048 位请设定这把密钥的有效期限。0 = 密钥永不过期 #默认选项<n> = 密钥在 n 天后过期 #3 代表3天后过期<n>w = 密钥在 n 周后过期 #3w 代表3周后过期<n>m = 密钥在 n 月后过期 #3m 代表3月后过期<n>y = 密钥在 n 年后过期 #3y 代表3年后后期密钥的有效期限是?(0) #回车,默认选择永不过期密钥永远不会过期以上正确吗?(y/n)y #选择y,确定以上选择You need a user ID to identify your key; the software constructs the user IDfrom the Real Name, Comment and Email Address in this form:"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"真实姓名:userb #填写密钥名称电子邮件地址:userb@tedu.cn #填写密钥邮箱注释:test key #注释信息,任意填写您选定了这个用户标识:“userb (test key) <userb@tedu.cn>”更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? #大写O确定,回车##这里输入的密码,是解密数据时需要输入的,选择“回车”,则代表解密不需要额外的密码验证,直接解密出数据

#####生成密钥对时,需要大量的随机数,是从/dev/random获取的,如果无法很快生成密钥,ctrl C 结束命令,修改随机数生成器###修改随机数的生成器为 /dev/urandom[root@node1 ~]$ mv /dev/random /dev/random.bak[root@node1 ~]$ ln -s /dev/urandom /dev/random###根据上面的操作重新生成密钥对,如果终端异常,输入 reset 重置终端[root@node1 ~]$ gpg --gen-key####查看生成的密钥[root@node1 ~]$ gpg --list-keys/root/.gnupg/pubring.gpg------------------------pub 2048R/8B8D56D4 2020-08-20uid userb (test key) <userb@tedu.cn>sub 2048R/90116CE3 2020-08-20

####根据密钥名称userb导出公钥[root@node1 ~]$ gpg -a --export userb > /tmp/userb.pub###也可以根据密钥邮箱userb@tedu.cn导出公钥[root@node1 ~]$ gpg -a --export userb@tedu.cn > /tmp/userb02.pub#####查看导出的公钥userb.pub内容[root@node1 ~]$ cat /tmp/userb.pub-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v2.0.22 (GNU/Linux)mQENBF895QwBCACwfDPG4vzoazhIGnLIghIN49ByACQG1YB2cHvoqITQ06KDve0pEHDayr2mcGGwZbv96tp3HDIoS70QpbMdiqri5zD3Jnms2C37pfRmPDjUJ6eQQQJJ......#####查看导出的公钥userb02.pub内容[root@node1 ~]$ cat /tmp/userb02.pub-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v2.0.22 (GNU/Linux)mQENBF895QwBCACwfDPG4vzoazhIGnLIghIN49ByACQG1YB2cHvoqITQ06KDve0pEHDayr2mcGGwZbv96tp3HDIoS70QpbMdiqri5zD3Jnms2C37pfRmPDjUJ6eQQQJJ......

########客户机node2导入来自node1的公钥####第一步:node1拷贝公钥到node2虚拟机中的/tmp目录下[root@node1 ~]$ scp /tmp/userb.pub 192.168.2.200:/tmp/####第二步:客户机client导入公钥/tmp/userb.pub#首先,查看列表,是否有公钥[root@node2 ~]$ gpg --list-keysgpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库#然后,根据文件导入公钥[root@node2 ~]$ gpg --import /tmp/userb.pubgpg: 密钥 8B8D56D4:公钥“userb (test key) <userb@tedu.cn>”已导入gpg: 合计被处理的数量:1gpg: 已导入:1 (RSA: 1)#最后,再次查看列表,新的公钥已经导入[root@node2 ~]$ gpg --list-keys/root/.gnupg/pubring.gpg------------------------pub 2048R/8B8D56D4 2020-08-20uid userb (test key) <userb@tedu.cn>sub 2048R/90116CE3 2020-08-20

基本用法加密操作:--encrypt 或 -e指定目标用户:--recipient 或 -r解密操作:--decrypt 或 -d

######在客户机node2上生成一个测试文件clear.txt[root@node2 ~]$ echo test > /root/clear.txt#####-e 加密,-r 使用公钥userb对文件clear.txt进行加密[root@node2 ~]$ gpg -e -r userb clear.txtgpg: 90116CE3:没有证据表明这把密钥真的属于它所声称的持有者pub 2048R/90116CE3 2020-08-20 userb (test key) <userb@tedu.cn>主钥指纹: 0644 7DE7 C2A8 EE21 F41F 939B C53B 6BCA 8B8D 56D4子钥指纹: 80B5 C5AB 7AA9 287C F411 AD7C 0105 14A9 9011 6CE3这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自己在做什么,您可以在下一个问题回答 yes。无论如何还是使用这把密钥吗?(y/N)y #y 确定使用公钥userb加密#####加密数据生成,以后发送文件也是发送.gpg结尾的加密文件#####加密文件发送过去以后,再通过私钥进行解密[root@node2 ~]$ ls -l /root/clear.txt.gpg-rw-r--r-- 1 root root 346 8月 20 11:10 /root/clear.txt.gpg#######客户端client发送加密文件给svr7[root@client ~]$ scp /root/clear.txt.gpg root@192.168.2.100:/root/######-d 解密数据;-r 使用userb私钥解密,要解密文件为clear.txt.gpg##解密后的数据存放到 clear.txt文件中[root@node1 ~]$ gpg -d -r userb clear.txt.gpg > clear.txtgpg: 由 2048 位的 RSA 密钥加密,钥匙号为 90116CE3、生成于 2020-08-20“userb (test key) <userb@tedu.cn>”##查看clear.txt中解密后的数据[root@node1 ~]$ cat clear.txttest

GPG软件签名与验证

软件签名与验证过程

软件官方以私钥对软件包执行数字签名

用户下载软件包、软件官方的公钥

以官方公钥验证软件包签名,确保数据来源正确

服务器使用私钥对发送出的所以数据文件进行签名;客户端可以使用公钥来对数据文件进行验证,查看其是否是有服务器发送的;如果是,则代表来源正确;如果不是,则数据文件不安全,删除

GPG软件签名与验证

命令

为软件包建立签名文件

分离式签名:--detach-sign 或 -b

验证软件包签名

验证签名:--verify

node1

####### -b 服务器node1对文件clear.txt进行签名##签名后会生成一个签名文件[root@node1 ~]$ gpg -b clear.txt[root@node1 ~]$ ls -l clear.txt.sig-rw-r--r-- 1 root root 287 8月 20 11:29 clear.txt.sig######将数据文件clear.txt和签名文件clear.txt.sig发送给客户端client[root@node1 ~]$ scp clear.txt clear.txt.sig root@192.168.2.200:/root/

node2

#########客户端node2通过 --verify 验证数据文件clear.txt的来源##验证签名时,签名文件放到前面,数据文件跟在后面[root@node2 ~]$ gpg --verify clear.txt.sig clear.txtgpg: 于 2020年08月20日 星期四 11时29分15秒 CST 创建的签名,使用 RSA,钥匙号 8B8D56D4gpg: 完好的签名,来自于“userb (test key) <userb@liruilong.cn>”gpg: 警告:这把密钥未经受信任的签名认证!gpg: 没有证据表明这个签名属于它所声称的持有者。主钥指纹: 0644 7DE7 C2A8 EE21 F41F 939B C53B 6BCA 8B8D 56D4

五、AIDE入侵检测

初始化系统

安装软件包

AIDE(Advanced intrusion detection environment),该软件为一套入侵检测系统,配置yum源即可安装aide软件

[root@node1 ~]$ yum -y install aide

aide原理:

在没有被人篡改之前对我们的计算机做一个全面的检查;

记录每个文件的状态(包括数据的时间,大小,权限,哈希值等);

当计算机被入侵以后,aide对计算机做同样的校验,同样的检查;

最后,通过对比入侵之前检查的结果和入侵之后的检查结果,找到哪些数据发生了哪些变化

修改配置文件

**AIDE默认配置文件为/etc/aide.conf**嗯,这个系统不一样会有出入

[root@node1 ~]$ vim /etc/aide.conf1 # Example configuration file for AIDE.23 @@define DBDIR /var/lib/aide #aide对数据校验后,结果文件的存放位置4 @@define LOGDIR /var/log/aide #aide日志文件的目录......###当系统被入侵后,需要将入侵前的数据aide.db.new.gz,更名为aide.db.gz##系统被入侵后,aide重新校验时会将新生成的校验结果aide.db.new.gz和以前校验结果aide.db.gz进行对比7 database=file:@@{DBDIR}/aide.db.gz......#####定义校验完数据后,将校验结果存放到哪个目录下的哪个文件中##默认存放到/var/lib/aide目录下;保存的文件名问aide.db.new.gz12 database_out=file:@@{DBDIR}/aide.db.new.gz......28 #p: permissions #校验文件的权限是否被修改29 #i: inode: #校验文件的inode节点是否被修改30 #n: number of links #校验文件的链接数量是否增多或减少31 #u: user #校验文件的所有者是否被修改32 #g: group #校验文件的所属组否是被修改33 #s: size #校验文件的大小是否变化......42 #md5: md5 checksum #校验文件md5生成的哈希值43 #sha1: sha1 checksum #校验文件sha1生成的哈希值44 #sha256: sha256 checksum #校验文件sha256生成的哈希值......######定义变量,变量中包含以上的所有校验54 FIPSR = p i n u g s m c acl selinux xattrs sha256......71 NORMAL = sha256 #定义变量,校验哈希值,会调用

修改配置文件

校验的目录设置

[root@node1 ~]$ vim /etc/aide.conf......99 /boot/ NORMAL #对/boot目录,进行sha256校验,NORMAL为变量100 /bin/ NORMAL #同上101 /sbin/ NORMAL102 /lib/ NORMAL103 /lib64/ NORMAL104 /opt/ NORMAL......112 !/usr/src/ #! 取反,设置不需要校验的目录113 !/usr/tmp/

第一步:批量注释掉所有的校验目录

步骤一: vim 打开文件/etc/aide.conf

步骤二: 末行模式下,光标移动到99行/boot/的首字母上【末行模式 :99】

步骤三: Ctrl v 进入到可视化模式,按键盘的下键,拉到最后一行

步骤四: Shift i 进入到插入模式,插入注释符号#;

步骤五: 按键盘左上角的Esc键,批量注释完成

第二步:插入一行校验目录

[root@node1 ~]$ vim /etc/aide.conf......93 DATAONLY = p n u g s acl selinux xattrs sha256......######对/tmp/目录进行校验,校验选项由变量DATAONLY决定98 /tmp/ DATAONLY99 #/boot/ CONTENT_EX100 #/bin/ CONTENT_EX......

初始化检查

在没有被攻击入侵前,根据配置文件,对数据进行校验操作

#####对/tmp/目录进行校验操作[root@node1 ~]$ aide --initAIDE, version 0.15.1### AIDE database at /var/lib/aide/aide.db.new.gz initialized.

######查看生成的校验结果数据#aide每次校验,生成的校验结果文件名都相同[root@node1 ~]$ ls /var/lib/aide/aide.db.new.gz/var/lib/aide/aide.db.new.gz

备份数据库

在被入侵前,将校验的数据库文件备份到安全的地方 如,优盘、光盘、移动硬盘、网络存储

######将校验的结果数据文件备份到/mnt目录下[root@node1 ~]$ mv /var/lib/aide/aide.db.new.gz /mnt/

入侵检查

执行入侵检查

将之前备份的校验数据库文件还原

#####将之前备份的校验数据库文件拷贝会 /var/lib/aide##配置文件中已经定义了新生成的数据库文件会和aide.db.gz进行比对,所以需要改名[root@node1 ~]$ cp /mnt/aide.db.new.gz /var/lib/aide/aide.db.gz

根据数据库执行入侵检测

#####没做任何改变前,进行比对,结果正常[root@node1 ~]$ aide --checkAIDE, version 0.15.1### All files match AIDE database. Looks okay!######对/tmp目录下的文件进行多次修改,重新使用aide进行校验比对[root@node1 ~]$ echo aide >> /tmp/test.txt[root@node1 ~]$ rm -rf /tmp/userb.pub[root@node1 ~]$ echo "xxx" > /tmp/x.txt[root@node1 ~]$ echo "ccc" > /tmp/c.txt#####没做任何改变前,进行比对,会列出详细的文件修改信息[root@node1 ~]$ aide --checkAIDE 0.15.1 found differences between database and filesystem!!Start timestamp: 2020-08-20 13:06:18Summary:Total number of files: 17Added files: 2Removed files: 1Changed files: 1---------------------------------------------------Added files:---------------------------------------------------added: /tmp/c.txtadded: /tmp/x.txt---------------------------------------------------Removed files:---------------------------------------------------removed: /tmp/userb.pub---------------------------------------------------Changed files:---------------------------------------------------changed: /tmp/test.txt---------------------------------------------------Detailed information about changes:---------------------------------------------------File: /tmp/test.txtSize : 0 , 5SHA256 : 47DEQpj8HBSa /TImW 5JCeuQeRkm5NM , OP7pCdRCH5j0ENIbJ9BV1SZScyCe FEY

六,端口扫描

为什么需要扫描?

以获取一些公开/非公开信息为目的,检测潜在的风险,查找可攻击目标,收集设备/主机/系统/软件信息,发现可利用的安全漏洞

扫描方式及工具

典型的扫描方式

Scan,主动探测(主动扫描百度或天猫的服务器)

Sniff,被动监听/嗅探 (A机器给B机器发送数据包时,B可以进行监听数据包)

Capture,数据包捕获(抓包)

数据包捕获 通过地址伪装,欺骗,把数据诱导到我们的主机上,对数据抓包;在交换机和路由器上也可以抓包;

常见的安全分析工具

扫描器:NMAP ——> 主动去扫描其他的主机

协议分析:tcpdump、WireShark ——> 网络上抓包,截取数据

NMAP扫描

NMAP一款强大的网络探测利器工具,支持多种探测技术

ping 扫描

多端口扫描

TCP/IP指纹检验

基本用法 :nmap [扫描类型] [选项] <扫描目标 ...>

常用的扫描类型

-sS,TCP SYN扫描(半开)

-sT,TCP 连接扫描(全开)

-sU,UDP扫描

-sP,ICMP扫描

-A,目标系统全面分析

TCP SYN扫描(全开):
#左边图:要检查目标主机的80端口是否打开,扫描时,A主机向目标主机的80端口发送请求建立连接的
请求syn,目标主机回应syn和ack,A主机也回应一个ack,连接建立,目标主机的80端口是打开的;

TCP SYN扫描(半开):
#右边图:要检查目标主机的80端口是否打开,扫描时,A主机向目标主机的80端口发送请求建立连接的
请求syn,目标主机回应syn和ack, 目标主机回应了,代表目标主机的80端口是打开的,A主机不再回应
ack,节省一个ack回应的资源;
#因为并不需要建立连接,只要目标主机回应即可,当扫描更多主机时会节省更多的系统资源;

NMAP应用示例

检查哪些主机开启FTP、SSH服务端
嗯,这个代码不对应该,这里扫描的的是53端口

#####扫描查看UDP协议的端口状态##-n 取消客户端的反向域名解析; -p 指定扫描的端口号[root@node1 ~]$ nmap -n -sU 192.168.2.200 -p 53Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:05 CSTNmap scan report for 192.168.2.200Host is up (0.0012s latency). #up状态,网络延迟为0.0012sPORT STATE SERVICE53/udp closed domain ##53端口,处于关闭状态MAC Address: 00:0C:29:3D:40:D8 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

扫描查看UDP协议53-55的端口状态

#####扫描查看UDP协议53-55的端口状态##-n 取消客户端的反向域名解析; -p 指定扫描的端口号[root@node1 ~]$ nmap -n -sU 192.168.2.200 -p 53-55Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:07 CSTNmap scan report for 192.168.2.200Host is up (0.00053s latency). #up状态,网络延迟为0.00053sPORT STATE SERVICE53/udp closed domain #53端口,关闭54/udp closed xns-ch #53端口,关闭55/udp closed isi-gl #53端口,关闭MAC Address: 00:0C:29:3D:40:D8 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

扫描查看TCP协议53-55和25的端口状态

#####扫描查看TCP协议53-55和25的端口状态###对于不连续的端口号用逗号【,】分隔##-n 取消客户端的反向域名解析; -p 指定要扫描的端口号[root@node1 ~]$ nmap -n 192.168.2.200 -p 53-55,25Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:10 CSTNmap scan report for 192.168.2.200Host is up (0.00050s latency). #up状态,网络延迟为0.00050sPORT STATE SERVICE25/udp closed smtp #25端口,关闭53/udp closed domain #53端口,关闭54/udp closed xns-ch #54端口,关闭55/udp closed isi-gl #55端口,关闭MAC Address: 00:0C:29:3D:40:D8 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

扫描http端口

#######client上安装httpd服务,开启80端口[root@node2 ~]$ yum -y install httpd[root@node2 ~]$ systemctl start httpd######在node1扫描查看node2上的80端口的状态[root@node1 ~]$ nmap -n 192.168.2.200 -p 80Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:22 CSTNmap scan report for 192.168.2.200Host is up (0.00034s latency).PORT STATE SERVICE80/tcp open http #打开,服务httpMAC Address: 00:0C:29:3D:40:D8 (VMware)Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds#########扫描查看网络中所有2.0网段上的80端口的状态[root@node1 ~]$ nmap -n 192.168.2.0/24 -p 80Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:24 CSTNmap scan report for 192.168.2.200 #2.200主机Host is up (0.00030s latency).PORT STATE SERVICE80/tcp open http #打开,服务httpMAC Address: 00:0C:29:3D:40:D8 (VMware)Nmap scan report for 192.168.2.254 #2.254主机Host is up (0.00030s latency).PORT STATE SERVICE80/tcp closed http #打开,服务httpMAC Address: 00:50:56:C0:00:02 (VMware)Nmap scan report for 192.168.2.100 #2.100主机Host is up (0.000032s latency).PORT STATE SERVICE80/tcp closed http #打开,服务httpNmap done: 256 IP addresses (3 hosts up) scanned in 4.74 seconds

检查目标主机的存活状态(是否可ping通)

#####使用ping扫描整个2.0网段的主机,查看是否开机[root@node1 ~]$ nmap -n -sP 192.168.2.0/24Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:28 CSTNmap scan report for 192.168.2.200Host is up (0.00011s latency). #2.200开机MAC Address: 00:0C:29:3D:40:D8 (VMware)Nmap scan report for 192.168.2.254Host is up (0.00027s latency). #2.254开机MAC Address: 00:50:56:C0:00:02 (VMware)Nmap scan report for 192.168.2.100 #2.100开机Host is up.Nmap done: 256 IP addresses (3 hosts up) scanned in 5.69 seconds

复合扫描:检查操作系统指纹、软件版本等信息

#######全面扫描整个目标主机[root@node1 ~]$ nmap -n -A 192.168.2.200Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-20 15:31 CSTNmap scan report for 192.168.2.200Host is up (0.00079s latency).Not shown: 998 closed ports###目标主机开启了22端口,使用的是ssh服务,使用软件为OpenSSH 7.422/tcp open ssh OpenSSH 7.4 (protocol 2.0)| ssh-hostkey: 2048 37:68:ae:d7:23:48:16:74:ed:c9:d8:de:44:8a:b5:50 (RSA)|_256 c7:14:c1:8f:1a:1b:64:e8:c1:06:56:74:ec:9a:50:29 (ECDSA)###目标主机开启了80端口,使用的是http服务,使用软件为 Apache httpd 2.4.6##目标主机的操作系统为CentOS80/tcp open http Apache httpd 2.4.6 ((CentOS))| http-methods: Potentially risky methods: TRACE|_See http://nmap.org/nsedoc/scripts/http-methods.html|_http-title: Apache HTTP Server Test Page powered by CentOSMAC Address: 00:0C:29:3D:40:D8 (VMware)No exact OS matches for host (If you know what OS is running on it, seehttp://nmap.org/submit/ ).TCP/IP fingerprint:OS:SCAN(V=6.40%E=4%D=8/20%OT=22%CT=1%CU=43694%PV=Y%DS=1?=D%G=Y%M=000C29%T###########目标主机使用的是红帽的linux系统OS:M=5F3E26E1%P=x86_64-redhat-linux-gnu)SEQ(SP=102%GCD=1%ISR=10E%TI=Z%CI=I%OS:TS=A)SEQ(SP=102%GCD=1%ISR=10D%TI=Z%TS=A)SEQ(SP=102%GCD=1%ISR=10D%TI=Z%IIOS:=I%TS=A)OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7OS:%O5=M5B4ST11NW7%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%OS:W6=7120)ECN(R=Y?=Y%T=40%W=7210%O=M5B4NNSNW7?=Y%Q=)T1(R=Y?=Y%T=40%SOS:=O%A=S %F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y?=Y%T=40%W=0%S=A%A=Z%F=R%O=%ROS:D=0%Q=)T5(R=Y?=Y%T=40%W=0%S=Z%A=S %F=AR%O=%RD=0%Q=)T6(R=Y?=Y%T=40%W=OS:0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y?=Y%T=40%W=0%S=Z%A=S %F=AR%O=%RD=0%Q=)UOS:1(R=Y?=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y?OS:I=N%T=40?=S)####连接到目标主机所经过的路由器跳转的数量##同一网段下,直连,为1Network Distance: 1 hopTRACEROUTEHOP RTT ADDRESS1 0.79 ms 192.168.2.200 ##网络延迟为0.79msOS and Service detection performed. Please report any incorrect results athttp://nmap.org/submit/ .######整个检测一共花费了19.51秒Nmap done: 1 IP address (1 host up) scanned in 19.51 seconds

嗯,这是我扫描自己的win10的结果

┌──(liruilong?Liruilong)-[/mnt/c/Users/lenovo]└─$ nmap -n -A 172.30.0.1Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-27 20:41 CSTStats: 0:00:50 elapsed; 0 hosts completed (1 up), 1 undergoing Service ScanService scan Timing: About 80.00% done; ETC: 20:42 (0:00:12 remaining)Nmap scan report for 172.30.0.1Host is up (0.87s latency).Not shown: 990 closed portsPORT STATE SERVICE VERSION135/tcp open msrpc Microsoft Windows RPC139/tcp open netbios-ssn Microsoft Windows netbios-ssn443/tcp open ssl/https VMware Workstation SOAP API 16.1.2| fingerprint-strings:| FourOhFourRequest:| HTTP/1.1 404 Not Found| Date: Mon, 27 Sep 2021 12:41:49 GMT| Connection: close| Content-Security-Policy: block-all-mixed-content| Content-Type: text/plain; charset=utf-8| Strict-Transport-Security: max-age=31536000| X-Content-Type-Options: nosniff| X-Frame-Options: DENY| X-XSS-Protection: 1| Content-Length: 0| GetRequest:| HTTP/1.1 403 Forbidden| Date: Mon, 27 Sep 2021 12:41:49 GMT| Connection: close| Content-Security-Policy: block-all-mixed-content| Content-Type: text/plain; charset=utf-8| Strict-Transport-Security: max-age=31536000| X-Content-Type-Options: nosniff| X-Frame-Options: DENY| X-XSS-Protection: 1| Content-Length: 0| HTTPOptions:| HTTP/1.1 501 Not Implemented| Date: Mon, 27 Sep 2021 12:41:49 GMT| Connection: close| Content-Security-Policy: block-all-mixed-content| Content-Type: text/plain; charset=utf-8| Strict-Transport-Security: max-age=31536000| X-Content-Type-Options: nosniff| X-Frame-Options: DENY| X-XSS-Protection: 1| Content-Length: 0| RTSPRequest:| HTTP/1.1 400 Bad Request| Date: Mon, 27 Sep 2021 12:41:59 GMT| Connection: close| Content-Type: text/html| Content-Length: 50| <HTML><BODY><H1>400 Bad Request</H1></BODY></HTML>| SIPOptions:| HTTP/1.1 400 Bad Request| Date: Mon, 27 Sep 2021 12:43:06 GMT| Connection: close| Content-Type: text/html| Content-Length: 50|_ <HTML><BODY><H1>400 Bad Request</H1></BODY></HTML>|_http-title: Site doesn't have a title (text/plain; charset=utf-8).| ssl-cert: Subject: commonName=VMware/countryName=US| Not valid before: 2021-02-17T10:21:06|_Not valid after: 2022-02-17T10:21:06|_ssl-date: TLS randomness does not represent time| vmware-version:| Server version: VMware Workstation 16.1.2| Build: 17966106| Locale version: INTL| OS type: win32-x86|_ Product Line ID: ws445/tcp open microsoft-ds?903/tcp open ssl/vmware-auth VMware Authentication Daemon 1.10 (Uses VNC, SOAP)1027/tcp open msrpc Microsoft Windows RPC1057/tcp open msrpc Microsoft Windows RPC3306/tcp open mysql MySQL (unauthorized)3389/tcp open ms-wbt-server Microsoft Terminal Services| rdp-ntlm-info:| Target_Name: LIRUILONG| NetBIOS_Domain_Name: LIRUILONG| NetBIOS_Computer_Name: LIRUILONG| DNS_Domain_Name: Liruilong| DNS_Computer_Name: Liruilong| Product_Version: 10.0.19041|_ System_Time: 2021-09-27T12:43:57 00:00| ssl-cert: Subject: commonName=Liruilong| Not valid before: 2021-09-07T13:31:59|_Not valid after: 2022-03-09T13:31:59|_ssl-date: 2021-09-27T12:44:02 00:00; 0s from scanner time.4000/tcp open remoteanything?| fingerprint-strings:| GetRequest:| HTTP/1.1 200 OK| X-Powered-By: Hexo| Content-Type: text/html| Date: Mon, 27 Sep 2021 12:41:42 GMT| Connection: close| <!doctype html>| <html lang="zh"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><meta><title>| </title><link rel="manifest" href="/manifest.json"><meta name="application-name" content="| "><meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/removeif/removeif-demo@latest/img/favicon.png"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="| "><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta property="og:type" content="blog"><meta property="og:title" content="| "><meta property="og:url" content="https://removeif.github.io/"><meta property="og:site_name" cont| HTTPOptions:| HTTP/1.1 404 Not Found| X-Powered-By: Hexo| Content-Security-Policy: default-src 'none'| X-Content-Type-Options: nosniff| Content-Type: text/html; charset=utf-8| Content-Length: 143| Date: Mon, 27 Sep 2021 12:41:47 GMT| Connection: close| <!DOCTYPE html>| <html lang="en">| <head>| <meta charset="utf-8">| <title>Error</title>| </head>| <body>| <pre>Cannot OPTIONS /</pre>| </body>| </html>| NoMachine, RPCCheck, RTSPRequest:| HTTP/1.1 400 Bad Request|_ Connection: close1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :SF-Port4000-TCP:V=7.91%I=7%D=9/27%Time=6151BC06%P=x86_64-pc-linux-gnu%r(GeSF:tRequest,3890,"HTTP/1.1x20200x20OKrnX-Powered-By:x20HexornConteSF:nt-Type:x20text/htmlrnDate:x20Mon,x2027x20Sepx202021x2012:41:42SF:x20GMTrnConnection:x20closernrn<!doctypex20html>n<htmlx20lanSF:g="zh"><head><metax20charset="utf-8"><metax20name="viewport"x2SF:0content="width=device-width,x20initial-scale=1,x20maximum-scale=1"SF:><meta><title>xe5xb1xb1xe6xb2xb3xe5xb7xb2xe6x97xa0xe6x81SF:x99</title><linkx20rel="manifest"x20href="/manifest.json"><metaSF:x20name="application-name"x20content="xe5xb1xb1xe6xb2xb3xe5SF:xb7xb2xe6x97xa0xe6x81x99"><metax20name="msapplication-TileImaSF:ge"x20content="https://cdn.jsdelivr.net/gh/removeif/removeif-demo@SF:latest/img/favicon.png"><metax20name="apple-mobile-web-app-capableSF:"x20content="yes"><metax20name="apple-mobile-web-app-title"x20coSF:ntent="xe5xb1xb1xe6xb2xb3xe5xb7xb2xe6x97xa0xe6x81x99">SF:<metax20name="apple-mobile-web-app-status-bar-style"x20content="deSF:fault"><metax20property="og:type"x20content="blog"><metax20propSF:erty="og:title"x20content="xe5xb1xb1xe6xb2xb3xe5xb7xb2xe6SF:x97xa0xe6x81x99"><metax20property="og:url"x20content="https:SF://removeif.github.io/"><metax20property="og:site_name"x20cont")%SF:r(NoMachine,2F,"HTTP/1.1x20400x20Badx20RequestrnConnection:x20clSF:osernrn")%r(HTTPOptions,180,"HTTP/1.1x20404x20Notx20FoundrnX-SF:Powered-By:x20HexornContent-Security-Policy:x20default-srcx20'noneSF:'rnX-Content-Type-Options:x20nosniffrnContent-Type:x20text/html;SF:x20charset=utf-8rnContent-Length:x20143rnDate:x20Mon,x2027x20SeSF:px202021x2012:41:47x20GMTrnConnection:x20closernrn<!DOCTYPExSF:20html>n<htmlx20lang="en">n<head>n<metax20charset="utf-8">n<tSF:itle>Error</title>n</head>n<body>n<pre>Cannotx20OPTIONSx20/</pre>SF:n</body>n</html>n")%r(RTSPRequest,2F,"HTTP/1.1x20400x20Badx20RequSF:estrnConnection:x20closernrn")%r(RPCCheck,2F,"HTTP/1.1x20400xSF:20Badx20RequestrnConnection:x20closernrn");Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:vmware:Workstation:16.1.2Host script results:|_nbstat: NetBIOS name: LIRUILONG, NetBIOS user: <unknown>, NetBIOS MAC: 00:15:5d:1d:9f:bd (Microsoft)| smb2-security-mode:| 2.02:|_ Message signing enabled but not required| smb2-time:| date: 2021-09-27T12:43:57|_ start_date: N/AService detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 148.10 seconds┌──(liruilong?Liruilong)-[/mnt/c/Users/lenovo]└─$

史上最全!Flyme 系统更新,你知道多少?

随着科技的不断进步,数码产品(尤其是手机)更新换代的周期越来越短,从最开始的18个月定律到后来的12个月、6个月甚至一个季度,产品更新周期的缩短不但让我们越来越快地用上了各种黑科技,也让我们更快地享受到了科技进步的红利。除了产品本身的更新,手机操作系统的更新也越来越频繁。众所周知,手机系统更新应该是智能手机的一大特色了,通过简单的系统更新,就可以获得功能更新以及更好的用户体验,不得不说系统更新已经成为我们使用智能手机产品的一部分了。

相对于功能机时代,手机从出厂到淘汰,固件版本都是一尘不变,功能也是固定且单一,现在智能手机固件更新的频次和质量已经成为大家衡量一个手机OS用户体验的一个重要标准了,那么到底手机固件更新会给我们带来哪些好处呢?

1、修复BUG,提高系统的稳定性

既然是智能操作系统,即使在发布之前会经过内测、公测等不同环节的测试,系统本身必定会存在一些漏洞、BUG之类的,这些在大家使用过程中发现的BUG,工程师就需要去修补,让软件更稳定的运行,于是就不定期推出新的稳定的系统更新;

2、可以优化系统,提升系统运行流

大部分智能手机在使用一定时间后,难免都会出现一些卡顿、闪退的现象,大多是因为手机系统跟不上一些新手机app导致的,所以需要过对系统进行优化,从而提升手机系统的运行流畅度;

3、增加系统新功能

现在的智能手机早就硬件过剩,为了给用户更多实用功能和体验,工程师往往会通过手机系统版本更新来增加更多有特色功能,增加手机体验效果。

既然系统更新有这么多好处,那Flyme 系统到底应该怎样更新呢?到底是刷整包好,还是通过OTA更新好?刷机到底要不要清除数据呢?双清到底是什么操作呢?手机根目录又是什么?为了更好地让大家了解这些知识,K叔就带领大家一起了解下Flyme 系统更新那些事儿:

1、版本分类:

Flyme 固件版本根据适用范围可以分为内测版、体验版和稳定版三个版本,其区别在于:

(1) 内测版:尾部标识为 daily,需要通过申请、审批才可获得内测资格。内测版本仅对内测用户开放,迭代速度快,提供了各种新的雏形功能。但由于该版本未经过全面的测试和验证,因此可能存在意想不到的bug,需要内测用户协助发现和查找;

(2) 体验版:尾部标识为 beta,一般也需要用户主动申请才能获得体验版推送(部分情况下官网会上架)。体验版从内测版得到延伸,结合内测反馈进行调校和优化,不仅具备成型的新功能,而且经过较长的时间测试和验证,能够兼顾稳定性和操作体验;

(3) 稳定版:尾部标识为 A、M、Q、C(根据机型版本区分)等,适用于全体用户,在体验版的基础上做最后的打磨。长周期的沉淀使得功能更加完善、体验更加良好。同时,稳定版注重性能表现,在稳定性、流畅性和功耗上都得到极大的提升,适合追求版本质量的用户使用。

2、更新频次:

(1) 稳定版:不定期更新;

(2) 体验版beat:每两周更新一次(一般为隔周二);

(3) 内测版daily:每周一、四更新;

注:

(1) 体验版、内测版遇到节假日暂停更新,特殊情况可能偶尔会延迟(临时发现有影响使用的问题等);

(2) 运营商定制版机型固件更新由于其特殊性需要运营商审批,因此需要以运营商审批更新结果为准;

(3) 内测版、体验版一般会通过招募主动报名的方式进行,一般会在社区公告。

3、更新方式:

(1) OTA更新:通过网络(WIFI、移动蜂窝网络)自动下载OTA升级包、自动升级,并且最重要的是,OTA升级无需备份数据,短短几分钟就搞定所有升级工作,所有数据都会完好无损的保留下来。Flyme自带的系统更新App就是以这种方式进行的系统更新,我们可以通过系统更新App进行新版本检查;

注:通过OTA更新,我们可以选择立即更新或者预约夜间更新,更新成功后会有更新成功的提示。

(2) 本地更新:在Flyme固件下载专区选择机型和版本,下载后拷贝到手机存储根目录(即不放于任何文件夹),然后通过手机文件管理—压缩包找到下载的固件包点击即可刷入;

(3) RE更新:在RE模式下我们可以对已有的系统进行备份或升级,也可以在此恢复出厂设置。这种方式必须采用第二种方式,将固件包放到手机根目录,否则将会找不到固件包!

注:进入RE模式:长按电源键 音量上键直到手机震动后松开即可。因其特殊性,推荐在无法正常进入系统界面时采用该方式升级,在RE模式下可以通过USB传输数据,可以备份重要文件或者传输固件包到手机。

4、更新获取方式:一般来说,系统更新推送信息将会通过系统更新App进行预告,社区也会有相关公告,当然大家也可以也可以关注Flyme 官方公众号:Flyme_OS第一时间获取相关资讯;

路径:设置——系统更新或者系统更新App

5、名词解释

(1) 根目录:即手机存储首层目录,不放于任何文件夹下;

(2) 固件版本:Flyme 系统版本号;

(3) OTA:Over the Air Technology,即空间下载技术的意思。 OTA升级是Android系统提供的标准软件升级方式。它功能强大,可以无损失升级系统;

(4) RE模式:Recovery是Android手机备份功能,指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS);

(5) 双清:清除数据和格式化存储合称为双清。清除数据是指清除应用数据、联系人数据,类似于电脑重装系统格式化C盘,存储盘中的文档、照片等仍然保留。格式化存储类似于电脑全盘格式化,所有数据清空。

6、Q&A:

(1) 恢复出厂设置是否会影响内测推送?

答:原则上内测版固件长时间不更新或者主动刷入其他版本固件将会自动停止推送,恢复出厂设置不影响系统内测推送。

(2) 手动下载固件刷入需要注意什么?

答:手动下载固件需要保持网络环境稳定,尽量使用系统浏览器,避免使用P2P等下载工具和续传,下载完成后可以使用工具Hash比对一下下载的固件包和官网公布的固件包MD5值是否一致,值不一致时表示固件包不完整或者有损坏,将无法正常更新(提示校验失败或者黑屏重启)。

(3) 不同版本的固件是否可以通刷?

答:不同版本的固件不能通刷,下载前请根据版本选择固件版本(公开版、移动版、电信版等)。

(4) 已获取root权限还可以通过OTA更新固件版本吗?

答:已获取root机型不能通过OTA获得系统更新更送,必须手动下载固件并刷入。

(5) 只要是自己下载的固件包更新都需要清除数据吗?

答:原则上,只有已获取root权限或者跨版本刷入、固件降级时需要清除数据(强制选择。否则无法更新)。一般来说,相同版本的固件(如稳定版低版本更新到稳定版新版本),即使是手动下载的固件,也不必清除数据。

(6) 恢复出厂设置会降低固件版本吗?

答:恢复出厂设置仅仅是将手机中的联系人数据、应用数据等清空,并不能改变固件版本号。

(7) 清除数据是双清吗?是否每次刷机都需要双清?

答:一般来说,为了确保系统正常运行,跨版本(稳定—体验—内测互刷)、降级等必须清除数据,刷入固件后可以通过选择格式化存储来清空存储空间中的,这是需要两步操作的,在RE模式下可以同步操作。原则上,如非必要情况,可以只是清除数据即可,如果想纯净升降级,可以选择双清刷入。

(8) OTA更新需要注意什么?

答:OTA更新需要注意网络环境稳定,下载的固件包完整,同时手机电量必须不低于20%。

(9) 升级系统会导致耗电量增加吗?

答:一般情况下,手机系统在更新后,必然会增加一些新功能,这些功能运行必定是需要消耗电量的,这也就是大家为什么会觉得老版本固件省电的原因,实际上,这种对比也只是相对的。

(10) 会增加手机运行内存和核心负担吗?

答:原则上来讲,系统更新后进一步修复和优化,增加系统流畅度。但系统升级后基本都会增加新功能,部分情况下,老旧机型因为配置等比较老旧,就会出现硬件配置不能于最新的系统很好的匹配,这时候就不能全力地运行新系统,从而出现增加运行内存、核心负担,出现卡顿(类似于魅蓝E2无法提供Flyme 7)。

7、写在最后

系统更新App除了可以更新系统固件版本外,还可以对系统应用进行快速升级(卸载后可以在此快速安装),也可以查询当前版本固件更新说明,预约新固件自动下载和更新等,非常方便。

Flyme的固件更新,不但为我们带来了更多实用功能,如游戏模式3.0、小窗模式、视频防抖等,还不断对系统补丁和BUG进行优化和维护,K叔推荐大家及时更新。就更新方式而言,无论哪一种方式更新固件都是安全的,几种方式都只是操作方法不同,效果基本上没有任何差异,大家选择任意一种更新方法都可以。不过为了操作方便,如非必要情况,一般来说推荐OTA更新,快捷方便,一键操作。

最后,K叔提醒大家一句,虽然现在的系统更新安全性很高,但是数据无价,为了数据的绝对安全,请大家更新系统固件前做好数据备份工作,以防万一。K叔推荐大家使用Flyme 账户云服务备份,可随时同步,一键操作。

【按键精灵教程】就是这个技术,防止信息侧漏

金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本和学习按键精灵的朋友可以添加按键精灵学习交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长.

1。选择加密还是解密 0是加密1是解密 可以做成自定义界面啊

2。加密文字

3。加密结果

83480860158602378307834808730179893847719864587543826787940778626860237960986521

4。解密文字

5。解密结果

相关代码

代码原作者:乱闯

    ''UserVar Var1=DropList{"加密":0|"解密":1} "加密还是解密"

    var1=InputBox("请输入加密解密 0:加密 1解密","加密")

    If var1=0 then

    text0=InputBox("请输入要加密的信息","加密")

    Call 加密

    End if

    If var1=1 then

    text1=InputBox("请输入要解密的信息","解密")

    call 解密

    End if

    Sub 加密

    pts=""

    For i=1 to len(text0)

    sd=mid(text0,i,1)

    pt=asc(sd)

    pt=pt 98563

    pt=pt 50

    pts=pts & pt

    Next

    Call Plugin.Sys.SetCLB(pts)

    MsgBox "加密内容已经复制到剪切板"

    End sub

    Sub 解密

    pts=""

    For i=1 to len(text1) step 5

    sd=mid(text1,i,5)

    sd=sd-50

    sd=sd-98563

    pts=pts & chr(sd)

    Next

    Call Plugin.Sys.SetCLB(pts)

    MsgBox pts& chr(13) & "解密内容已经复制到剪切板"

    End sub

复制代码

当时小编看了这个帖子就觉得这就是个相对简单的字符串加密啊,难道咱们按键就没有能直接实现类似功能的命令嘛

接着小编就去搜索下了,发现咱们按键2.9号的时候增加了新命令插件,里面就有字符串加密的命令,下面就跟大家简单介绍下Encrypt 加解密插件里的部分加解密命令

[2015.2.9]官方新增插件命令

[tr=rgb(154, 205, 50)]StringEncode字符串加密

命令名称StringEncode 字符串加密

命令功能对字符串内容进行加密

命令参数参数1,字符串型:字符串内容

参数2,字符串型:密钥(最多16个字)返 回 值字符串:

返回识别到的字符串

命令名称StringDecode 字符串解密

命令功能对字符串内容进行解密

命令参数参数1,字符串型:字符串内容

参数2,字符串型:密钥(最多16个字)

返 回 值字符串:

返回字符串明文

知道上面的字符串加解密命令后我们就可以把前面的代码精简成

    var1=InputBox("请输入加密解密 0:加密 1解密","加密")

    If var1=0 then

    text0 = InputBox("请输入要加密的信息", "加密")

    Call 加密

    elseif var1=1 then

    text1=InputBox("请输入要解密的信息","解密")

    call 解密

    End if

    Sub 解密

    iPlain = Plugin.Encrypt.StringDecode(text1,"1")

    Call Plugin.Sys.SetCLB(iPlain)

    msgbox iPlain& vblf&"友情提示,解密内容已经复制到剪切板"

    End sub

    Sub 加密()

    iCipher = Plugin.Encrypt.StringEncode(text0, "1")

    Call Plugin.Sys.SetCLB(iCipher)

    MsgBox iCipher &vblf& "友情提示,加密内容已经复制到剪切板"

    End Sub

复制代码

小拓展 按键精灵中加解密字符串的应用场景

1.用于加密文档(或qui界面框)里保存的需要自动登录的账号和密码等

比如这篇院刊 再也不用担心用户密码泄露啦(QUI)

2.像上面的小程序一样,用于制作私密消息发送器等

[tr=rgb(154, 205, 50)]MD5加密

经常上网下载东西的时候,有看到下载说明软件的MD5数值。也有网友说什么MD5不对什么的,那么Md5是什么呢?

小编接下来就跟大家一起来看看MD5到底是啥,如何依靠MD5避免网上提供的“七个身材健壮的男人欺负一个穿着暴露的女士”,

下载下来却是 “葫芦娃大战蛇精”悲剧呢?

加密一般有两种:双向密码和单向加密。双向加密码是最常用的,前面说的StringEncode 字符串加密,其实就是个双向加密

的例子,它是可逆的,既能加密又能解密;而单向加密只能对数据进行加密,而不能对其解密,MD5加密就是单向加密,

MD5加密是不可解出原文的(目前部分解密网站收集了数字 字母组合的答案),你只能将明文加密后得出密文再与之前保存

的密文进行比较,以此判断两次输入是否一致,所以现在MD5加密技术广泛应用于校验文件是否被改动过。

比如某些网上公开下载的软件,视频,尤其是镜像文件。如果被修改了可能会导致用不了或者其他的问题,发布者将镜像通

过MD5算法计算成一组数值。让下载的用户进行MD5数值对比,也就是MD5校验啦。由于MD5加密不可逆算,如果数值一样,

那就表示文件没有被修改的。反之,则被修改了,下面咱们来了解下按键自带的MD5加密命令

命令名称Md5String 字符串MD5加密

命令功能对字符串内容进行MD5加密

命令参数参数1,字符串型:字符串内容

返 回 值字符串:

返回MD5值

命令名称Md5File 文件MD5加密

命令功能对路径文件进行MD5加密

命令参数参数1 字符串型,文件路径

返 回 值字符串:

返回MD5值

下面是通过MD5加密绑定机器码的一个简单的小代码

    Dim 硬盘码

    硬盘码 = Plugin.GetSysInfo.GetHDDSerialNumber()

    UserVar Var1=0 "设置内容"

    TextMD5 = Plugin.Encrypt.Md5String(硬盘码 2)

    TracePrint TextMD5

    If TextMD5=Var1 Then

    Else

    Msgbox "验证失败!您非授权用户!"

    EndScript

    End If

复制代码

小拓展 按键精灵中MD5J加密的应用场景

1.用于绑定机器码,生成注册码之类的,限制脚本只能在注册过的机子上使用

2.用于校验文件或软件是被更改过,主要用来判断脚本是否被破解等

[tr=rgb(154, 205, 50)]

十大黑客工具之Metasploit

(一)Metasploit 使用简介

Metasploit Framework 是非常优秀的开源渗透测试框架。

Metasploit 渗透测试框架包含3功能模块:

msfconsole

msfweb

msfupdate

    msfupdate用于软件更新,建议使用前先进行更新,可以更新最新的漏洞库和利用代码。

    msfconsole 是整个框架中最受欢迎的模块,所有的功能都可以在该模块下运行。

    msfweb 是Metasploit framework的web组件支持多用户,是Metasploit图形化接口。

msfconsole

msfconsole是MSF中最主要最常用的功能组件,使用集成化的使用方法,可以使用MSF中的所有命令和模块,支持很多其它接口方式不支持的功能。

msfconsole主要有以下特点:

支持命令完成功能(tab键)

支持外部命令执行(可以执行系统命令)

使用流程

help命令

和其它基于命令行的程序一样,使用?或者help可以显示MSF所支持的命令,如下为MSF内置的全部命令。

show命令

在msfconsole中键入show,系统会显示Metasploit的所有模块,若想显示某一类型的模块可以加入模块名称,最常用的主要有一下三个:

show payloads

show exploits

show auxiliary。

show auxiliary显示Metasploit中的可用辅助模块列表,这些辅助模块包括scanner、dos、fuzzer等

show exploits 显示Metasploit中包含的所有可以利用的攻击类型列表。

show payloads 显示Metasploit中可以在不同平台中可以在远程主机执行的代码,即shellcode。注:在使用具体的exploit时,只显示该平台支持的payload,例如:在使用ms08-067时,只显示windows平台可以使用的payload。

show options 显示可利用模块exploit的设置、条件、描述等。在具体的模块中使用,后面use命令中会有实例。

show targets 显示可利用模块exploit支持的目标类型(操作系统、软件版本等)。在具体的模块中使用,后面use命令中会有实例。

show advanced 显示可利用模块exploit高级信息,自定义利用程序时使用。在具体的模块中使用,后面use命令中会有实例。

show encoders 显示可利用模块exploit的编码方式,在具体的模块中使用,后面set命令中会有实例。

search命令

search 命令是最常用的命令之一,用于查找各种exploit、payload、auxiliary等,命令支持基于正则表达式的模糊查询。如下为查找ms08-067实例:

info命令

info用于显示特殊模块的详细信息,显示内容包括该模块的选项、目标及其它信息。以下是使用info命令显示ms08-067实例:

use命令

use命令用于使用特殊的模块,如利用程序、shellcode或辅助模块等。以ms08-067为例,模块名称必须包含完整的路径,可以通过search命令搜索,以下还演示了show options、show targets命令的使用。

conect 命令

connect命令可以连接到远程主机,连接方式和nc、telnet相同,可以指定端口,如下为connect命令演示:

set命令

set命令用于当前使用模块的选项和设置参数。

set payload xxx/xxx z设置溢出代码

set encoder xxx/xxx 设置利用程序编码方式

set target xxx 设置目标类型

set xxx xxx 设置参数

check命令

部分exploit支持check命令,该命令用于检测目标系统是否存在漏洞,而不是进行溢出操作。如下:说明目标系统不存在漏洞

设置全局变量

Metasploit 支持设置全局变量并可以进行存储,下次登录时直接使用。设置全局变量使用setg命令,unsetg撤销全局变量,save用于保存全局变量。如下所示:

exploit/run命令

设置好各个参数后,可以使用exploit命令执行溢出操作,当使用了自定义auxiliary参数时,需要用run命令执行操作。

resource命令

resource命令可以加载资源文件,并按顺序执行文件中的命令。

irb命令

运行irb命令,进入irb脚本模式,可以执行命令创建脚本。

(二)安装

[root@k8s-master p3]# curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb[root@k8s-master p3]# ./msfinstall [root@k8s-master p3]# chmod 755 msfinstall [root@k8s-master p3]# msfconsole -vFramework Version: 5.0.25-dev-

(三)使用

启动

msfconsole

了解基本命令

?或者 help

show exploits用于展示Metaploit目录中所有可用的漏洞利用代码和攻击载荷。

info exploit/windows/wins/ms04_045_wins

use exploit/windows/wins/ms04_045_wins

set RHOST 192.168.1.250 设置目标set RPORT 36568 设置端口set PAYLOAD generic/shell_bind_tcp 设置使用的shellcodeexploit 执行攻击

(四)Metasploit攻击方法分类

使用的版本共有:

635种溢出(exploit)模块

314种辅助(auxiliary)模块

215种加载(payload)模块

27种编码(encoder)

8种nops。

exploits总的来说共分为两类溢出(exploit)攻击方法,即主动溢出和被动溢出

主动溢出是针对目标主机的漏洞主动的进行攻击以获得控制权限

被动溢出是针对目标主机被动的监听然后获得相应的操作。

在所有的exploit中,针对windows平台的最多,比其它所有平台的总和还要多。

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用程序中广泛存在。利用缓冲区溢出可民导致程序运行失败、系统死机、重新启动等后,也可以利用其获得非授权指令,甚至系统特权,进而进行各种非法的操作。

在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出。缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

随便往缓冲区中填东西造成它溢出一般只会出现"分段错误"(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。

缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。一般而言,攻击者攻击root程序,然后执行类似"exec(sh)"的执行代码来获得root权限的shell。为了达到这个目的,攻击者必须达到如下的两个目标:

1. 在程序的地址空间里安排适当的代码。

2. 通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。

每当一个函数调用发生时,调用者会在堆栈中留下一个活动纪录,它包含了函数结束时返回的地址。攻击者通过溢出堆栈中的自动变量,使返回地址指向攻击代码。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。这类的缓冲区溢出被称为堆栈溢出攻击(Stack Smashing Attack),是目前最常用的缓冲区溢出攻击方式。

函数指针可以用来定位任何地址空间。例如:"void (* foo)()"声明了一个返回值为void的函数指针变量foo。所以攻击者只需在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出这个缓冲区来改变函数指针。在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的意图实现了。它的一个攻击范例就是在linux系统下的superprobe程序。

在C语言中包含了一个简单的检验/恢复系统,称为setjmp/longjmp。意思是在检验点设定"setjmp(buffer)",用"longjmp(buffer)"来恢复检验点。然而,如果攻击者能够进入缓冲区的空间,那么"longjmp(buffer)"实际上是跳转到攻击者的代码。象函数指针一样,longjmp缓冲区能够指向任何地方,所以攻击者所要做的就是找到一个可供溢出的缓冲区。

在metasploit中溢出模块(Exploit)共分为13种,分别是:ais、bsdi、dialup、freebsd、hpux、irix、linux、multi、netware、osx、solaris、unix、windows。其中windows下面的最多。

辅助(Auxiliary)模块共分为13种,分别是admin、client、crawler、dos、fuzzers、gather、pdf、scanner、server、sniffer、spoof、sqli、voip。

加载(payload)模块共分为13种,分别是aix、bsd、bsdi、cmd、generic、java、linux、netware、osx、php、solaris、tty、windows。

(五)Metasploit架构

Metasploit Framework并不止具有exploit(溢出)收集功能,它使你专注于创建自己的溢出模块或者二次开发。很少的一部分用汇编和C语言实现,其余均由ruby实现。总体架构如图9所示:

TOOLS 集成了各种实用工具,多数为收集的其它软件

PLUGINS 各种插件,多数为收集的其它软件。直接调用其API,但只能在console模式下工作。

MODULES 目前的Metasploit Framework 的各个模块

MSF core 表示Metasploit Framework core 提供基本的API,并且定义了MSF的框架。并将各个子系统集成在一起。组织比较散乱,不建议更改。

MSF Base 提供了一些扩展的、易用的API以供调用,允许更改

Rex LIBRARIES Metasploit Framework中所包含的各种库,是类、方法和模块的集合

CLI 表示命令行界面

GUI 图形用户界面

Console 控制台用户界面

Web 网页界面,目前已不再支持

Exploits 定义实现了一些溢出模块,不含payload的话是一个Aux

Payload 由一些可动态运行在远程主机上的代码组成

Nops 用以产生缓冲区填充的非操作性指令

Aux 一些辅助模块,用以实现辅助攻击,如端口扫描工具

Encoders 重新进行编码,用以实现反检测功能等

/msf3/plugins主要包括一些数据库插件、会话插件、线程插件、socket插件等;

/ postgresql/lib/plugins主要是postgresql的调试插件和分析插件。还有一些其它的插件,比如ruby插件等。

/tools主要是一些辅助工具,如vncviewer、7za等。

/msf3/tools主要是一些转化工具,如memdump、ruby工具等。

MSF core定义了整个软件的架构方式,提供了一些基本的API,主要由汇编和C语言来实现,一般情况下不允许直接调用。共有136个汇编文件,7个.h文件,681个.C文件。MSF core组织的比较散乱,不建议更改。

汇编部分主要完成的是与相应的操作系统(如windows、linux等)有关的功能,主要是shellcode的实现等。

C语言完成的功能比较多,主要是meterpreter的实现和一些工具性的应用,包括ruby相关、内存相关(如memdump.c,属于memdump软件包,用于在DOS和Windows 9x 中dump或copy 4GB以内的地址空间)、网络相关(pcaprub.c,属于libpcap软件包的一部分,是ruby中网络的一部分)、反检测相关(timestomp.c,属于timestomp软件,用于修改文件的时间戳)等。其工具性的应用多是直接来自于其它工具软件。

Meterpreter是MSF core中最重要的一部分,其本身是一个具有多种功能的动态payload,并且可以在运行时动态扩展。它提供了交互式shell的基础。整个运行在内存当中,但它并不创建新的进程,并且使用了加密的通信方法,能有效避免检测。

MSF base分布在很多文件夹当中,定义了大量的实用API,例如svn API、scan API、encode API、更新API、操作API、数据库API、exploit API、GUI API、java API、meterpreter API、php API、snmp API、模块API、ruby API、网络API等……主要供modules下的相关程序进行调用,开发人员也可直接调用其API。

(六)Metasploit二次开发方法

Metasploit中的类和方法具有很好的可读性,并且采用了元编程的思想,使得进行二次开发更加方便快捷。简单的说一个程序能够产生另一个程序,就是元编程。ruby、python等均可方便的采用元编程思想。metasploit中前四个字母正好是meta,猜测其是Metaprogramming的含义。

Metasploit中所有的模块都从Msf::Module中继承,并且所有的模块有一个共享的API库。

在Metasploit中修改的exploit、payload等模块时,直接找到相应的文件修改并保存,重新启动console即可看到自己修改后的模块的效果。

在metasploit当中增加exploit、auxiliary等模块时,最快捷的方法是仿照现有的模块方式、使用metasploit中提供的协议(比如使用metasploit中的socket方法,而不使用ruby中的socket方法,meterpreter对socket进行的封装和扩展功能,使用起来更加方便,增加了代理、ssh等特征)。模块写好后放在相应的目录,重新启动console即可看到自己所增加的模块部分。

下面是一些攻击经常使用的模块的位置。

auxiliary模块位于/msf3/modules/auxiliary/下。Exploits模块位于/msf3/modules/exploits/下。Payloads模块位于/msf3/modules/payloads/下。Nops模块位于/msf3/modules/nops下。Encoders模块位于/msf3/modules/encoders/下。

另外在core部分也有一些exploit、aux等,其作用是为上述的攻击部分提供基础,被上述模块调用。在windows或是在linux中都使用上述方法进行二次开发。后面会详细的介绍新增一个exploit的方法和过程。

(七)安全软件常用检测方法

1 基于事务发生的时间戳,时间

2 发现可疑文件时,寻找其它具有类似MAC地址的文件,位置

3 根据文件扩展名和签名,文件特征

4 对于系统内文件创建MD5校验,内容

5 查找相应的关键字,关键字

6 对文件的内容进行行为分析,行为分析。安全软件预先知道大量的病毒指令序列,可对文件内容进行检测,如果发现匹配的序列就发出警告。

7 检查当前的进程、端口、文件系统等,状态检查

8 在文件写入磁盘时进行检测。

(八)Metasploit反检测方法

针对安全软件常用的检测方法,metasploit当中集成了一些反检测的方法。还有一些相应的建议。

1 在metasploit中使用了meterpreter方法提供一些实用的API。但是meterpreter整个运行在内存当中;但它并不创建新的进程;并且使用了加密的通信方法;并且能够有效的消除入侵证据。整个过程大约在1秒内完成。避免了一些安全软件对于进程的检测。

2 内置了27种encode模块,可对metasploit中的exploit进行编码(encode),以避免反病毒软件检测。27 种encode如下:

Name Rank Description---- ---- -----------cmd/generic_sh good Generic Shell Variable Substitution Command Encodercmd/ifs low Generic ${IFS} Substitution Command Encodercmd/printf_php_mq good printf(1) via PHP magic_quotes Utility Command Encodergeneric/none normal The "none" Encodermipsbe/longxor normal XOR Encodermipsle/longxor normal XOR Encoderphp/base64 great PHP Base64 encoderppc/longxor normal PPC LongXOR Encoderppc/longxor_tag normal PPC LongXOR Encodersparc/longxor_tag normal SPARC DWORD XOR Encoderx64/xor normal XOR Encoderx86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoderx86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoderx86/avoid_utf8_tolower manual Avoid UTF8/tolowerx86/call4_dword_xor normal Call 4 Dword XOR Encoderx86/context_cpuid manual CPUID-based Context Keyed Payload Encoderx86/context_stat manual stat(2)-based Context Keyed Payload Encoderx86/context_time manual time(2)-based Context Keyed Payload Encoderx86/countdown normal Single-byte XOR Countdown Encoderx86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoderx86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoderx86/nonalpha low Non-Alpha Encoderx86/nonupper low Non-Upper Encoderx86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoderx86/single_static_bit manual Single Static Bitx86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase Encoderx86/unicode_upper manual Alpha2 Alphanumeric Unicode Uppercase Encoder

很多反病毒软件是基于签名(signature-based)技术来进行病毒检测的,metasploit可以使用相应的payload将签名更改,从而达到反检测的目的。比如对一个软件采用多种编码方法以应对安全软件的检测,比如"ABC"这三个字母对于某个漏洞而言具有攻击性,编码时对每个字母采用不同的编码方式以逃避安全软件的检测。

3 内置日志删除模块,可以删除相应的事务日志,以避免检测。

4 metasploit framework中集成了timestomp(用于修改文件时间戳)、slacker(用于隐藏文件)、SAM Juicer(meterpreter的一部分,用于从SAM中转储哈希)、伪造MAC地址等工具用于消除入侵证据。

5 避免使用一些明显具有木马或病毒含义的名子或关键字,如"灰鸽子"等肯定会引起安全软件的注意。

6 所开发的模块尽量放在目标机多个存储位置,以避免所有的模块被安全软件一次清除

7 攻击安全软件,使安全软件失效,目前还未开发。

(九)一般攻击的过程

1 获得EIP。IP是指令寄存器,存放当前指令的下一条指令的地址,CPU该执行哪条指令就是通过IP来指示的。EIP为32位机的指令寄存器,存放的是相对地址,也就是基于段基址的偏移值。CPU的ESP寄存器存放当前线程的栈顶指针,EBP存放当前线程的栈底指针。

2插入shellcode。Shellcode实际上是一段代码或填充数据,用来发送到服务器利用特定的漏洞的代码,一般可以获取权限。另外,shellcode一般是作为数据发送给受攻击服务的。Shellcode是溢出程序或病毒的核心。主要针对没有打补丁的主机有作用。Shellcode一般用C语言或汇编语言编写,C语言编写较快,汇编语言便于控制shellcode的生成。一个shellcode只能为特定的平台所使用,不能供多个溢出程序、操作系统使用。

Shellcode即可以是本地的也可以是远程的。本地shellcode主要是一名攻击者为了获取本地计算机权限,例如一段缓冲区溢出程序成功执行后可以获得一定的权限。

远程shellcode主要是一名攻击者为了获得本地网络或互联网上另一台主机的控制权限,如果成功后攻击者可以通过网络获得目标主机的控制权限。如果它可以连接攻击者和被攻击者,称为反向连接shellcode。如果它通过绑定一个相应的端口来进行控制,称之为bindshell。第三种shellcode非常特殊,它在目标机上创建一个可以让攻击者重复利用的连接,而这个连接是建立在目标机现有的连接之上,并不创建新的连接。这种shellcode最难创建也最不容易被检测。

3反向连接shell

即将目标主机当做服务,攻击者机器作为客户端。

4 添加用户或其它

(十)恶意软件分类

1 特洛伊木马(Trojan horse)潜茂在其它有用的软件中实施恶意操作的指令。通常将编写程序时就已经安装的恶意指令称为特洛伊木马,在程序编写完后加入的恶意代码称为病毒。

2 病毒(virus) 在执行之后能将自身植入到其它程序中的指令。病毒安装在其它程序的方式:替换任意指令,比如在X处的指令替换成跳转到内存的其他某个地方Y,然后在Y处执行病毒代码,然后在病毒代码后加入口令,使病毒代码执行完后跳到X 1处。

    蠕虫(worm)能自我复制并通过网络将自己安装在其他计算机上的程序。

    陷门(trapdoor)故意在程序中加入未开放的入口,经常用于调试程序,也可以作为安全漏洞使用。

    逻辑炸弹(logic bomb)在未来根据特定条件启动的恶意指令,比如在特定的时间启动。

    僵尸(zombie) 在其他计算机上安装的恶意代码,可通过远程控制这种代码的方式实施攻击,由于攻击来自其它主机,这种方式更难追踪。攻击者经常安装大量的僵尸以制造大量的网络流量。

(十一)exploits详细解析之proftp_telnet_iac.rb

Metasploit中的exploit部分设计目标是提供一个开发exploit简单方法,提供了大量的库,并且使用了ruby中的Mix-in(糅和或混合插入)方法实现多重继承,以便于让二次开发人员能够快速的进行二次开发。

所有的exploit都具有类似的结构,每一个exploit开始都有一个initialize;其次定义了check方法,此方法并不是必须的;最后定义了exploit方法。

在initialize方法中,含有本exploit的描述信息(作者、漏洞溢出方法描述)、使用选项(设定主机IP、端口号等)和shellcode部分。

Check方法并不是必须的,主要是检查目标机的情况,比如目标机是否易受攻击,本溢出方法是否适合攻击目标机等。检查完后返回一些已经预定义好的值(后面的注释为自我理解,可能不够准确),如下:

CheckCode::Safe 目标机安全,攻击可能无效CheckCode::Detected 目标机提供了相应的服务CheckCode::Appears 目标机已经被感染CheckCode::Vulnerable 目标机易受攻击CheckCode::Unsupported 本exploit对目标机不可用

Exploit方法主要是连接到目标主机,执行shellcode等。

将其直接放在msf3modulesexploitswindowsimap目录下,再查找一次。

仍然是没有找到,重新console,然后再进行查找。

在上图中可以看到,已经查找到了新增加的exploit。下面看是否能使用,对其使用use,然后查看其选项。

然后设定目标IP(本例中设定了自己建立的虚拟机)并进行check,因为虚拟机中并没有安装相应的服务,所以check的时候失败。

(十二)使用场景

1、情报搜集

(1) 信息搜索

nslookup与dig域名查询

(2) 主机探测与端口扫描

Nmap进行主机探测

nmap -sn 192.168.1.0/24

(ICMP包探测,Ping扫描,适合内网,外网容易被防火墙过滤掉)

nmap -Pn -sn 192.168.1.0/24

(UDP包探测,适合Internet环境,功能类似于metasploit的udp_sweep模块)

nmap的端口扫描功能

nmap -sV -Pn 192.168.1.2

(3) 服务扫描与查点

SSH服务扫描

SSH服务口令猜测(此模块需要自己设置或者导入USERNAME或者PASS_FILE文件作为猜测的依据)

2、web漏洞扫描

流程:

第一步:db_connect连接数据库

第二步:db_status 查看数据库状态

第三步:load wmap 加载wmap模块

第四步:wmap_sites -a url 添加扫描站点

wmap_sites -l 查看已添加的站点

第五步:wmap_targets -t url或wmap_targets -d id 根据站点ID,设置目标站点

wmap_targets -l 检查已待扫描的目标主机

第六步:wmap_run -e 对目标启动 WMAP扫描

第七步:vulns 和 wmap_vulns -l 查看漏洞详细信息

3、生成恶意攻击脚本

流程:

第一步:search name 如search ms08_067,会显示出找到的渗透模块

第二步:use name 如use exploit/windows/smb/ms08_067_netapi,漏洞模块的使用

第三步:info 查看模块信息

第四步:show payloads会显示出有效的攻击载荷,比如shell_reverse_tcp

第五步:set payload 如set payload generic/shell_reverse_tcp设置攻击有效载荷

第六步:show targets会显示出可以被攻击的靶机的操作系统型号

第七步:set targets num 设置目标的系统类型

第八步:show options 显示需要在攻击前需要设置的数据

第九步:set name 设置参数,如set LHOST “本机IP”, set RHOST “目标IP”

第十步:exploit 开始攻击或生成带有攻击代码的文档等

第十一步:session –l –v列出所有可用的交互会话以及详细信息

到达率99.9%:闲鱼消息在高速上换引擎集大成

背景

在2020年年初的时候接手了闲鱼的消息,当时的消息存在一些反馈:“闲鱼消息丢失”、“消息用户头像乱了”、“订单状态不对”。闲鱼消息的稳定性是个亟待解决的问题,我们调研了集团的一些解决方案,例如钉钉的IMPass。直接迁移的成本和风险都是比较大,包括服务端数据需要双写、新老版本兼容等。

那基于闲鱼现有的消息架构和体系,如何来保证它的稳定性?治理应该从哪里开始?现在闲鱼的稳定性是什么样的?如何衡量稳定性?希望这篇文章,能让大家看到一个不一样的闲鱼消息。

行业方案

消息的投递链路大致分为三步:发送者发送,服务端接收然后落库,服务端通知接收端。特别是移动端的网络环境比较复杂,可能你发着消息,网络突然断掉了;可能消息正在发送中,网络突然好了,需要重发。

在如此复杂的网络环境下,是如何稳定可靠的进行消息投递的?对发送者来说,它不知道消息是否有送达,要想做到确定送达,就需要加一个响应机制,类似下面的响应逻辑:

    发送者发送了一条消息“Hello”,进入等待状态。

    接收者收到这条消息“Hello”,然后告诉发送者说我已经收到这条消息了的确认信息。

    发送者接收到确认信息后,这个流程就算完成了,否则会重试。

上面流程看似简单,关键是中间有个服务端转发过程,问题就在于谁来回这个确认信息,什么时候回这个确认信息。网上查到比较多的是如下一个必达模型,如下图所示:

[发送流程]

    A向IM-server发送一个消息请求包,即msg:R1

    IM-server在成功处理后,回复A一个消息响应包,即msg:A1

    如果此时B在线,则IM-server主动向B发送一个消息通知包,即msg:N1(当然,如果B不在线,则消息会存储离线)

[接收流程]

    B向IM-server发送一个ack请求包,即ack:R2

    IM-server在成功处理后,回复B一个ack响应包,即ack:A2

    则IM-server主动向A发送一个ack通知包,即ack:N2

一个可信的消息送达系统就是靠的6条报文来保证的,有这个投递模型来决定消息的必达,中间任何一个环节出错,都可以基于这个request-ack机制来判定是否出错并重试。看下在第4.2章中,也是参考了上面这个模型,客户端发送的逻辑是直接基于http的所以暂时不用做重试,主要是在服务端往客户端推送的时候,会加上重试的逻辑。

闲鱼消息的问题

刚接手闲鱼消息,没有稳定相关的数据,所以第一步还是要对闲鱼消息做一个系统的排查,首先对消息做了全链路埋点。

基于消息的整个链路,我们梳理出来了几个关键的指标:发送成功率、消息到达率、客户端落库率。整个数据的统计都是基于埋点来做的。在埋点的过程中,发现了一个很大的问题:闲鱼的消息没有一个全局唯一的ID,导致在全链路埋点的过程中,无法唯一确定这条消息的生命周期。

消息唯一性问题

之前闲鱼的消息是通过3个变量来唯一确定一个消息

?SessionID: 当前会话的ID

?SeqID:用户当前本地发送的消息序号,服务端是不关心此数据,完全是透传

?Version:这个比较重要,是消息在当前会话中的序号,以服务端为准,但是客户端也会生成一个假的version

以上图为例,当A和B同时发送消息的时候,都会在本地生成如上几个关键信息,当A发送的消息(黄色)首先到达服务端,因为前面没有其他version的消息,所以会将原数据返回给A,客户端A接收到消息的时候,再跟本地的消息做合并,只会保留一条消息。同时服务端也会将此消息发送给B,因为B本地也有一个version=1的消息,所以服务端过来的消息就会被过滤掉,这就出现消息丢失的问题。

当B发送消息到达服务端后,因为已经有version=1的消息,所以服务端会将B的消息version递增,此时消息的version=2。这条消息发送给A,和本地消息可以正常合并。但是当此消息返回给B的时候,和本地的消息合并,会出现2条一样的消息,出现消息重复,这也是为什么闲鱼之前总是出现消息丢失和消息重复最主要的原因。

消息推送逻辑问题

之前闲鱼的消息的推送逻辑也存在很大的问题,发送端使用http请求,发送消息内容,基本不会出问题,问题是出现在服务端给另外一端推送的时候。如下图所示,

服务端在给客户端推送的时候,会先判断此时客户端是否在线,如果在线才会推送,如果不在线就会推离线消息。这个做法就非常的简单粗暴。长连接的状态如果不稳定,导致客户端真实状态和服务端的存储状态不一致,就导致消息不会推送到端上。

客户端逻辑问题

除了以上跟服务端有关系外,还有一类问题是客户端本身设计的问题,可以归结为以下几种情况:

多线程问题 反馈消息列表页面会出现布局错乱,本地数据还没有完全初始化好,就开始渲染界面

未读数和小红点的计数不准确 本地的显示数据和数据库存储的不一致。

消息合并问题 本地在合并消息的时候,是分段合并的,不能保证消息的连续性和唯一性。

诸如以上的几种情况,我们首先是对客户端的代码做了梳理与重构,架构如下图所示:

我们的解法 - 引擎升级

进行治理的第一步就是,解决闲鱼消息的唯一性的问题。我们也调研了钉钉的方案,钉钉是服务端全局维护消息的唯一ID,考虑到闲鱼消息的历史包袱,我们这边采用UUID作为消息的唯一ID,这样就可以在消息链路埋点以及去重上得到很大的改善。

消息唯一性

在新版本的APP上面,客户端会生成一个uuid,对于老版本无法生成的情况,服务端也会补充上相关信息。

消息的ID类似a1a3ffa118834033ac7a8b8353b7c6d9,客户端在接收到消息后,会先根据MessageID来去重,然后基于Timestamp排序就可以了,虽然客户端的时间可能不一样,但是重复的概率还是比较小。

- (void)combileMessages:(NSArray<PMessage*>*)messages {
...

// 1. 根据消息MessageId进行去重
NSMutableDictionary *messageMaps = [self containerMessageMap];
for (PMessage *message in msgs) {
[messageMaps setObject:message forKey:message.messageId];
}

// 2. 消息合并后排序
NSMutableArray *tempMsgs = [NSMutableArray array];
[tempMsgs addObjectsFromArray:messageMaps.allValues];
[tempMsgs sortUsingComparator:^NSComparisonResult(PMessage * _Non obj1, PMessage * _Non obj2) {
// 根据消息的timestamp进行排序
return obj1.timestamp > obj2.timestamp;
}];

...
}

重发重连

基于#2中的重发重连模型,闲鱼完善了服务端的重发的逻辑,客户端完善了重连的逻辑。

    客户端会定时检测ACCS长连接是否联通

    服务端会检测设备是否在线,如果在线会推送消息,并会有超时等待

    客户端接收到消息之后,会返回一个Ack

已经有小伙伴发表了一篇文章:《向消息延迟说bybye:闲鱼消息及时到达方案》,讲解了下关于网络不稳定给闲鱼消息带来的问题,在这里就不多赘述了。

数据同步

重发重连是解决的基础网络层的问题,接下来就要看下业务层的问题,很多复杂情况是通过在业务层增加兼容代码来解决的,闲鱼消息的数据同步就是一个很典型的场景。在完善数据同步的逻辑之前,我们也调研过钉钉的一整套数据同步方案,他们主要是由服务端来保证的,背后有一个稳定的长连接保证,大致流程如下:

闲鱼的服务端暂时还没有这种能力,原因详见4.5的服务端存储模型。所以闲鱼这边只能从客户端来控制数据同步的逻辑,数据同步的方式包括:拉取会话、拉取消息、推送消息等。因为涉及到的场景比较复杂,之前有个场景就是推送会触发增量同步,如果推送过多的话,会同时触发多次网络请求,为了解决这个问题,我们也做了相关的推拉队列隔离。

客户端控制的策略就是如果在拉取的话,会先将push过来的消息加到缓存队列里面,等拉取的结果回来,会再跟本地缓存的逻辑做合并,这样就可以避免多次网络请求的问题。之前同事已经写了一篇关于推拉流控制的逻辑,《如何有效缩短闲鱼消息处理时长》,这里也不过多赘述了。

客户端模型

客户端在数据组织形式上,主要分2种:会话和消息,会话又分为虚拟节点、会话节点和文件夹节点。

在客户端会构建上图一样的树,这棵树主要保存的是会话显示的相关信息,比如未读数、红点以及最新消息摘要,子节点更新,会顺带更新到父节点,构建树的过程也是已读和未读数更新的过程。其中比较复杂的场景是闲鱼情报社,这个其实是一个文件夹节点,它包含了很多个子的会话,这就决定了他的消息排序、红点计数以及消息摘要的更新逻辑会更复杂,服务端告知客户端子会话的列表,然后客户端再去拼接这些数据模型。

服务端存储模型

在4.3中大概讲了客户端的请求逻辑,历史消息会分为增量和全量域同步。这个域其实是服务端的一层概念,本质上就是用户消息的一层缓存,消息过来之后会暂存在缓存中,加速消息读取。但是这个设计也存在一个缺陷,就是域环是有长度的,最多保存256条,当用户的消息数多于256条,只能从数据库中读取。

关于服务端的存储方式,我们也调研过钉钉的方案,是写扩散,优点就是可以很好地对每位用户的消息做定制化,比如钉的逻辑,缺点就是存储量很很大。闲鱼的这套解决方案,应该是介于读扩散和写扩散之间的一种解决方案。这个设计方式不仅使客户端逻辑复杂,服务端的数据读取速度也会比较慢,后续这块也可以做优化。

我们的解法 - 质量监控

在做客户端和服务端的全链路改造的同时,我们也对消息线上的行为做了监控和排查的逻辑。

全链路排查

全链路排查是基于用户的实时行为日志,客户端的埋点通过集团实时处理引擎Flink,将数据清洗到SLS里面,用户的行为包括了消息引擎对消息的处理、用户的点击/访问页面的行为、以及用户的网络请求。服务端侧会有一些长连接推送以及重试的日志,也会清洗到SLS,这样就组成了从服务端到客户端全链路的排查的方案,详情请参考《消息质量平台系列文章|全链路排查篇》。

对账系统

当然为了验证消息的准确性,我们还做了对账系统。

在用户离开会话的时候,我们会统计当前会话一定数量的消息,生成一个md5的校验码,上报到服务端。服务端拿到这个校验码之后再判定是否消息是正确的,经过抽样数据验证,消息的准确性基本都在99.99%。

核心数据指标

我们在统计消息的关键指标的时候,遇到点问题,之前我们是用用户埋点来统计的,发现会有3%~5%的数据差;所以后来我们采用抽样实时上报的数据来计算数据指标。

消息到达率=客户端实际收到的消息量/客户端应该收到的消息量

客户端实际收到的消息的定义为消息落库才算是 该指标不区分离线在线,取用户当日最后一次更新设备时间,理论上当天且在此时间之前下发的消息都应该收到。

最新版本的到达率已经基本达到99.9%,从舆情上来看,反馈丢消息的也确实少了很多。

未来规划

整体看来,经过一年的治理,闲鱼的消息在慢慢的变好,但还是存在一些待优化的方面:

?现在消息的安全性不足,容易被黑产利用,借助消息发送一些违规的内容。

?消息的扩展性较弱,增加一些卡片或者能力就要发版,缺少了动态化和扩展的能力。

?现在底层协议比较难扩展,后续还是要规范一下协议。

?从业务角度看,消息应该是一个横向支撑的工具性或者平台型的产品,规划可以快速对接二方和三方的快速对接。

在2021年,我们会持续关注消息相关的用户舆情,希望闲鱼消息能帮助闲鱼用户更好的完成二手交易。

[参考资料]

http://www.52im.net/thread-464-1-1.html

闲不住?来闲鱼!

PICK ME

闲鱼是阿里巴巴旗下品牌,是中国最大的闲置交易平台,于2014年成立至今,是继淘宝、天猫之后,阿里巴巴正在催生的第三个万亿级平台。

闲鱼技术部不断在驱动业务变革,通过创新追寻更多价值。从出版书籍、峰会发声,到开源专利、海外传播。闲不住,上闲鱼——技术团队对极致的探索与深耕是我们的底气。

立即加入

1、招项目经理PMO/客户端/服务端/前端/数据 算法/质量工程师

2、发简历给guicai.gxy@alibaba-inc.com

3、您还可以在头条、知乎、掘金、facebook、twitter找到我们