vuln_bilubox(8)

涉及知识点列表:

代码审计

SQL转义注入

文件包含解析执行图片马

内核提权

php配置文件

ssh和数据库密码碰撞

一些命令

(一些比较生疏的命令,后面可能会用到,列在此处以供翻阅)

sudo curl -X POST --data "file=xxxx" http:<ip>/xxx
locate php-reverse-shell
cat /etc/crontab
sudo php -S 0:80

心得

这台靶机的漏洞利用环环相扣,当一个利用走不通时,可以暂且放下,用后面得到的信息再尝试去解开
这台靶机的代码审计,SQL注入,参数使用,文件包含,任意文件读取,让我非常深刻的理解了php文件的一些原理和代码逻辑,非常有价值
反弹shell走不通而木马已经可以成功利用时,要考虑用编码来解决问题
加深对burpsuite的使用理解

in.php

无法上传

首先这些目录一看都不像正常的做安全机制很好的情况下对外暴露出来的服务

我们隐约可以看到它的开发习惯

当有文件包含的嫌疑时,get和post都需要尝试

-X:指定http方法

这里可知test其实是php文件test和index在同一级,所以文件包含时指定路径要在./,即当前目录下(同理,刚刚扫出来的同级目录文件,都可以用这种方式包含

这里应该不是文件包含漏洞,确切来说是文件读取和下载漏洞,毕竟文件包含中php文件不处理会直接执行,同时,我们之前也看到,有一些php文件在url中访问没有任何回显,这就说明它大概是在访问时直接执行了

我们看一看之前在web上没有回显的php文件

对panel.php详细分析:

信息1:

引用了c.php和head2.php两个头文件

信息2:

有文件包含,且并没有过滤,只要在逻辑循环中能够走到最下面那个else循环里面,就可以实现一些事

这里有一个mysqli_connect函数,画个图补一下基础:

同时我们试试在Index.php中能不能用这个用户名和密码登录

居然登录不进去,那要记得ssh也有可能是这个用户名,甚至密码

回到index.php看它的sql语句是怎么处理的

sql转义注入

这个题应该是用了两层转义

第一次,是PHP语句,这个语句写了一个SQL语句构成的字符串,由于这是一个字符串,里面有用到了',所以需要转义,因此这里的'都改写成',那我们翻译一下这层转义,把它转化成正常的SQL语句有助于理解

' <font style="color:#117CEE;">select * from auth where pass='pass' and uname='uname'</font> '

加上代码中过滤掉了'的输入这个信息,这样一来我们的思路就是把pass的第二个单引号转义掉,构造成:

select * from auth where pass='pass and uname=' or 1=1-- -'的形式

所以pass处输入\转义,过滤掉这个',形成上述语句

pass: \

uname: or 1=1-- - 成功利用


登录之后是这样一个界面

show users 可以显示用户的id,地址和图片,可以增加用户

add.php没办法执行的原因大概就是因为它是被包含在这里面的

我们看到可以文件上传

这里show里面有图片,我们就用它的(已经被上传的图片的大小和显示肯定是没有问题的(如果是自己本地的图片包含很容易500,这应该是图片大小的问题)

直接打开下载好的图片文件,底部写入木马,为反弹shell做准备

可以看到上传成功,

这里建议上传之前修改一下文件名,这样到了上传目录看的更直观也方便排查错误

我们之前已经扫到文件上传目录了,这里直接访问

直接点击访问看不出来任何东西,所以需要其他某一个方式去连它

这里想到之前可以文件上传的panel,如果能执行panel的php权限,在图像里的PHP信息就可以被连起来

文件包含解析执行图片马中PHP代码

这里会详细解析介绍这个漏洞点·

$choice=str_replace('./','',$_POST['load']);

$_POST['load']:

从用户提交的表单数据中获取load字段的值(POST请求方式)

然后查找字符串中的./,删除掉

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']);
        }

}

也就是说,包含的文件名不要是show和add,就会进最后一个else语句中,也就是一个自由传参的文件包含

文件上传漏洞在绕过内容检测的时候,会制作图片马上传,但是图片马在上传之后,不能被解析。

如果网站同时存在文件包含漏洞,利用文件包含无视后缀名,只要被包含的文件内容符合php语法规范,任何扩展名都可以被php解析的特点来解析上传的图片马

那这里的思路就很明晰了,load的POST传参输入值,只要不是show和add,这里我们使用burpsuite构造,输入图片马的路径

然后由于木马用的get传参,在URL上通过自己构造的参数输入一些系统命令进行尝试

tip:这里打靶可以直接用burpsuite自带的浏览器,之前一直切换代理挺不方便

根据源码当我们提交post continue的时候触发文件包含,我们按照源码这个步骤拦截

这里show,add和upload目录同级,先直接填吧

看上去是利用成功了

现在我们就可以用反弹shell连接在本地的监听了

这里随便找个php-reverse-shell拿来用就好

在网上随便找了一个php-reverse-shell,发现无法成功利用,这个时候需要看看phpinfo里面都有哪些函数,考虑它做了哪些屏蔽

当拿不到反弹shell的时候,首先想是不是编码问题,因为php和http协议下面有很多流量,都是需要加密编码混淆的

这里尝试用URL编码

burpsuite提供了一个方便的路径,在repeator中右键,convert selection,对一些关键字符进行编码

成功拿到shell,如果拿不到,可以修改编码方式

burpsuite直接send时就应该能够拿到shell

提权

提升交互性:

sudo -l提示需要密码,但是我们是通过反弹shell进来的显然没有

这个时候可以考虑看看现有用户的文件

这里有一个phpmy,是我们爆破时没有见到的

如果我们当初爆出来了,就应该用任意文件读取读出数据库等文件信息

Config.inc.php是很多php应用自定义用来集中配置的文件

介绍根据:auto-wordlists,识别敏感文件列表,选择Linux,搜索phpmyadmin,可以找到配置文件的常用名

这是数据库密码,且用root连接

按照这个网站的开发习惯和规模推测ssh(ubuntu)的密码可能与数据库相同(密码碰撞思维)


回到主线

cat /etc/crontab:看是否有自动任务

没有,尝试内核提权

这里主机建立服务器

靶机接受脚本

注意靶机的接收路径最好在/tmp下,不然权限不够

posted @ 2025-04-09 22:58  Ex1st  阅读(28)  评论(0)    收藏  举报