渗透高级-----应急响应

应急响应

windows入侵排查

常见的应急响应事件分类:

Web 入侵:网页挂马、主页篡改、Webshell

系统入侵:病毒木马、勒索软件、远控后门

网络攻击:DDOS 攻击、DNS 劫持、ARP 欺骗

一,检查系统账号安全

复制代码
windows远程端口:3389----->rdp协议
linux远程端口:22----->ssh协议

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

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

2、查看服务器是否存在可疑账号、新增账号。

  • 检查方法:打开 cmd 窗口,输入 lusrmgr.msc 命令,查看是否有新增/可疑的账号,如有管理员群组的(Administrators)里的新增账户,如有,请立即禁用或删除掉。
  • 可以用鼠标点击查看命令行执行查看用户

3、查看服务器是否存在隐藏账号、克隆账号。

  • 检查方法:打开注册表 ,查看管理员对应键值。

创建一个隐藏账号:

  1. 在命令执行框中输入:net user test$ test123 /add(用户名 密码)
  1. 将创建的隐藏用户添加到Administrators用户组里:

    C:\Windows\system32>net localgroup Administrators test$ /add

  1. 通过查看用户的命令net user可以发现,没有上面创建的 test 用户;虽然这样不能查看隐藏的用户,但是这样的方式还是很容易被发现。
  1. 修改注册表,实现test用户全隐藏

    1. 给指定文件添加Administrators权限,并重新打开注册表查看:

      一个用户对应一个文件:

    2. 将Administrators用户对应项的F数据值复制到test$用户对应的F数据值。


    3. 将test$用户所对应的000003E9导出,分别重命名

    4. 删除test$用户,将test.reg和3E9.reg导入注册表:(只能在注册表看见影子账户)

      复制代码
      C:\Windows\system32>net user test$ /del
      命令成功完成。
      // 然后双击reg文件进行注册信息导入

      然后就完成了影子账户的创建。

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

  • 检查方法:

    a、Win+R 打开运行,输入"eventvwr.msc",回车运行,打开"事件查看器"。

    b、导出 Windows 日志 -- 安全,利用微软官方工具 Log Parser 进行分析。

二、检查异常端口、进程 netstat -ano | findstr ESTAB 进程监听

1、检查端口连接情况,是否有远程连接、可疑连接。

  • 检查方法:

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

    b、根据 netstat 命令定位出的 PID 编号,再通过 tasklist 命令进行进程定位 tasklist | findstr "PID"

2、进程 process monitor process explorer

  • 检查方法:

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

    b、打开D盾_web查杀工具,进程查看,关注没有签名信息的进程。

    c、通过微软官方提供的 Process Explorer 等工具进行排查 。

    d、查看可疑的进程及其子进程。可以通过观察以下内容:

    没有签名验证信息的进程
    没有描述信息的进程
    进程的属主
    进程的路径是否合法
    CPU 或内存资源占用长时间过高的进程

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

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

  • 检查方法:

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

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

    c、单击【开始】>【运行】,输入 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

    检查右侧是否有启动异常的项目,如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马。

    d、利用安全软件查看启动项、开机时间管理等。

    e、组策略,运行 gpedit.msc

2、检查计划任务

  • 检查方法:

    a、单击【开始】>【设置】>【控制面板】>【任务计划】,查看计划任务属性,便可以发现木马文件的路径。

    b、单击【开始】>【运行】;输入 cmd,然后输入 schtasks.exe,检查计算机与网络上的其它计算机之间的会话或计划任务,如有,则确认是否为正常连接。

3、服务自启动

  • 检查方法:单击【开始】>【运行】,输入 services.msc,注意服务状态和启动类型,检查是否有异常服务。

Linux入侵排查

一、账号安全

复制代码
// 1,用户信息文件
root@ning:~# cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

// 2,影子文件
root@ning:~# cat /etc/shadow
root:$y$j9T$i2IdqsdM0qfrLyNSX7fn/0$XeSBT9qyltX0w2Qe4jZAx0kFU6BQLXjKC2.NdUxIHL1:20293:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留

入侵排查

复制代码
1、查询特权用户特权用户(uid 为0)
root@ning:~# awk -F: '$3==0{print $1}' /etc/passwd
root

2、查询可以远程登录的帐号信息
root@ning:~# awk '/\$1|\$6/{print $1}' /etc/shadow    // 这里显示出来的是用户和登录密码
ning:$6$p35zJuYrg4vYGmhT$NrTosIG9/a9VStjakSNJNeDDLQOr/T4ubF8F83ORqKtmlbyxu52deWxmVeYmgITDGH3WdRCeDIO.tLMWYWgty0:20292:0:99999:7:::

3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
root@ning:~# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
%admin ALL=(ALL) ALL

4、禁用或删除多余及可疑的帐号
    usermod -L user    禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头
	userdel user       删除 user 用户
	userdel -r user    将删除 user 用户,并且将 /home 目录下的 user 目录一并删除

