13.SSRF

服务端请求伪造漏洞
1.SSRF概述
2.SSRF漏洞的挖掘
3.SSRF漏洞挖掘
4.SSRF漏洞防御

1.SSRF概述

SSRF(Server-Side Request Forgery)服务端请求伪造,是一种由攻击者构造请求,由服务器端发起请求的安全漏洞,本质上是属于信息泄露的漏洞。

SSRF漏洞原理:很多WEB应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,WEb应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意利用,可以利用存在缺陷的WEB应用作为代理攻击远程和本地的服务器。一般情况下,SSRF攻击的目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息。(正是因为它是由服务端发起的请求,所以它能够请求到它相连而与外网隔离的内部系统)SSRF形成的原因大多是因为由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定的URL地址获取网页文本内容,加载指定地址的图片,下载等等。

SSRF的主要攻击方式如下:
攻击者想要访问主机B上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机B,而主机A存在SSRF漏洞,这时攻击者可以借助主机A来发起SSRF攻击,通过主机A向主机B发起请求,从而获取主机B的一些信息。
示意图
1.利用file协议读取本地文件
2.对服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
3.攻击运行在内网或本地的应用程序。
4.对内网web应用进行指纹识别,识别企业内部的资产信息。
5.攻击者对外网的web应用,主要是使用HTTP GET请求就可以实现的攻击。

2.SSRF漏洞的挖掘

1.通过分享功能:通过URL地址分享网页内容,在早期分享应用中,为了更好的提供用户体验,WEB应用在分享功能中,通常会获取目标URL地址网页内容中的<title></title>标签或者<meta name="description" content=""/>标签中的文本内容作为显示以提供更好的用户体验。例如:人人网分享功能中:
http://widget.renren.com/*?resourceURL=https://www.nsfocus.com
通过目标URL地址获取了title标签和相关的文本内容。而如果此功能没有对目标地址的范围做过滤与限制则就会存在SSRF漏洞。
2.转码服务:通过URL地址加载或者下载图片,图片加载远程图片地址此功能用到的地方很多,但大多数比较隐匿,比如在有些公司中的加载自家图片的服务器上的图片用于展示。
开发者为了更好的用户体验通常对图片进行微小调整例如图片水印,压缩等,所以就可能存在SSRF漏洞。
3.在线翻译:通过URL地址翻译对应的文本内容。提供此功能的国内有百度,有道等。
4.图片,文章的收藏功能:此处的图片,文章收藏中的文章就类似于分享功能中获取URL地址中的title以及文本内容作为显示,目的还是为了更好的用户体验,而收藏图片就类似于图片加载.
5.未公开的api实现以及其他调用URL的功能:此处类似的功能有360提供的网站评分,以及有的网站通过api获取远程地址xml文件来加载内容。

如果看到了存在URL类似的参数的话,就可以尝试是否存在SSRF漏洞,以下是常见的URL中的关键字:
share
wap
url
src
link
source
target
u
3g
display

3.SSRF的漏洞利用

测试目标网站支持的伪协议:
现在服务器上有一个ssrf.php的页面,该页面的功能是获取URL参数,然后将URL内容显示到网页上面。

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);

程序获取url参数,通过curl_init()初始化curl组件之后,将参数URL带入
curl_setopt($ch,CURLOPT_URL,$url),然后调用curl_exec请求该URL,由于服务端会将bannner信息返回给客户端,所以可根据banner判断主是否存在某些服务。

Banner信息,欢迎语,在banner信息中可以得到软件开发商,软件名称、版本、服务类型等信息,通过这些信息可以使用某些工具直接去使用相对应的exp去攻击。

举例:http://127.0.0.1/ssrf.php?url=http://127.0.0.1/test.php
这将会使test.php页面显示
如果将后面的参数修改为:https://www.baidu.com页面就会显示百度的页面
于是可以用这个将URL参数换成内网的地址,则会泄露内网的信息。将URL换成;
file://的形式,就可以读取本地文件,这和文件包含漏洞很类似,这将使我们可以读取到服务器的host文件的信息:
http://127.0.0.1/ssrf.php?url=file:///C:Windows/System32/drivers/etc/hosts

4.SSRF的防御

1.限制请求的端口只能为web端口,只允许访问http和https的请求(禁止掉file协议)

2.限制不能访问的内网ip,以防止对内网进行攻击

