前言

笔试的时候遇到了,一脸懵逼,对这方面只要一次打比赛的经验,还是好久之前的了,鬼知道我投的攻防岗会有这东西,简单总结一下吧,感觉这是个大坑

这里主要介绍系统命令和一些基本操作,不涉及到太深的技术,等我什么时候做蓝队的时候在写

我简单划分为了三个板块:

系统排查(主要是防止攻击者进行权限维持,对系统层面的抑制策略)
服务和进程排查
痕迹排除(目的是搞清楚攻击路径)

Linux

之前写的那个“linux基础命令”是为ctf的命令执行绕过中做总结的,更偏向文本操作和一些基础命令,这里总结一下更侧重运维和内网渗透的命令

系统排查

系统信息

1
2
3
4
5
6
7
8
uname -a #查看本机信息
uname -m #如果输出是 aarch64,则表示 ARM 架构;如果输出是 x86_64,则表示 AMD(x86)架构。
lscpu #CPU信息
lsmod #载入模块信息
mount # 挂载信息
env #查看环境变量
clear #清屏
top #查看当前系统状态

用户信息

超级用户 (root):

拥有系统的所有权限,可以执行任何操作,包括管理系统文件、用户、安装软件等。

普通用户:

普通用户是系统中的非特权用户。每个普通用户只能访问和修改自己的文件及目录,对系统文件和其他用户的文件没有访问权限。

系统用户:

这些用户通常用于运行系统服务和守护进程(如 www-data、nobody 等)。系统用户通常没有登录权限。
1
2
3
4
5
6
7
8
9
cat /etc/passwd | grep -v nologin | grep -v false #列出系统所有可登录账号, /usr/sbin/nologin 或 /bin/false 表示“禁用登录”
last #查看用户最近登录信息
lastb #查看错误的用户登录信息
lastlog #查看所有用户最后一次登录信息

awk -F: '$3==0{print $1}' /etc/passwd #查询root权限用户用户(uid 为0)
awk '/\$1|\$6/{print $1}' /etc/shadow #查询可以远程登录的帐号信息


如有,打开 /home 各帐号目录下的 .bash_history,查看普通帐号的历史命令

启动项和定时任务

1
2
3
4
5
chmod +x /etc/rc.d/rc.local #或者是/etc/init.d/rc.local
vi /etc/rc.d/rc.local
/usr/local/shell/crontab.sh

systemctl list-unit-files | grep enable #查看启动项

crontab -l命令可以查看定时任务
Centos的定时任务文件在/var/spool/cron/<username>
Ubuntu定时任务文件在/var/spool/cron/crontabs/<username>
crontab -e 使用编辑器编辑当前的crontab文件

服务和进程排查

端口

netstat

-a或–all 显示所有连线中的Socket,默认不显示LISTEN相关

-n或–numeric 直接使用IP地址,而不通过域名服务器。
-o或–timers 显示计时器。
-p或–programs 显示PID和程序名称。
-e或–extend 显示网络其他相关信息。
-l或–listening 显示服务器正在监听的端口,默认显示已经建立的连接

-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。

-r或–route 显示Routing Table。
-i或–interfaces 显示网络接口列表
-g或–groups 显示多重广播功能群组组员名单。
-s或–statistics 显示网络工作信息统计表。

netstat -atulnp | grep :80

1
2
3
4
5
6
netstat -atulnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:18000 0.0.0.0:* LISTEN 2956/docker-proxy
tcp6 0 0 :::18000 :::* LISTEN 2963/docker-proxy
udp 0 0 10.237.26.40:68 10.237.26.254:67 ESTABLISHED 659/NetworkManager

Local Address (监听的ip端口信息)
0.0.0.0(IPv4)或 ::(IPv6)
表示服务监听在所有网络接口(包括本地回环、所有物理网卡)的指定端口上,可从外部访问

127.0.0.1(IPv4)或 ::1(IPv6)
表示服务仅监听在本地回环地址,只能由本机访问,外部无法连接

IP地址:端口号(如 192.168.1.100:443)
表示服务只监听在该特定IP地址的指定端口上

Foreign Address(开放的ip端口信息)
0.0.0.0:*(IPv4)或 :::*(IPv6)
表示接受来自任何远程地址和任何端口的连接请求

当State为ESTABLISHED时,Foreign Address 会显示一个具体的IP和端口,指明了当前正在与你通信的对端是谁

ss

ss 专为查看套接字(socket)信息而设计,功能更加强大、效率更高,尤其在显示大规模连接时性能更优

1
2
3
4
5
ss -tuln       # 显示所有监听端口及相关信息
ss -tulnp # 显示监听端口及进程信息
ss -an # 显示所有连接
ss -s # 显示连接统计信息
ss -p # 显示进程ID
telnet

telnet 192.168.100.110 7001(用telnet命令来测试端口号是否正常打开还是关闭状态。)

进程

lsof -p PID 查看进程打开的文件
kill -9 PID 杀死进程

