第一步
登录靶场地址,发现迎面而来也是一个熟悉的登陆界面。
一般有这种登录界面的,我们的首要目标都是先注册一个账号试试看。
然后登录我们的账号
发现出题人留了提醒:
所以我们的办法肯定是想办法登录admin账号,根据出题人的提示是通过重置密码,所以我们先尝试修改自己的密码,来看一下抓包情况
抓到这样一个包
当放过这个包,注册的邮箱就会收到一封验证码邮件。
然后填入验证码
选择重设密码
可以抓到这样的验证包,然后浏览器会自动弹出已经把密码设置位asd123.
这里有两个解法,第一个是使用爆破,我们已经知道当发送验证码的时候。后台会生成一个随机六位数密码发给我们的注册邮箱,然后我们拿着这个邮箱,点击重设密码他就会设置默认新的密码asd123.
所以我们可以用bp的爆破功能,去爆破随机验证码。然后不断发送带着验证码的包,去重置密码。
到最后爆破出来一个包,就可以使用默认密码asd123登录admin账号了
还有第二种方法就是逻辑漏洞。
我们只需要把在发送验证码包的时候,把这个邮箱填成自己的邮箱,然后后台就会把言验证码乖乖发给我们的邮箱
这个漏洞在行业内被专业称为**idor**(不安全的直接对象引用)
然后我们就可以通过admin登录了!
第二步
登录后发现这样一个界面
既然他都说提交一个图片地址,那我们就输入一个图片地址把。
(hhhhhhh)
然后会发现显示出php的代码,但是可以看出它下载了我们的图片。
于是经过缜密的推理我们可以知道这就是传说中的ssrf漏洞
当我们尝试在图片下载地址的时候输入以下payload
1 | http://127.0.0.1/flag.php |
会看出我们确实可以满足请求来自本地的条件,但是要求我们必须用post方式提交1=1(http协议只能在后缀用?key=value利用get方式提交参数和值。)
不然就不会回显flag。这个时候我们就必须使用一个古老的协议来做这个题目。(用前朝的剑斩本朝的官),它就是-Gopher协议。
可以在文章中看到使用gopher协议发送http的数据,需要以下三个步骤:
并且如果拿来发送post请求,那么构造的http数据包里必须包含4个必要参数
所以我们构建一个这样的数据包
利用python,下面贴出用python3写的脚本
1 | exp="""POST /flag.php HTTP/1.1 |
来进行转换,于是得到经过转码得到以下字符串
1 | _POST%20/flag.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%203%0D%0A%0D%0A1%3D1%0D%0A |
然后在提交图片地址的那里填入payload:
1 | gopher://127.0.0.1:8081/_POST%20/flag.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%203%0D%0A%0D%0A1%3D1%0D%0A |
随后便可以得到flag
总结
这次靶场经历让菜鸡学习了gopher协议,并且对ssrf协议有了更深的了解,之前都是只知道这些各种各样的漏洞类型,现在经过不断的被打击,对这些漏洞有了更深的理解,以后有时间会重新好好温习一次owasp10,了解各种漏洞的成因,希望有新的感悟。