XAZXAZ
- 关注
2022年5月20日星期五
环境:虚拟机nat模式下kali Linux(192.168.43.139)、DC-1靶机(192.168.43.142)、Windows 7 SP1(192.168.43.138)
范围确定
根据官网的靶机描述,这个靶机有5个flags
下载后导入VMware并启动,靶机界面如下
使用nmap扫描局域网
根据开放端口的信息(22、80、111)推测142是目标主机
访问80端口验证
信息搜集
使用nmap对目标进行详细扫描
得出目标的操作系统是Debian Linux,开放的端口有22、80、111、39016,web框架是drupal
使用dirsearch扫描(dirb能扫描很详细,但是太慢了)
使用droopescan扫描,好像也没有啥信息
发现漏洞
使用xray对目标进行被动漏洞扫描
需要在浏览使用代理
随意点击,发现一个漏洞应该是sql注入
和一个cve漏洞
和其它几个webscan漏洞
漏洞利用
先利用这个sql注入漏洞
Sqlmap跑一遍,但是没有发现注入点
网上搜索这个漏洞存在报错注入和堆叠注入,都尝试了,这里堆叠注入尝试update管理员密码
根据后面的步骤可知修改成功,但是没有登录成功
那么用第二个cve漏洞
使用msfconsole
搜索这个漏洞
使用对应的模块
需要设置的有目标IP(RHOSTS)
Run
Ls一下,发现flag1
查看flag发现提示
进入sites
进入default
查看settings.php,拿到flag2和数据库配置信息,flag2提示暴力破解密码不是唯一获取访问权限的方式
进入shell,进入数据库
但是没什么反应
使用python -c在命令行执行python代码,使用pty.spawn进入交互式shell
再进入数据库
查询库
这里面的表有很多张
先查看users表
直接select * 发现列太多
先查看列,重要数据应该是有6个
查看这6列数据,这密码看起来是使用php自带的password-hash加密,而且看这加密后的密码,说明之前使用sql堆叠注入成功修改owned的密码了
退出数据库,回到网站根目录
进行加密的文件是网站根目录下script/password-hash.sh
利用这个文件生成一个密码
拿到密码后给它插到数据库里
在win7上登录网站,登录次数多被锁了,应该是之前堆叠注入后反复登录导致的,,
换kali的火狐成功登录
点击左上角dashboard就发现flag3
Flag3提示的重点:PERMS FIND -exec
那么退出数据库,使用find查找flag4
读取flag4的内容,提示第5个flag在root家目录里
直接访问,显然是没有权限
权限提升
因为这网站的后端语言是php,所以尝试写php的一句话木马用passthru
查看shell1.php
在网站中访问shell1.php
没反应,这里需要使用base64编码然后解码
查看shell.php
在网站中访问shell.php
使用蚁剑连接,因为写的函数passthru,所以连接类型需要CMDLINUX
进入虚拟终端
还是uid=33,所以直接在msfconsole的shell里面进行以下操作也行
使用find在/下查找具有root权限的文件
可知find有root权限,再利用find的-exec查看当前用户
使用-exec提权,但是始终提不上去,推测是蚁剑的原因
换成msfconsole得到的shell
现场时/bin/bash,但是失败,再使用/bin/sh,成功获取root
再尝试用bash,但是又会掉回去
尝试添加用户,失败
获取最终flag
进入root家目录拿flag
拿到root密码
- 使用hashcat进行本地破解
先把密码放入一个文件
Rockyou字典默认不是utf-8编码,需要手动修改,不然如果用python就会报错,有1千4百万个密码,应该够了
--force表示无视错误,-m 1800对应密码中第一个$后的6,-a 0 表示使用字典,/opt/pass.txt 表示密码文件的位置,/usr/share/wordlists/rockyou.txt 表示字典的位置
Kali爆不出来不知为何
- 换到Windows
Windows也失败,就无语
- 用python爆,太慢
import crypt
from tqdm import tqdm
#获取密码所在的行
content = "root:$6$HVreIv8NIpMUE4cm$/sVA7TrbZpjkDzOClBrm7WZjS.nJXstfppr2e/J1neldcNgRCycBr4ax6375L7vckiRmQkR1nHy4dybwZMnB71::0:99999:7:::"
#获取密码
getPass = content.split(":")[1]
#分解盐值和hash
passSplit = getPass.split("$")
#获取hash
passHash = passSplit[3]
#获取盐值
passSalt = f"${passSplit[1]}${passSplit[2]}"
#获取密码字典
wordbook = "/home/kali/tools/wordList/top_password.txt"
with open(wordbook,"r") as file:
#统计行数
totalRows = 0
for j in file:
totalRows += 1
#文件遍历后光标需要重置光标位置
file.seek(0,0)
#print(totalRows)
flag = False
count = 0
for i in tqdm(file,desc='执行进度',unit_scale=True,total=1443):#遍历密码字典
i = i.strip()#修剪换行符
tempPass = crypt.crypt(i,passSalt)#使用盐值生成临时密码
if tempPass == getPass:#对比密码
print("密码是:{}".format(i))
flag = True
break
count += 1
if flag == False:
print("在{}个密码中没有找到密码".format(count))
#print (i)
#test = crypt.crypt("3236",passSalt)
#print(test)
- 用John,还是失败
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
