MENU

DC-2靶机摸索

February 16, 2021 • Read: 82 • 靶机阅读设置

DC-2靶机摸索

地址

信息收集

  1. 首先用nmap获得IP地址
    nmap
  2. 对该IP的所有端口进行扫描,发现80和7744端口
    port
  3. 尝试访问该IP192.168.151.135,发现会自动跳转到dc-2这个域名
    host
  4. 没办法,只能在hosts文件中添加对应的域名
    hosts
  5. 重新打开网页,发现可以正常解析
    80web
  6. 根据我自己的建站经验,发现是wordpressCMS的默认主题,所以该靶机应该是要从该CMS入手,浏览器探测插件也探测到了对应的CMS
    cms
  7. 网站页面上有个flag的标签,点进去让人用cewl命令生成字典然后登录,于是用kali中的cewl生成字典
    cewl
  8. 先用wvs扫一遍,发现存在目录泄露以及wordpress低版本
    wvs
  9. 根据自己建站的常识,wp-admin目录即为wordpress登录页面,访问dc-2/wp-admin后会跳转到dc-2/wp-login.php
    login
  10. 在登录页面尝试使用admin\admin登录,提示账户admin的密码错误,好家伙,直接登录信息性提示,这不用刚才cewl得到的字典跑一下密码,竟然没跑出来!!!
    password
  11. 虽然没有密码,但是存在登录信息性提示,所以可以跑一下用户名,除了admin账户外,还发现了jerry账户
    username
  12. jerry账户用刚才的密码字典爆破,发现密码adipiscing
    password_jerry
  13. 使用jerry/adipiscing账户密码登录,在文章发布页面发现flag2,提示需要从其他地方进入
    flag2
    flag2_1
  14. 突然想起来kali中有个wpscan可以试试
    wpscan
  15. 用wpscan扫出来三个用户,除了上面扫出来的adminjerry,还扫出来 了tom
    find_tom
  16. 在登录页面对tom进行爆破,发现tom的密码parturient
    tom_password
  17. 使用tom/parturient登录成功,除了没有文章发布页面之外,没发现什么和jerry登录有区别的地方
    tom_login
  18. 根据nmap的扫描结果,还可以知道7744端口是SSH,尝试用超级弱口令爆破一波,但是没用,没发现默认密码
    ssh
  19. 毫无思路,凉凉
  20. 摸了两天后又重新开始搞,尝试用爆破的密码去SSH登录,该系统的SSH在7744端口,所以要使用-p设置一下端口,通过使用暴力破解的密码,发现使用jerry/adipiscing提示权限不足,但是tom/parturient可以SSH登录成功,总算是到了提权的步骤了
    ssh_login
  21. 题外话:曾经我在工作中遇到过使用默认密码或者复杂度不够高的密码,而且这类密码却是相当常见的,DC-2这个靶机虽然用了很难猜的密码,但是我们还是可以看到应用软件的密码和系统的密码有相关性,这在实际系统中是很少见的,但也是不可忽视的一种情况,除非是自建机房,通常情况下的生产环境中系统密码是由系统运维管理,而应用密码是由应用运维管理,所以很少会出现两者密码相关性很强。

提权

  1. 通过tom\parturient该密码登录成功后执行ls发现flag3.txt的文件
    ls
  2. 访问flag3.txt文件时,发现没有cat命令,尝试了其他查看文件内容的命令后,发现只有vi可以访问成功,里面只有一句话Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.翻译过来就是《猫和老鼠》中的一句话
    viflag
  3. 因为当前目录下有一个usr目录,所以向使用命令cd进去查看,发现同样提示不存在命令,这就很奇怪了,通常情况下cd命令是内置到Linux中的,如果无法使用该命令,那么就没有办法切换目录。
    cdusr
  4. cd命令总会被写入环境变量,所以先看一下当前用户的环境变量,使用ls $PATH查看所有环境变量发现只有4个命令可以使用,分别是lesslsscpvi。使用echo $PATH命令发现环境变量只包含了/home/tom/usr/bin
    lspath
    echopath
  5. Linux的环境变量一般包含/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin,所以应该先把这些目录写到环境变量里,执行命令export PATH=$PATH:/usr/local/sbin提示rbash的环境变量是只读属性,无法写入其他环境变量
    exportpath
  6. 因为rbash这个命令解释器的环境变量是只读属性,所以需要更换命令解释器
  7. 通过搜索引擎的检索,发现一篇讲rbash绕过技巧的文章,仔细阅读该文章后,经过尝试,选择使用在vi中执行set shell来绕过rbash,首先在vi中执行set shell=/bin/sh,然后执行shell即可绕过rbash
    setshell
    shell
    shell1
  8. 在新的shell中执行/bin/bash即可打开以bash为解释器的shell
    binbash
    binbash1
  9. 执行命令export -p可以发现现在PATH路径已经不是只读了
    path_rx
  10. 执行export PATH=PATH:/bin:/sbin:/usr/bin:/usr/sbin添加环境变量
    path_export
  11. 终于可以使用常用的Linux命令了,随便看看,发现/home/jerry,里面还有一个flag4.txt,使用cat flag4.txt查看其内容为:

    Good to see that you've made it this far - but you're not home yet. 
    You still need to get the final flag (the only flag that really counts!!!).  
    No hints here - you're on your own now.  :-)
    Go on - git outta here!!!!

cd_jerry
cat_flag4

  1. flag4中出现了一个单词git,猜测提权可能和git有关,在搜索引擎上搜索git提权发现文章,看了一下是可以提权的,通过使用参数-p可以提权,因为该参数调用系统命令more来分页展示git信息,所以可以使用git提权,但是尝试了git提权后,发现还是提示rbash权限问题
    git_rbash
  2. 突然想起来之前jerry这个账户也可以登录SSH,但是权限有问题,不知道tom账户能不能切换过去,尝试了一下,果然可以
    sujerry
  3. 但是,测试了一下git命令还是无法提权,实在是想不到其他办法了,看了一下别人的过程,发现使用sudo -l命令可以查看到git命令是可以用sudo执行的,那这就简单了。
    git_root
  4. 我直接一个sudo -l,可以看到jerry用户可以用sudo执行git命令
    root_git
  5. 执行sudo git -p help,然后再more命令中执行!/bin/bash,即可提权成功
    whoami
  6. 切换到root目录下,即可看到最后的flag
    root
Last Modified: August 16, 2021
Archives QR Code Tip
QR Code for this page
Tipping QR Code