二、检查异常端口

使用 netstat 网络连接命令,分析可疑端口、IP、PID

复制代码
netstat -antlp | more

查看下 pid 所对应的进程文件路径,
运行 ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的 pid 号)

三、检查异常进程

使用 ps 命令,分析进程

复制代码
root@ning:~# ps aux | grep pid 
message+    1336  0.0  0.1  12176  7276 ?        Ss   17:14   0:00 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
ning        2633  0.0  0.1  10884  6644 ?        Ss   17:14   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root        3836  0.0  0.1   9456  4780 ?        Ss   17:15   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root        4345  0.0  0.0   9304  2276 pts/2    S+   17:58   0:00 grep --color=auto pid

四、 检查开机启动项

系统运行级别示意图:

运行级别 含义
0 关机
1 单用户模式,可以想象为windows的安全模式,主要用于系统修复
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式
6 重启动

查看运行级别命令 runlevel

复制代码
root@ning:~# runlevel 
N 5

系统默认允许级别

复制代码
vim  /etc/inittab
id=3:initdefault  #系统开机后直接进入哪个运行级别

开机启动配置文件

复制代码
/etc/rc.local
/etc/rc.d/rc[0~6].d

五、检查定时任务

1、利用 crontab 创建计划任务

复制代码
crontab -l   列出某个用户cron服务的详细内容
Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
crontab -r   删除每个用户cront任务(谨慎:删除所有的计划任务)
crontab -e   使用编辑器编辑当前的crontab文件 
如:*/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会在机器开机十分钟之后运行它,而不用再等待 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/*

小技巧:more /etc/cron.daily/* 查看目录下所有文件。

六、检查服务自启动

第一种修改方法:

复制代码
chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig --level  2345 httpd on  开启自启动
chkconfig httpd on (默认level是2345)

第二种修改方法:

复制代码
修改 /etc/re.d/rc.local 文件  
加入 /etc/init.d/httpd start

第三种修改方法:

使用 ntsysv 命令管理自启动,可以管理独立服务和 xinetd 服务。

七、检查异常文件

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

2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?

​ 可以使用find命令来查找,如 find /opt -name "*" -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授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

日志分析技巧:

复制代码
1、定位有多少IP在爆破主机的root帐号:    
root@ning:/usr/local/nginx/logs# grep "Failed password for root" /usr/local/nginx/logs/access.log | awk '{print $11}' | uniq -c | sort -nr | more

定位有哪些IP在爆破:
grep "Failed password" /usr/local/nginx/logs/access.log | 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" /usr/local/nginx/logs/access.log | awk '{print $9}' | sort -nr | uniq -c
 
2、登录成功的IP有哪些: 	
grep "Accepted " /usr/local/nginx/logs/access.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的日期、用户名、IP:
grep "Accepted " /usr/local/nginx/logs/access.log | awk '{print $1,$2,$3,$9,$11}' 

九、使用脚本防止暴力破解

1,IP暴力破解:shell封堵在特定时间,一分钟内,爆破次数超过几次的IP

sh 复制代码
root@ning:~# vim deny.sh
#!/bin/bash
# 日志文件路径
logfile=/usr/local/nginx/logs/
last_minutes=1 
# 开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"`
echo $start_time
# 结束时间现在
stop_time=`date +"%d/%m/%Y:%H:%M:%S"`
echo $stop_time
cur_date="`date +%d/%m/%Y`"
echo $cur_date
# 过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10
#ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
# 出现横杠使用sed去掉第一行
#sed -i '1d' $logfile/log_ip_top10    
# 单位时间[1分钟]内单ip访问次数超过200次的ip记录入black.txt
ip=`cat $logfile/log_ip_top10 | awk '{if($1 > 100)print $2}'`
for line in $ip
do
echo $line >> $logfile/getip.txt
echo $line
iptables -I INPUT -p tcp  -m multiport --dport 80,443 -s $line -j DROP
done

root@ning:~# chmod +x deny.sh    // 给deny.sh脚本添加执行权限
root@ning:~# ./deny.sh         # 执行文件
03/08/2025:19:00:35
03/08/2025:19:01:35
03/08/2025

# 写一个任务计划,每分钟执行一次该脚本:
root@ning:~# echo "* * * * * root /deny.sh" >> /etc/crontab

2,ssh暴力破解:自动封禁频繁尝试 SSH 登录失败的 IP 地址 ,并确保 iptables 服务正常运行

sh 复制代码
root@ning:~# vim deny_ssh.sh
#!/bin/bash
# 提取频繁登录失败的 IP
IP=$(awk '/Failed password/ {IP[$(NF-3)]++} END { for (k in IP) { if (IP[k]>=4) print k }}' /usr/local/nginx/logs/access.log)
# 遍历IP并封禁
for i in $IP
do
  tmpIP=(`iptables -L -n | tr -s " " | awk '/^DROP/ && /22$/ {print $4}'`)
  # 检查 IP 是否已封禁
  echo ${tmpIP[@]} | grep -qw $i
  
  if [ $? -ne 0 ]
  then
    iptables -I INPUT -p tcp --dport 22 -s $i -j DROP 
  fi
done
# 确保 iptables 服务安装并启用
rpm -q iptables-services &> /dev/null
if [ $? -ne 0 ]
then
   yum -y install iptables-services &>/dev/null
   systemctl enable --now iptables.service &> /dev/null
fi
# 保存 iptables 规则
iptables-save > /etc/sysconfig/iptables
# 清理临时变量
unset tmpIP

root@ning:~# chmod +x deny_ssh.sh     // 添加执行权限

# 写一个任务计划,每天执行一次该脚本:
root@ning:~# echo "0 0 * * * root /deny_ssh.sh" >> /etc/crontab

Web日志分析

日志分析技巧

在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。

第一种:确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。

第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。

Linux下,使用Shell命令组合查询分析。

Shell+Linux命令实现日志分析,一般结合grep、awk等命令等实现了几个常用的日志分析统计技巧。

apl 复制代码
1、列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20

2、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l

3、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l

4、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

5、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

6、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'

7、去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

8、查看2018年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l	

日志统计分析技巧

统计爬虫:

javascript 复制代码
grep -E 'Googlebot|Baiduspider'  /usr/local/nginx/logs/access.log | awk '{ print $1 }' | sort | uniq

统计浏览器:

javascript 复制代码
root@ning:/usr/local/nginx/logs# cat /usr/local/nginx/logs/access.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100               
      6 192.168.64.130 - - [30/Jul/2025:16:31:00 +0800] "GET /demo2.html HTTP/1.0" 200 494 "-" "-"
      6 192.168.64.130 - - [30/Jul/2025:16:30:59 +0800] "GET /demo2.html HTTP/1.0" 200 494 "-" "-"

IP 统计:

javascript 复制代码
grep '2/Aug/2025' /usr/local/nginx/logs/access.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10		

统计网段:

javascript 复制代码
root@ning:/usr/local/nginx/logs# cat /usr/local/nginx/logs/access.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200
    566 192.168.64.0

统计域名:

javascript 复制代码
root@ning:/usr/local/nginx/logs# cat  /usr/local/nginx/logs/access.log |awk '{print $2}'|sort|uniq -c|sort -rn|more    
    566 -

HTTP Status:

javascript 复制代码
cat  /usr/local/nginx/logs/access.log |awk '{print $9}'|sort|uniq -c|sort -rn|more
    357 200
    145 500
     55 404
      9 304

URL 统计:

javascript 复制代码
cat  /usr/local/nginx/logs/access.log |awk '{print $7}'|sort|uniq -c|sort -rn|more			

文件流量统计:

javascript 复制代码
cat /usr/local/nginx/logs/access.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more

grep ' 200 ' /usr/local/nginx/logs/access.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more			

URL访问量统计:

javascript 复制代码
root@ning:/usr/local/nginx/logs# cat /usr/local/nginx/logs/access.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more
    107 /bypass/demo3.php?a=id
     11 /bypass/demo6.php?a=id
      9 /bypass/demo4.php?a=id

脚本运行速度:

查出运行速度最慢的脚本

javascript 复制代码
grep -v 0$ /usr/local/nginx/logs/access.log | awk -F '\" ' '{print $4" " $1}' web.log | awk '{print $1" "$8}' | sort -n -k 1 -r | uniq > /tmp/slow_url.txt

IP, URL 抽取:

javascript 复制代码
# tail -f /usr/local/nginx/logs/access.log | grep '/test.html' | awk '{print $1" "$7}'			
相关推荐
Johny_Zhao18 小时前
阿里云平台健康检查巡检清单-运维篇
linux·网络安全·阿里云·信息安全·云计算·shell·系统运维
芯盾时代1 天前
芯盾时代受邀出席安全可信数据要素交易流通利用研讨会
安全·网络安全·数据安全·芯盾时代
网安Ruler1 天前
Web开发-PHP应用&原生语法&全局变量&数据接受&身份验证&变量覆盖&任意上传(代码审计案例)
网络·安全·网络安全·渗透·红队
JQLvopkk2 天前
Web安全学习步骤
网络安全
网安Ruler2 天前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
编程到天明2 天前
CTF实战:用Sqlmap破解表单输入型SQL注入题(输入账号密码/username&password)
sql·网络安全·web
m0_738120722 天前
Solar月赛(应急响应)——攻击者使用什么漏洞获取了服务器的配置文件?
运维·服务器·安全·web安全·网络安全
卓码软件测评2 天前
软件测试测评公司关于HTTP安全头配置与测试?
web安全·网络安全·安全性测试·web app
敲上瘾2 天前
渗透测试常用指令
服务器·测试工具·网络安全·压力测试