渗透高级-----应急响应
应急响应
windows入侵排查
常见的应急响应事件分类:
Web 入侵:网页挂马、主页篡改、Webshell
系统入侵:病毒木马、勒索软件、远控后门
网络攻击:DDOS 攻击、DNS 劫持、ARP 欺骗
一,检查系统账号安全
windows远程端口:3389----->rdp协议
linux远程端口:22----->ssh协议
1、查看服务器是否有弱口令,远程管理端口是否对公网开放。
- 检查方法:据实际情况咨询相关服务器管理员。
2、查看服务器是否存在可疑账号、新增账号。
- 检查方法:打开 cmd 窗口,输入
lusrmgr.msc
命令,查看是否有新增/可疑的账号,如有管理员群组的(Administrators)里的新增账户,如有,请立即禁用或删除掉。 - 可以用鼠标点击查看或命令行执行查看用户
3、查看服务器是否存在隐藏账号、克隆账号。
- 检查方法:打开注册表 ,查看管理员对应键值。
创建一个隐藏账号:
- 在命令执行框中输入:
net user test$ test123 /add
(用户名 密码)
- 将创建的隐藏用户添加到
Administrators
用户组里:
C:\Windows\system32>net localgroup Administrators test$ /add
- 通过查看用户的命令
net user
可以发现,没有上面创建的 test 用户;虽然这样不能查看隐藏的用户,但是这样的方式还是很容易被发现。
-
修改注册表,实现
test
用户全隐藏-
给指定文件添加
Administrators
权限,并重新打开注册表查看:一个用户对应一个文件:
-
将Administrators用户对应项的F数据值复制到test$用户对应的F数据值。
-
将test$用户所对应的000003E9导出,分别重命名
-
删除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
命令查看目前的网络连接,定位可疑的 ESTABLISHEDb、根据 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
root2、查询可以远程登录的帐号信息
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) ALL4、禁用或删除多余及可疑的帐号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 -c2、登录成功的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
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
doneroot@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
服务正常运行
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
dotmpIP=(`iptables -L -n | tr -s " " | awk '/^DROP/ && /22$/ {print $4}'`)# 检查 IP 是否已封禁echo ${tmpIP[@]} | grep -qw $iif [ $? -ne 0 ]theniptables -I INPUT -p tcp --dport 22 -s $i -j DROP fi
done
# 确保 iptables 服务安装并启用
rpm -q iptables-services &> /dev/null
if [ $? -ne 0 ]
thenyum -y install iptables-services &>/dev/nullsystemctl enable --now iptables.service &> /dev/null
fi
# 保存 iptables 规则
iptables-save > /etc/sysconfig/iptables
# 清理临时变量
unset tmpIProot@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等命令等实现了几个常用的日志分析统计技巧。
1、列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -202、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l3、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l4、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file5、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n6、查看某一个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 -l8、查看2018年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l
日志统计分析技巧
统计爬虫:
grep -E 'Googlebot|Baiduspider' /usr/local/nginx/logs/access.log | awk '{ print $1 }' | sort | uniq
统计浏览器:
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 统计:
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
统计网段:
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 200566 192.168.64.0
统计域名:
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:
cat /usr/local/nginx/logs/access.log |awk '{print $9}'|sort|uniq -c|sort -rn|more357 200145 50055 4049 304
URL 统计:
cat /usr/local/nginx/logs/access.log |awk '{print $7}'|sort|uniq -c|sort -rn|more
文件流量统计:
cat /usr/local/nginx/logs/access.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|moregrep ' 200 ' /usr/local/nginx/logs/access.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more
URL访问量统计:
root@ning:/usr/local/nginx/logs# cat /usr/local/nginx/logs/access.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more107 /bypass/demo3.php?a=id11 /bypass/demo6.php?a=id9 /bypass/demo4.php?a=id
脚本运行速度:
查出运行速度最慢的脚本
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 抽取:
# tail -f /usr/local/nginx/logs/access.log | grep '/test.html' | awk '{print $1" "$7}'