ps

-A 列出所有的进程

-u 显示指定用户信息
-e 显示所有进程,而不仅仅是当前用户的进程,等同于-A

-f 以全格式的列表显示进程的信息,包括进程之间的层级关系

查找指定进程格式:
ps -ef | grep 进程关键字

Top

实时查看系统状况

-b 批处理

-c 显示完整的治命令

-I 忽略失效过程

-s 保密模式

-S 累积模式

-i<时间> 设置间隔时间

-u<用户名> 指定用户名

-p<进程号> 指定进程

-n<次数> 循环显示的次数

服务

1
2
3
4
5
6
systemctl list-units --type=service --state=running #列出所有运行中的服务
systemctl status 服务名 #查看服务详情
systemctl start 服务名 #开启服务
systemctl stop 服务名 #关闭服务
systemctl enable 服务名 #设置开机自启
systemctl disable 服务名 #取消开机自启动

痕迹排查

文件痕迹排查

1
2
3
find ctime -7 -name *.sh #七天以内创建的文件
find -tmp -perm 777 #权限为777的文件
find/-type f -perm -04000 -ls -uid 0 2>/dev/null #排查suid权限的程序

日志分析

1
2
3
4
5
6
7
8
9
10
11
12
13
Linux的日志存储在/var/log中

wtmp 记录登录进入、退出、数据交换、关机和重启
cron 记录与定时任务相关的日志信息
messages 记录系统启动后的信息和错误日志
apache2/access.log 记录Apache的访问日志
auth.log 记录系统授权信息,包括用户登录和使用的权限机制等
userlog 记录所有等级用户信息的日志
xferlog(vsftpd.log) 记录Linux FTP日志
lastlog 记录登录的用户,可以使用命令lastlog查看
secure 记录大多数应用输入的账号与密码,以及登录成功与否
faillog 记录登录系统不成功的账号信息

例如sudo grep ‘sshd’ /var/log/auth.log

操作日志

1
2
3
4
5
6
7
8
9
10
11
history 500

# 切换到目标用户
su - target_user

# 查看目标用户的命令历史记录
history

# 如果目标用户没登录,可以直接查看他的.bash_history文件
exit # 退出目标用户的会话
cat /home/target_user/.bash_history

Win

系统排查

系统分析

1
2
#win
systeminfo

win+R,输入msinfo32.exe里面的信息更丰富

用户信息

cmd打开lusrmgr.msc查看服务器是否存在可疑账号、新增账号

1
2
3
4
5
net user #查看所有用户
net localgroup administrators #查看本地管理员组
注册表-HKEY_LOCAL_MACHINE-SAM-SAM-Domains-Account-Users-Names #查看隐藏用户

query user #获取在线用户

启动项和定时任务

任务管理器 - 启动项
计算机管理 — 任务计划程序 — 任务计划程序库 —
powershell > Get-ScheduledTask
cmd > schtasks

服务和进程排查

netstat

同上
netstat -ano 查看所有端口以及对应的PID

TASKLIST

1
2
3
4
5
6
7
8
9
10
11
tasklist 
参数含义
/S <computer> 指定连接到的计算机或IP地址,默认本机。
/u [<Domain>\]<UserName> 指定使用哪个用户执行这个命令。
/P [password] 为指定的用户指定密码。
/M [module] 列出调用指定的DLL模块的所有进程。如果没有指定模块名,显示每个进程加载的所有模块。
/SVC 显示每个进程中的服务信息,当/fo参数设置为table时有效。
/V 显示详细信息。
/FI filter 显示一系列符合筛选器指定的进程。
/FO format 指定输出格式,有效值:TABLE、LIST、CSV。
/NH 指定输出中不显示栏目标题。只对TABLE和CSV格式有效。

tasklist | findstr "18992"

痕迹排查

文件痕迹排查

1
forfiles /m *.exe /d +2020/2/12 /s /p c:\ /c "cmd/ c echo @path @fdate @ftime"2 > null #2020/2/12以来的新增文件

日志分析

win+R,输入eventvwr.msc,直接进入事件查看器分析日志,导出 Windows 日志–安全,利用 Log Parser 进行分析
常见事件ID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
系统日志:
1074,通过这个事件ID查看计算机的开机、关机、重启的时间以及原因和注释。
6005,表示计算机日志服务已启动,如果出现了事件ID为6005,则表示这天正常启动了系统。
104,这个时间ID记录所有审计日志清除事件,当有日志被清除时,出现此事件ID。

安全日志:
4624 -成功登录
4625 -失败登录
4647 -成功注销
4720 -创建⽤户
4722 -启⽤账户
4723 – 尝试修改账户密码
4724 -尝试重置密码
4725 – 账户被禁用
4726 – 账户被删除
4727 – 已添加成员到全局组
4732 -添加⽤户到组
4737 – 全局组被修改
4738 -修改账户
4739 – 修改了安全性本地组
4740 – 账户被锁定
4762 – 域中计算机账户密码被修改