将web-ssrfme.zip解压缩在Ubuntu下
Docker-compose up -d
更新后的镜像重新启动容器
可以看到已经拉取成功ssrfme镜像
我们使用端口访问文件,可以看到有一个过滤条件,它限制了file,dict协议,127.0.0.1和localhost 也不能用,其实就是不想你探测内网端口,也不能读取内网服务文件。
但是!它可以通过phpinfo了条件
给info随便赋一个值,出来了php界面,可以观察到hostname主机和端口,而172.21.0.3是可以绕过127.0.0.1这个条件,我们可以在这个地址上测试,不断的改变端口值,端口不一样,出来的值也会有所区别
当端口为6379的时候,没有任何区别
但是一直这样试很费时间,可以使用burpsuite去检测端口
使用$$检测的端口地方
设置检测端口1-1000
只开放了一个80端口,也没有数据库,如果按172.21.0.3路径一直找端口,肯定是不行的
所以可以想一想,可能有时候会不只开了一个服务器
我们可以扫附近可能的服务器
0.3和0.4都访问没有什么变化
只有0.2可以,所以可以把关注点放在0.2的服务器,然后使用buresuite继续抓包
可以发现开放了6379和80端口
端口发现了,现在要想可能存放的物理地方,一般会考虑会在/var/www/html/
因为有的人懒,习惯放在默认的路径
发现upload有可执行权限,可以通过这个目录去访问。
但是在真实比赛中,很难知道文件名,可以使用字典去试
写一个txt文档,试可能有的情况
然后加载在路径下,判断长度是否一致,如果一致,说明就有这个文件
获取到shell后,传递到路径里
很快就结束了,说明一次解码是不成功的
再进行二次编码
再执行过程中,创建了一个shell.php
读取flag
flag出来了