1.将web-ssrfme.zip解压缩在Ubuntu下
Docker-compose up -d
更新后的镜像重新启动容器
2.拉取成功ssrfme镜像
3.使用端口访问文件,
可以看到有一个过滤条件,它限制了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路径一直找端口,肯定是不行的
所以可以想一想,可能有时候会不只开了一个服务器
4.扫描附近可能的服务器。
0.3和0.4都访问没有什么变化
只有0.2可以,所以可以把关注点放在0.2的服务器,
5.使用buresuite继续抓包
这时发现开放了6379和80端口
6.猜想它可能存在得物理
位置端口发现了,现在要想可能存放的物理地方,一般会考虑会在/var/www/html/
发现upload有可执行权限,可以通过这个目录去访问。
但是在真实比赛中,很难知道文件名,可以使用字典去试
然后加载在路径下,判断长度是否一致,如果一致,说明就有这个文件
获取到shell后,传递到路径里
7.进行多次解码
再进行二次编码
再执行过程中,创建了一个shell.php
8.读取flag
此时flag出来了