Yikjiang2025-04-03文章来源:SecHub网络安全社区
Goby是是一个图形化的漏洞扫描工具,他的便捷在于集成漏扫工具,支持大量插件,并且可以让新手自定义poc,大大降低了黑客的入门门槛。
fscan 是一个内网综合扫描工具,方便一键自动化、全方位漏洞扫描。它支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。
.\fscan.exe -h <target> -p 0-65535
.\fscan.exe -h 192.168.1.1/24 -p 0-65535
.\fscan.exe -hf <target.txt>
fscan.exe -h 192.168.1.1/24 -np -nopoc(跳过存活检测 、不进行poc攻击)
fscan.exe -h 192.168.1.1/24 -rf id_rsa.pub (redis 写公钥)
fscan.exe -h 192.168.1.1/24 -rs 192.168.1.1:8888 (redis 计划任务反弹shell)
fscan.exe -h 192.168.1.1/24 -c whoami (ssh 爆破成功后,命令执行)
fscan.exe -h 192.168.1.1/24 -m ssh -p 2222 (指定模块ssh和端口)
fscan.exe -h 192.168.1.1/24 -pwdf pwd.txt -userf users.txt (加载指定文件的用户名、密码来进行爆破)
fscan.exe -h 192.168.1.1/24 -o /tmp/1.txt (指定扫描结果保存路径,默认保存在当前路径)
fscan.exe -h 192.168.1.1/8 (A段的192.x.x.1和192.x.x.254,方便快速查看网段信息 )
fscan.exe -h 192.168.1.1/24 -m smb -pwd password (smb密码碰撞)
fscan.exe -h 192.168.1.1/24 -m ms17010 (指定模块)
fscan.exe -hf ip.txt (以文件导入)
https://github.com/ZororoZ/fscanOutput/releases/download/v2.20/FscanOutput_v2.2.py
一个用于处理fsacn输出结果的小脚本(尤其面对大量资产的fscan扫描结果做输出优化,让你打点快人一步!!!),可将结果转换为xlsx,并且用不同的sheet展示不同的类型
python3 fscanOutput.py result.txt
使用Go语言开发的基于Yaml语言的漏洞扫描器
// 可以使用此命令进行手动更新,也可以等待Nuclei24小时自动更新。
nuclei -update
扫描单个目标:nuclei -u https://example.com
扫描多个目标: nuclei –l <资产.txt>
-o 输出发现的问题
输出报告
扫描单个目标:afrog -t http://example.com -o result.html
扫描多个目标:afrog -T urls.txt -o result.html
在线升级:afrog --up
system32
存放系统配置文件
SysWOW64
Windows操作系统的子系统
Config/SAM
存放windows帐号和密码
etc/hosts
DNS解析文件
Program files/ Program files (x86)
64位系统安装在Windows操作系统的子系统,32位下会安装在x86下
Perflogs
日志目录
命令 | 说明 |
---|---|
ver | 查看系统版本 |
hostname | 查看主机名 |
ipconfig /all | 查看网络配置 |
net user/localgroup/share/config | 查看用户/用户组/共享/当前运行可配置服务 |
at | 建立或查看系统作业 |
netstat | 查看开放端口 |
secpol.msc | 查看和修改本地安全设置 |
services.msc | 查看和修改服务 |
eventvwr.msc | 查看日志 |
regedit | 打开注册表 |
whoami | 查看当前操作用户的用户名 |
端口 | 说明 |
---|---|
80/8080/8081 | HTTP协议代理服务器常用端口号 |
443 | HTTPS协议代理服务器常用端口号 |
21 | FTP |
22 | SSH |
23 | Telnet |
1521 | Oracle |
1433 | Mssql |
1080 | |
3306 | Mysql |
25 | SMTP |
命令 | 说明 |
---|---|
创建空密码账户test1 | net user test1 /add |
查看账户test1的详细信息 | net user test1 |
删除账户test1 | net user test1 /del |
创建普通用户test2,密码为passwd | net user test2 passwd/add |
把用户test1用户加如管理员组 | net localgroup administrators test1 /add |
把test1用户退出管理员组 | net localgroup administrators test1/del |
启用[停用]test1账户 | net user test1 /active:yes[no] |
新建[删除]组admin | net localgroup admin /add[del] |
查看本地开启的共享 | net share |
常看开启哪些端口 | netstat |
账号安全是计算机系统安全的第一关,如果计算机系统账号被盗用,那么计算机将非常危险,入侵者可以任意控制计算机系统,如果计算机中存在着重要的机密文件,或者银行卡号和密码,那么损失会非常严重。
设置方法:“开始”—“运行”输入secpol.msc(控制面板——管理工具)
立即生效:gpupdate /force
密码必须符合复杂性要求:启用
密码长度最小值 8个字符
密码最长使用期限: 30天
强制密码历史: 3个记住的密码
帐户锁定阀值: 3次无效登陆
帐户锁定时间: 30分钟
复位帐户锁定计数器:30分钟之后
“我的电脑“右击”管理“打开—计算机管理—本地用户和组—用户—Guest—右键—属性—常规—选择“账户已禁用”。
net user guest /active:no
Administartor账号、组重命名,可增加账号安全性
wmic useraccount where name='Administrator' call Rename admin
在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。在安全领域,日志系统的重要地位尤甚,可以说是安全审计方面最主要的工具之一。
对重要事件进行审核记录,方便日后出现问题时查找问题根源。
日志安全设置
设置方法:“开始”—“运行”输入eventvwr.msc
增大日志大小,避免由于日志文件容量过小导致重要日志记录遗漏,设置80000以上
本地安全策略->本地策略->安全选项
Microsoft 网络服务器:当登录时间用完时自动注销用户(启用)
目的:可以避免用户在不适合的时间登录到系统,或者用户登录到系统后忘记退出登录
Microsoft 网络服务器:在挂起会话之前所需的空闲时间(小于等于30分钟)
目的:设置挂起会话之前所需的空闲时间为30分钟
Microsoft 网络客户端:发送未加密的密码到第三方SMB服务器(禁用)
目的:禁止发送未加密的密码到第三方SMB服务器
故障恢复控制台:允许对所有驱动器和文件夹进行软盘复制和访问(禁用)
目的:禁止它访问硬盘驱动器上的所有文件和目录。它仅允许访问每个卷的根目录%systemroot%目录及子目录,即使是这样它还限制不允许把硬盘驱动器上的文件拷贝到软盘上
故障恢复控 制台:允许自动系统管理级登录(禁用)
目的:恢复控制台是Windows 2003的一个新特性,它在一个不能启动的系统上给出一个受限的命令行访问界面。可能会导致任何可以重起系统的人绕过账号口令限制和其它安全设置而访问系统
关机:清除虚拟内存页面文件(启用)
目的:某些第三方的程序可能把一些没有的加密的密码存在内存中,页面文件中也可能含有另外一些敏感的资料。关机的时候清除页面文件,防止造成意外的信息泄漏
关机:允许系统在未登录前关机(禁用)
目的:在未登录前不能关闭计算机
交互式登录:不显示上次的用户名(启用)
目的:登陆时不显示上次的用户名,防止暴露用户名。
交互式登录:不需要按Ctrl+Alt+Del(禁用)
目的:登录时需要按CTRL+ALT+DEL
交互式登录:可被缓存的前次登录个数(设置缓存数为0,此项对域服务器无效。)
目的:登陆时不显示上次的用户名,防止暴露用户名
网络访问:不允许SAM帐户和共享的匿名枚举(启用)
目的:禁止使用匿名用户空连接枚举系统敏感信息
网络访问:不允许为网络身份验证储存凭证或 .NET passports(启用)
审核:如果无法记录安全审核则立即关闭系统 (启用)
审核:对全局系统对象的访问进行审核(启用)
网络访问:本地账户的共享和安全模式:仅来宾–本地账户以来宾用户身份验证
网络访问:可匿名访问的共享(全部删除)
网络访问:可匿名访问的命名管道 (全部删除)
网络访问:可远程访问的注册表路径(全部删除)
网络访问:可远程访问的注册表路径和子路径 (全部删除)
通过终端服务拒绝登陆”中加入Guests、User组
通过终端服务允许登陆”中只加入Administrators组
从网络访问此计算机”中删除PowerUsers和BackupOperators
“拒绝本地登录”中添加web和guest用户
文件系统又被称作文件管理系统,它是指操作系统中负责管理和存储文件信息的软件机构。文件系统由与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构这三部分构成。
从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等
Windows NT以后的文件,及文件夹共享设置有以下特性:继承性、累加性、优先性、交叉性。
系统分区C盘 administrator、system完全控制 C:\Documents and Settings\ administrator、system完全控制 C:\windows\system32\ administrator读写 C:\progran files 为Common File目录之外的所有目录赋予Administrators 和SYSTEM 完全控制 C:\windows 系统管理员完全控制、system拒绝(继承) C:\windows\system32 其关键程序只允许administrator完全控制 C:\Inetpub\ administrator、system完全控制,必要时可以删除该目录 网站目录所在磁盘 administrator、system完全控制
配置信息或硬件驱动程序,这不仅方便了用户对系统软硬件的工作状态进行适时的调整,于此同时注册表也是入侵者攻击的目标,通过注册表也可称为入侵者攻击的目标,通过注册表种植木马、修改软件信息,甚至删除、停用或改变硬件的工作状态。
HKEY_LOCAL_MACHINE 包含关于本地计算机系统的信息,包括硬件和操作系统数据 HKEY_LOCAL_ROOT 包含各种OLE技术使用的信息技术和文件类别关联数据 HKEY_LOCAL_USER 包含环境变量、桌面设置、网络连接、打印机和程序首选项 HKEY_LOCAL_USERS 包含关于动态加载的用户配置文件和默认的配置文件的信息。有 些信息和HKEY_CURRENT_USER交叉出现 HKEY_CURRENT_CONFIG 包含在启动时由本地计算机系统使用的硬件配置文件的相关信息
利用文件管理器对regedit.exe文件设置成只允许管理员能使用命令访问修改注册表,其他用户只能读取,但不能修改这样就可以防止非法用户恶意修改注册表。
禁止自动登录
编辑注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon(REG_DWORD)
值设置为0
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /d 0 /f
启用源路由欺骗保护
System\CurrentControlSet\ Services\Tcpip\Parameters\ 新建(REG_DWORD)
值 名称为 DisableIPSourceRouting
参数为 2
reg add " System\CurrentControlSet\ Services\Tcpip\Parameters\ " /v DisableIPSourceRouting /t REG_DWORD /d 2 /f
目的:防护在网络上发生的源路由欺骗
禁止空链接
删除IPC共享
禁用IPC连接,编辑注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\restrictanonymous
值为1
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v restrictanonymous /d 0 /f
删除系统默认共享
删除服务器上的管理员共享
HKLM\System\CurrentControlSet\ Services\LanmanServer\Parameters\AutoShareServer
参数为0
#查看默认共享
net share
#删除默认共享
net share <共享名> /del
修改默认3389远程端口
修改注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp\PortNumber
它默认值是3389,这样我们可以修改成自己的想要的端口号,修改的时候要点十进制。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /d 4445 /f
关闭135.139.445隐患端口
”开始“—“运行”,输入”dcomcnfg”,单击“确定”,打开组件服务
右键我的电脑,单击”属性”,在默认属性中去掉”在此计算机上启用分布式COM”前的勾,选择”默认协议”选项卡,选中“面向连接的TCP/IP”,单击”确定”按钮,设置完成,重新启动后即可关闭135端口
右键我的“网上邻居”,单击“属性”,再打开本地连接的“属性”
选中Internet协议(TCP/IP),常规选项卡-高级
设置WINS选项卡”禁用TCP/IP上的“NETBIOS”
修改注册表,添加一个键值
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters
在右面的窗口新建一个SMBDeviceEnabled
为REG_DWORD
类型键值为 0。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NetBT" /v SMBDeviceEnabled /t REG_DWORD /d 0 /f
让配置立即生效
/proc:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
目录 | 功能 |
---|---|
/etc/passwd | 记录系统本地用户的属性信息,如UId,Gid,家目录等信息 |
/etc/shadow | 存放用户的口令等信息,只有系统管理员用户能查看 |
/etc/pam.d/system-auth | 账户安全配置文件 |
/etc/login.defs | 设置用户账户限制的配置文件,对root用户无效 |
/etc/securetty | 网络配置文件 |
/etc/pam.d/su | su命令配置 |
/etc/hosts.allow /etc/hosts.deny |
允许/拒接某网段远程连接到主机 |
/etc/profile | 保存Linux全局环境变量信息,如umask,bash历史命令设置 |
#添加用户 useradd <用户名> #删除用户 userdel [-r][-f] <用户名> #锁定/解锁用户 passwd -l <用户名> passwd -u <用户名> #用户属性 usermod -L <用户名>锁定用户 usermod -U <用户名>解锁用户 #查看当前用户 id
#查看权限
ls -l
#修改权限
chmod //用来变更文件或目录的权限
chown //用来变更文件或目录的拥有者或所属群组
chgrp //用来变更文件或目录的所属群组
umask值为0022所对应的默认文件和文件夹创建的缺省权限分别为644和755
文件夹其权限规则为:777-022=755
文件其权限规则为: 777-111-022=644(因为文件默认没有执行权限)
修改UMASK值:
1、直接在命令行下umask xxx (重启后消失)
2、修改/etc/profile中设定的umask值
查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如:bin, sys,adm,uucp,lp, nuucp,hpdb, www, daemon等可根据需要锁定登陆。
执行命令
#cat /etc/passwd
#cat /etc/shadow
加固方法:
使用命令passwd -l <用户名>锁定不必要的账号。
使用命令passwd -u <用户名>解锁需要恢复的账号。
#检查方法:
awk -F ":" '($2=="!"){print $1}' /etc/shadow
加固方法:
使用命令passwd -l <用户名>锁定不必要的账户。
使用命令passwd -u <用户名>解锁需要恢复的账户。
使用命令passwd <用户名>为用户设置密码
#执行命令
cat /etc/login.defs|grep PASS查看密码策略设置
#加固方法:
vi /etc/login.defs修改配置文件
PASS_MAX_DAYS 90 //用户的密码最长使用天数
PASS_MIN_DAYS 0 //两次修改密码的最小时间间隔
PASS_MIN_LEN 7 //密码的最小长度
PASS_WARN_AGE 9 //密码过期前多少天开始提示
#检测方法:
awk -F ":" '($3=="0"){print $1}' /etc/passwd 检查用户ID为0的用户
#加固方法:
passwd -l <用户名> 锁定用户
chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/gshadow chattr +i /etc/group chattr +i /etc/inetd.conf chattr +i /etc/httpd.conf
第一个0代表suid 丢弃的权限;
第二个0代表本文件/目录拥有者什么权限都没丢弃
第三个2代表本文件/目录的用户组丢弃了w权限
第四个2代表本文件/目录的其他用户能使用的权限只有有r和x
实际权限=7777-0022
设置合理的umask权限
umask 0022
禁止root用户进行远程登录
检查方法:
cat /etc/ssh/sshd_config | grep PermitRootLogin 是否为no
加固方法
vi /etc/ssh/sshd_config
PermitRootLogin no
更改服务端口
vi /etc/ssh/sshd_config
Port 2222
更改ssh端口
#屏蔽SSH登录banner信息
检查方法:
# cat /etc/ssh/sshd_config
查看文件中是否存在banner字段,或banner字段为NONE
# cat /etc/motd
查看文件内容,该处内容作为banner信息显示给登录用户
加固方法:
#vim /etc/ssh/sshd_config
添加:
banner NONE
#vim /etc/motd
删除全部内容或更新成自己想要添加的内容
检查方法:
# cat /etc/pam.d/system-auth|grep auth 查看有无auth required pam_tally.so 条目的设置
加固方法:
#vi /etc/pam.d/system-auth
auth required pam_tally.so oneer=filad deny=6 unlock_time=300 设置为密码连续错误6次,锁定时间300
秒
解锁用户:faillog -u <用户名> -r
检查方法:
cat /etc/profile | grep HISTSIZE
HISTSIZE=1000
加固方法:
#vim /etc/profile
修改HISTSIZE=5即保留最新执行的5条命令
加固方法:
执行命令 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
其他客户端就不能ping通你的服务器了。
使用MySQL自带的命令mysqladmin设置root密码
# mysqladmin -u root password "123456.."
使用mysqladmin命令更改root密码
# mysqladmin -u root -p123456.. password "1234567.."
旧密码
新密码
登录MySQL
#mysql -u root -p
MySQL命令 | 功能 |
---|---|
show databases; | 查看服务器中当前有哪些数据库 |
use 数据库名; | 选择所使用的数据库 |
create database 数据库名; | 创建数据库 |
drop database 数据库名; | 删除指定的数据库 |
mysql安装后默认会创建三个数据库information_schema、mysql和test, 其中名为“mysql”的数据库很重要,它里面保存有MYSQL的系统信息,用户修改密码和新增用户,实际上就是针对该数据库中的有关数据表进行操作。
Mysql命令 | 功能 |
---|---|
create table 表名 (字段设定列表); | 在当前数据库中创建数据表 |
show tables; | 显示当前数据库中有哪些数据表 |
describe [数据库名.]表名; | 显示当前或指定数据库中指定数据表的结构(字段)信息 |
drop table [数据库名.]表名; | 删除表 |
MySQL命令 | 功能 |
---|---|
insert into 表名(字段1,字段2,……) values(字段1的值, 字段2值,……); |
向数据表中插入新的记录 |
update 表名 set 字段名1=字段值1[,字段名2=字段值2] where 条件表达式; | 修改、更新数据表中的记录 |
select 字段名1,字段名2……from 表名 where 条件表达式; | 从数据表中查找符合条件的记录 |
select * from 表名; | 显示当前数据库的表中的记录 |
delete from 表名 where 条件表达式; | 在数据表中删除指定的记录 |
delete from 表名; | 将当前数据库表中记录清空 |
MySQL初始化后会自动生成空用户和test库,进行安装的测试,这会对数据库的安全构成威胁,有必要全部删除,最后的状态只保留单个root即可,当然以后根据需要增加用户和数据库。
mysql> show databases;
mysql> drop database test;
//删除数据库test
mysql> use mysql;
mysql> delete from db; //删除存放数据库的表信息,因为还没有数据库信息。
mysql> delete from user where not (user='root');
// 删除初始非root的用户
mysql> delete from user where user='root' and password=''; //删除空密码的root尽量重复操作
mysql> flush privileges;
//强制刷新内存授权表。
改变默认的mysql管理员账号也可以使mysql数据库的安全性有较好的提高,因为默认的mysql管理员的用户名都是root
mysql> update mysql.user set user='admin' where user='root';
使用命令netstat 查看默认的3306端口是打开的,此时打开了mysql的网络监听,允许用户远程通过帐号密码连接数本地据库,默认情况是允许远程连接数据的。为了禁止该功能,启动skip-networking,不监听sql的任TCP/IP的连接,切断远程访问的权利,保证安全性
# vi /etc/my.cf //将#skip-networking注释去掉。
数据库的某用户多次远程连接,会导致性能的下降和影响其他用户的操作,有必要对其进行限制。可以通过限制单个账户允许的连接数量来实现,设置my.cnf 文件的mysql中的max_user_connections变量来完成。GRANT语句也可以支持资源控制选项来限制服务器对一个账户允许的使用范围。
#vi /etc/my.cnf
[mysqld]
max_user_connections=2
防止MySQL使用“LOAD DATA LOCAL INFILE”读取主机上的文件
vim /etc/my.cnf
set-variable=local-infile=0
1).直接备份数据库所在的目录
使用cp、tar等命令直接备份数据库所存放的目录
2.使用mysqldump命令备份和恢复
mysqldump -u 用户名 -p [密码] [选项] [数据库名] [表名] > /备份路径/备份文件名
mysql -u root -p [数据库名] < /备份路径/备份文件名