SSRF介绍
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由 服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的 内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔 离的内部系统)
开发需求:用户发表文章时插入链接,服务器请求链接内容获取title信息
实现结果:用户插入链接后,服务器对该链接发起请求并获取链接对应html内容title 标签部分,用户实现此功能时对应请求地址为 www.test.com/get_title.php?url=www.a.com
实现方式(关键步骤):
1.获取用户传递的url参数值
2.根据url的参数值发起http请求
3.获取页面中title标签内容并返回结果
预期的请求是从红色网站获取到的信息,但是这个红色部分没有做过滤和限制,我们可以任意的进行修改,然后访问到我们想访问到的东西,而不是网站正常业务逻辑想让我们看到的信息,这个时候,SSRF漏洞就诞生了
只要一个网页加载或读取了其他地址的内容,它就有可能导致SSRF的出现
SSRF可能出现的风险点
1.分享
2.转码
3.在线翻译
4.图片加载、下载
5.图片、文章收藏
6.未公开的API
URL中的关键字:
share
wap
url
link
src
souurce
target
u
3g
dispaly
sourceURL
imageURL
domain
../api
SSRF漏洞利用:
1.服务探测
2.协议
3.访问敏感数据
4.内网探测
C类:192.168.0.0-192.168.255.255
B类:172.16.0.0-172.31.255.255
A类:10.0.0.0-10.255.255.255
常见端口:
http 80
https 443
telnet 23
ftp 21
ssh 22
smtp 25
weblogic:
7001
tomcat:
8080
jboss:
8080
oralce:
1521
sqlserver:
1443
SSRF可以试试哪些协议:
(为什么要尝试这么多协议,是因为这个网站做防护的时候,可能屏蔽了某些协议,我们要试出来哪些协议没有做屏蔽)
ftp
dict
gopher
file
ladp
ssh
smb
http
https
file协议敏感文件读取:
file协议敏感文件读取:
winodws下:
C:\Windows\system.ini
C:\windows\system32\drivers\etc\hosts
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
Linux下:
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/redhat-release 系统版本
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/var/lib/mlocate/mlocate.db //全文件路径
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/porc/self/cmdline //当前进程的cmdline参数
/proc/sched_debug 配置文件可以看到当前运行的进程并可以获得对应进程的pid
/proc/pid/cmdline 则可以看到对应pid进程的完整命令行。
/proc/net/fib_trie 内网IP
/proc/self/environ 环境变量
/proc/self/loginuid 当前用户
防御方式:
1、禁用协议
2、限制请求端口
3、设置URL白名单
4、过滤返回信息
5、统一错误信息