-
服务器请求伪造
-
原理简述
- A通过指使B对C进行攻击
- A无法直接访问C;B可以直接访问C;B又很听A的话
-
漏洞成因
- 服务器可以获取另一台服务器应用的数据;并且对访问的地址没有过滤和限制
- 简单来说就是一台服务器拥有访问其他任意IP资源的权利
-
判断点
- 一个网站通过url就可以访问或者下载其他网站的资源
- url获取网页文本;加载url获取图片下载;识别url获取资源等
- 分享、图片加载、翻译网站、
-
-
PHP中可能存在ssrf漏洞的函数
- file_get_content()
- 把文件读到一个字符串中
- fsockopen()
- fopen()
- readfile()
- curl()
- curl_exec()
- 执行一个curl会话
- curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
- file_get_content()
-
伪协议
-
file:// 获取文件内容
- /etc/passwd 用户信息
- /etc/hosts IP地址
- /proc/net/arp 显示arp缓存表(探查主机)
- /proc/net/fib_trie 路由表信息
-
dict:// 字典扫描端口信息
- dict://192.168.1.5:80/info
-
ftp:// 扫描端口;很慢
- ftp://192.168.1.5:80
-
http:// 目录扫描
- 通过bp抓包,字典爆破文件名
-
gopher://
- 默认访问70端口
- web访问时需要改成80端口
- 第一个字符默认不识别;需要填充位_(随便设一个填充字符就行,主要用于区别)
- 该协议可以指定url通过GET请求或POST请求访问数据
-
GET数据请求
- gopher://192.168.232.125:80/_GET%20name.php%3fname=dabai%20HTTP/1.1%0d%0AHost:%20192.168.232.125%0d%0A
- 以上示例是直接在浏览器中访问的poc
- 如果通过抓包进行修改的话需要对后面的数据进行两次url编码
- 因为要经过ssrf服务器和目标对象两层url解码
- %20 空格
- %3f 问号
- %0d%0A 换行符
- 发送GET请求需要保留头部信息
- 路径:GET /name.php?name=dabai HTTP/1.1
- 主机地址:Host: 192.168.232.125
- 最后记得加上换行符%0d%0A;因为数据内容和头部之间有空白行
- gopher://192.168.232.125:80/_GET%20name.php%3fname=dabai%20HTTP/1.1%0d%0AHost:%20192.168.232.125%0d%0A
-
POST数据请求
- gopher://192.168.232.125:80/_+下面url编码后的内容
- 具体操作和GET请求一样;只是保留数据不同
- 需要保留的字段
- POST /name.php HTTP/1.1
- Host: 192.168.232.125
- Content-Type: application/json; charset=utf-8
- 类型具体需要从bp抓包中看一下;这个不固定
- Content-Length: 123
- 这个数据长度需要和下面内容匹配
- 空白行:%0d%0A
- name=dabai
-
-
ssrf绕过的方法
- (1)@ http://abc.com@127.0.0.1
- (2)添加端口号 http://127.0.0.1:8080
- (3)短地址 https://0x9.me/cuGfD
- (4)可以指向任意ip的域名 xip.io
- (5)ip地址转换成进制来访问 192.168.0.1=3232235521(十进制)
- (6)非HTTP协议
- (7)DNS Rebinding
SSRF笔记整理
最新推荐文章于 2024-07-22 16:24:23 发布