3.屏蔽返回的详细信息

14.越权访问漏洞

逻辑访问-越权访问漏洞
1.越权漏洞概述
2.越权漏洞的挖掘
3.越权漏洞的修复

1.越权漏洞概述

越权漏洞是Web应用程序中一种常见的安全漏洞,该漏洞是指应用在检查授权时候存在纰漏,使得攻击者在获得低权限用户账号之后,利用一些方式绕过检查(比如说修改数据包的值或者直接访问其他用户相应页面的链接),访问或者操作其他用户或者更高权限用户才能访问到的页面或者数据。

越权分为:水平越权和垂直越权
水平越权:指的是攻击者越权访问到了一个和他拥有相同权限用户的资源
垂直越权:指的是一个低级用户访问了一个高级用户才能访问的资源

2.越权漏洞的挖掘

在实际的代码安全审查中,这类漏洞往往是很难通过工具进行自动化检测,因为必须通过人工判断,人工判断必须先分析当前网站处理业务的逻辑,通过拦截数据包进行业务逻辑判断,判断数据包中的各个参数的意义。

1.请求中不存在参数,只用cookie进行身份验证,不可越权。
2.请求中存在参数,并且参数的某些值可能是辨别信息的唯一值(employeeID departmentID ID)等
则可能存在越权漏洞。

检查水平越权

1.打开两个浏览器就,分别用普通用户登录。
2.查看每个页面的链接,抓包分析其参数的意义,找到与用户名有关的参数,修改成其他用户,重放,看能否越权,如果能访问,则存在水平越权。

检测垂直越权

1.打开浏览器,一个浏览器用管理员身份登录,一个浏览器用普通用户身份进行登录。
2.仔细对比两个浏览器之间,哪些页面是管理员独有的,然后复制链接到普通用户浏览器打开,或者抓包分析包的结构然后篡改重放,看能否访问,如果可以访问,那么则存在垂直越权。

这上面的检测都是我们在这个网站注册了用户,那么当我们在该网站上没有注册用户,即无法登录后台,那该如何?

我们可以在网站登录框处检查元素,查看网站的JavaSrcipt代码,查看JS代码中判断登录的逻辑处是否会有开发人员写下的注释信息等。比如该网站就是一个越权漏洞,该js代码处将用户成功登录后跳转的页面的注释写了出来,我们直接访问该链接,并且该页面在后端也没有进行权限检测,于是乎就成功登陆了后台。
图片转载于网络

3.越权漏洞的修复

对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作,建议在服务端对请求的数据和当前用户身份做校验检查。先判断当前用户的身份,然后判断其是否对该页面有操作权限!

流程描述:在服务器接收到用户发送的页面访问请求时,根据预设的识别策略,从用户的页面访问请求中提取该用户对应的用户唯一标识信息,同时提取所述页面访问请求对应的应答页面中的表单及该表单中不可修改参数,将所述表单及不可修改参数与所述用户唯一标识信息绑定后记录到参数列表中;检测到用户提交请求页面的表单时,将所述请求页面的表单及不可修改参数与该用户对应的所述参数列表中记录的表单及不可修改参数进行比对,控制该用户的访问。

总结:

1.服务端必须对每个页面链接进行权限判断
2.用户登录后,服务端不应该再以客户端提交的用户信息作为依据,而应该以会话中服务端保存的已登录的用户信息为准。
3.页面提交的资源标志与已经登录的用户进行匹配比对,然后判断其对当前链接是否有权限。
4.必须在服务端对每个URL进行鉴权,而不能仅仅通过客户端的菜单屏蔽或者按钮Disable来限制。

session.setAttribute("admin",username);

