我正在做一个 ctf,我正处于它的最后一步——权限升级。使用该sudo -l命令,输出是这样的:
Matching Defaults entries for nick on 192:
always_set_home, !env_reset, env_keep="LANG LC_ADDRESS LC_CTYPE LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE LC_ATIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE",!insults, targetpw
User nick may run the following commands on 192:
(ALL) ALL
(root) NOPASSWD: /restart-apache
Run Code Online (Sandbox Code Playgroud)
我知道 env_reset 不应该被禁用,但我不知道如何使用它来获得 root 访问权限!
$ file restart-apache
restart-apache: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, BuildID[sha1]=1b1a4ab278b2d1be83e8b14adfc358cfd277d655, for GNU/Linux 3.2.0, with debug_info, not stripped
Run Code Online (Sandbox Code Playgroud)
从 sudoers 手册页:
但是,如果该
env_reset选项被禁用,则任何没有被env_check和env_delete选项明确拒绝的变量都将从调用过程中继承。
因此,您可以将任意环境变量插入到启动的进程中。
您没有显示程序/restart-apache是什么类型,但如果恰好是一个 shell 脚本,这应该很容易。你能想到会影响它做什么的任何环境变量吗?当 shell 脚本运行几乎任何命令时,究竟会发生什么?它在哪里找到它?
好吧,事实证明我没有走运,而是一个实际编译的程序,所以它可能不会通过PATH. 它仍然可能,但很难指望这一点。
来自的输出file看起来可能会被截断:我从中得到的输出file /bin/ls是这样的(拆分为多行):
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
for GNU/Linux 2.6.32, BuildID[sha1]=3c233e12c466a83aa9b2094b07dbfaa5bd10eccd,
stripped
Run Code Online (Sandbox Code Playgroud)
(问题的输出中缺少解释器的完整路径。)
如果您的程序使用ld-linux-x86-64.so.2,就像所有“正常”动态可执行文件一样,我们可以开始查看运行此类程序时实际发生的情况。例如从这里:什么是/lib64/ld-linux-x86-64.so.2,为什么它可以用来执行文件?.
剧透:程序本身并不是最先运行的。
我们还可以找到动态链接器的手册页。该手册页列出了一些有趣的环境变量,它们会影响程序在启动时的设置方式,名称类似于LD_*. 您可能需要进行一些编码才能让它按照您的意愿行事。
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |