前言

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

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

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

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

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
cat /etc/passwd | grep 'bin/bash' #查看可登录账户,bin/bash 可登录 sbin/nologin 不可登录
last #查看用户最近登录信息
lastb #查看错误的用户登录信息
lastlog #查看所有用户最后一次登录信息

awk -F: '$3==0{print $1}' /etc/passwd #查询特权用户特权用户(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 -anpltu | grep :80

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<次数> 循环显示的次数

Linux 服务

chkconfig –list

痕迹排查

文件痕迹排查

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
net user
注册表-HKEY_LOCAL_MACHINE-SAM-SAM-Domains-Account-Users-Names #查看隐藏用户

query user #获取在线用户

启动项和定时任务

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

服务和进程排查

netstat

同上

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 “PID”

痕迹排查

文件痕迹排查

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
系统日志:
1074,通过这个事件ID查看计算机的开机、关机、重启的时间以及原因和注释。
6005,表示计算机日志服务已启动,如果出现了事件ID为6005,则表示这天正常启动了系统。
104,这个时间ID记录所有审计日志清除事件,当有日志被清除时,出现此事件ID。

安全日志:
4624,这个事件ID表示成功登陆的用户,用来筛选该系统的用户登陆成功情况。
4625,这个事件ID表示登陆失败的用户。
4720,4722,4723,4724,4725,4726,4738,4740,事件ID表示当用户帐号发生创建,删除,改变密码时的事件记录。
4727,4737,4739,4762,事件ID表示当用户组发生添加、删除时或组内添加成员时生成该事件。