if((String)session.getAttribute("username")!=admin){

(response.sendRedirect("error.jsp"));

15.目录浏览(目录遍历)漏洞和任意文件读取/下载漏洞

目录遍历/任意文件下载
1.目录遍历概述
2.任意文件读取/下载概述
3.任意文件读取漏洞getshell

1.目录浏览/目录遍历漏洞

目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件,配置文件等。

目录浏览漏洞的探测:可以利用web漏洞扫描器对web应用进行探测,也可以通过搜索,网站标题包含:index of等关键词进行访问。

目录浏览漏洞的危害:攻击者通过访问网站某一个目录时,该目录没有默认首页文件或者没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者;攻击者可能通过浏览目录结构,访问到一些隐秘文件(如phpinfo文件,服务器探针文件,网站管理员后台访问地址,数据库连接文件等)

目录浏览漏洞的预防

1.IIS中关闭目录浏览器功能:在IIS的网站属性中,关掉"目录浏览"选项,重启IIS
2.Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找"Options Indexes FollowSymLinks",修改为"Options-Indexes"重启Apache。
3.Nginx:中默认不会开启目录浏览功能,若开启了,可以编辑nginx.conf文件,删除如下两行:

autoindex on
autoindex_exact_size on

重启Nginx。

2.任意文件读取/下载漏洞

任意文件读取/下载漏洞比目录浏览漏洞的危害更大,它不仅会泄露网站的目录结构,而且攻击者可以直接获得网站文件的内容,攻击者可以因此获取到更多的机密文件,比如配置文件:

/etc/passwd
/root/.bash_history

2.1任意文件读取/下载漏洞的挖掘:

1.通过web漏洞扫描工具对网站实施扫描可能发现任意文件读取/下载漏洞,发送一系列"../"字符来遍历高层目录,并且尝试找到系统的配置文件或者系统文件中存在的敏感文件。
2.也可以通过判断网站语言,并根据其url中部分提供的参数,进行构造路径信息,如收集到网站中间件版本为:Apache,则想办法构造../../../WEB—INF/web.xml等,然后查看其是否可以被读取或者下载出来。
3.有些WAF会过滤../可以构造:

/.%252e/.%252e/.%252e/

%25对应的是%,%2e对应的是.所以%252e/对应的是../

2.2任意文件读取/下载漏洞的危害

下载服务器任意文件,如脚本代码,服务以及系统配置文件等,然后进行代码审计,得到更多的可用漏洞。

index.php?filename=../../../../../../etc/passwd 

如上操作

Windows:
   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:

   /etc/passwd                  #查看用户文件

   /etc/shadow                  #查看密码文件,如果能读取该文件说明是root权限

   /etc/httpd/conf/httpd.conf   #查看apache的配置文件

   /root/.bash_history          #查看历史命令

   /root/.mysql_history         #mysql历史命令记录文件

   /var/lib/mlocate/mlocate.db  #本地所有文件信息

   /etc/ssh/sshd_config         #ssh配置文件,如果对外开放可看到端口

   /proc/self/fd/fd[0-9]*(文件标识符)

   /root/.ssh/authorized_keys                

   /root/.ssh/id_ras.keystore

   /root/.ssh/known_hosts

    /etc/httpd/conf/httpd.conf

    /etc/apache2/httpd.conf

    /etc/apache2/apache2.conf

    /etc/nginx/nginx.conf

    /usr/local/nginx/conf/nginx.conf

    /usr/local/etc/nginx/nginx.conf

针对Linux系统任意文件下载的几种思路:

下载源代码审计
数据库备份
信息收集
中间件

2.3任意文件读取/下载漏洞的预防

1.净化数据:对用户传过来的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2.web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,使其即使越权也在访问目录之内。www目录就是一个chroot应用。由chroot创造出的那个根目录,叫做“chroot监狱”(所谓"监狱"就是指通过chroot机制来更改。某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全,详细具体chroot的用法,可参考http://blog.csdn.net/frozen_fish/article/details/2244870
3.任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
4.要下载的文件地址保存至数据库中。
5.文件路径保存至数据库,让用户提交文件对应ID下载文件。
6.用户下载文件之前需要进行权限判断。
7.文件放在web无法直接访问的目录下。
8.不允许提供目录遍历服务。
9.公开文件可放置在web应用程序下载目录中通过链接进行下载。

3.利用任意文件读取漏洞getshell

想直接利用任意文件读取来getshell还是比较难的。如果目标网站是Tomcat的话,可以利用文件读取漏洞来读取Tomcat的tomcat-users.xml配置文件,然后得到Tomcat管理页面的账号密码,登录,上传war包Getshell。

然而,如何能知道Tomcat的tomcat-users.xml配置文件的绝对路径呢?这确实很难找。这里有一个思路就是,我们可以通过读取 .bash_history文件来查看管理员的历史命令,来得到Tomcat的安装路径,从而得知tomcat-users.xml的绝对路径。

最后修改:2022 年 03 月 22 日 05 : 55 PM
如果觉得这篇文章不错,不妨赏我碎银几两。