Apache 文件解析漏洞SSRF漏洞原理介绍及代码

Apache 文件解析漏洞 SSRF漏洞原理介绍及代码

1. Apache 环境简介

2. Apache 解析漏洞介绍

3. 解析漏洞利用演示

4.利用场景介绍

1. Apache 环境简介

​ Apache 和 PHP 采用 module 的方式结合(Apache2.2)

2. Apache解析漏洞介绍

​ Apache 认为一个文件夹可以拥有多个扩展名,哪怕没有文件名,也可以拥有多个扩展名。 Apache 认为应该从右边到左开始判断解析方法的。如果最右侧的拓展名为不可识别的,就继续向左判断,知道判断到文件名为止。

官方解释:http://httpd.apache.org/docs/current/mod/directive-dict.html

并不是 Apache 直接解析,而是 Apache 直接调用 PHP 进行解析。

3. 解析漏洞利用

​ 在站点跟目录下新建一个 1.php.xxxx 文件, xxxx文件后缀名为无法识别的后缀名。其中内容为 phpinfo();

		### 				4.利用场景介绍

​ 在 Web 程序中存在文件上传,但是有黑名单验证时,利用该解析漏洞可以上传对应的 Webshell 到目标服务器随后蚁剑连接

SSRF漏洞

1、SSRF 漏洞原理介绍

1.1、SSRF 漏洞定义

1.2、SSRF 漏洞原理

1.3、SSRF 漏洞代码分析

1.4、SSRF 漏洞利用

2、产生 SSRF 漏洞的代码

2.1、产生 SSRF 漏洞的 php 函数

2.2、file_get_contents

2.3、fsockpoen()

2.4、curl_exec()

1.1、SSRF 漏洞定义:

​ SSRF (服务器请求伪造)是一种构造请求,有服务端发起请求的安全漏洞。

1.2、SSRF 漏洞原理

​ SSRF 形成原因:服务端提供了从其他服务器获取数据的功能,但没有对内网目标地址做过滤与限制

​ 主要方式:

​ 1、 对外网、服务器所在内网、本地进行端口扫描,获取Banner信息

​ 2、测试运行在内网或本地的应用程序

​ 3、利用 file 协议读取本地文件等

1.3 SSRF 漏洞代码分析

​ 存在 SSRF 漏洞代码

<?php
		function curl($url){               				## curl函数用来发送请求 通过url来获取发送请求
				$ch=curl_init();					  ##利用curl库发送请求
				curl_setopt($ch,CURLOPT_URL,$url);	    ##利用参数设置一个url地址
				curl_setopt($ch,CURLOPT_HEADER,0);	    ## 将结果输出
				curl_exec($ch);						  ##执行对应的访问
				curl_close($ch);					  ##关闭创建的对象,释放对应的资源
		}
$url=$_GET["url"];									  ##通过GET函数,获取对应的目标地址
curl($url);											 ## 构造url进行内网访问
?>
1.4、SSRF漏洞利用

​ 利用 SSRF 进行文件读取,

url=file:///.....................................       #目录读取
2.1、产生 SSRF 漏洞的PHP函数

​ 很多 Web 应用都提供了从其他的服务器上获取数据的功能。使用用户指定的 URL ,Web 应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷 Web 应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务器请求伪造攻击(Sever-side Request Forgery)。

​ SSRF 攻击可能存在任何语言编写的应用,下将展示可能存在 SSRF 漏洞的函数

file_get_content()        fsockopen()      curl_exec()
2.2、file_get_contents

​ 使用 file_get_contents 函数从用户指定的 url 获取图片。然后把他用一个随机文件名保存在硬盘上,并展示给用户

<?php
if(isset($_POST['url']))					   #获取用户提交的 url
{ 
	$content=file_get_contents($_POST['url']);	#使用 file_get_contents 获取远程url内容,保存concent中
	$filename='./images/'.rand().';img1.jpg';	#使用filename新建.rand随机获取文件名保存在目录中
	file_put_contents($filename,$content);	    #将concent内容写入到filename中
	echo $_POST['url'];						  #测试输出 url
	$img="<img src=\"".$filename."\"/>";	    #使用img变量保存一个字符串,src设置文件类型
}
echo $img;									 #当前网页输出文件内容
?>
2.3、fsockopen()

​ 使用 fsockopen 函数实现获取用户指定 url 的数据(文件或者 html)。这个函数会使用 socket 跟服务器建立 tcp连接,传输原始数据。

<?php
function GetFile($host,$port,$link)                            #定义了 ip,端口,位置
{
$fp=fsockopen($host,inval($port),$errno,$errstr,30);		  #打开主机及对应端口,延时。
if(!$fp){
echo "$errstr (error number $errno) \n";					 #打开失败,连接失败超时
}else{
$out="GET $link HTTP/1.1\r\n";								#成功
$out.="Host:$host\r\n";
$out.="Connection:Close\r\n\r\n";
$out.="\r\n";											   #创建一个 HTTP 请求
fwrite($fp,$out);										   #写到fsockopen中
$contents='';											   #获取内容
while(!feof($fp)){										   #当feof为true时 读取完毕
$contents.=fgets($fp,1024);								    #通过 fgets 每次获取1024个数据拼接
}
fclose($fp);											   #关闭套接字
return $contents;										   #返回主体内容
}
?>
2.4、curl_exec()

​ 使用 curl 发送请求获取数据

<?php
if (isset($_POST['url']))						#获取用户提交的url
{
$link=$_POST['url'];						   #将提交内容存在link中
$curlobj=curl_init();						   #初始化curl 设置它对应的选项
curl_setopt($curlobj,CURLOPT_POST,0);			#不使用POST提交,使用GET提交
curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,TURE);
 											#TRUE将curl_exec()获取的信息以字符串返回,而不是直接输出
$result=curl_exec($curlobj);				   #接收返回的字符串
curl_close($curlobj);						  #关闭初始化的curl选项
$filename='./curled'.rand().'.txt';				
file_put_contents($filename,$result);			#将接收到的字符串,存储到上创建的文件内
echo $result;
}
?>

SSRF漏洞的利用 - 内网资源探测

1、SSRF 漏洞代码分析

2、实验环境搭建

3、利用 SSRF 进行内网资源访问

4、利用 SSRF 进行端口扫描

1、SSRF 漏洞代码分析

分析下列代码的 SSRF 漏洞:

<?php
	if (isset($_GET['url']))							#判断是否提交参数
	{
			$link=$_GET['url'];							#赋值给link
			$curlobj=curl_init($link);					
			curl_setopt($curlobj,CURLOPT_HEADER,0);			#设置curl选项
			curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,1);  #设置返回结果字符串
			$result=curl_exec($curlobj);					#返回result字符串
	}
?>

3.3、使用SSEF进行内网资源访问

​ 一般情况下将 Web 应用程序暴露在互联网可以通过 Web 浏览器进行访问。但是会将内网资源封闭起来,避免与外部接触。那么如果网站存在 SSRF 漏洞,利用 SSRF 进行内网资源访问。

对目标地址的302重定向,使用:
http://www.xxx.com/xxx.x?url=http://xxx.xxx.x.x/../../../
对相应内网进行访问
3.4、利用 SSRF 进行端口扫描

​ 提交对应参数 url 包含 IP 地址:端口号,测试端口状态。

http://xxx.x.x.x/xxxx/xxx.x?url=http://xxx.x.x.x:(端口号)
21号端口:文件传输协议 - 控制端口
22号端口:SSH (Secure Shell)- 远程登录协议
23号端口:Telnet 终端仿真协议 - 未加密文本通信
25号端口:SMTP (简单邮件传输协议)
80号端口:超文本传输协议 - 用于传输网页
443号端口:超文本传输安全协议 - 超文本传输协议 over TLS/SSL (加密传输)
445号端口:SMB文件共享
3306号端口:MySQL 数据库系统
3389号端口:远程桌面协议(RDP)

21号端口:文件传输协议 - 控制端口
22号端口:SSH (Secure Shell)- 远程登录协议
23号端口:Telnet 终端仿真协议 - 未加密文本通信
25号端口:SMTP (简单邮件传输协议)
80号端口:超文本传输协议 - 用于传输网页
443号端口:超文本传输安全协议 - 超文本传输协议 over TLS/SSL (加密传输)
445号端口:SMB文件共享
3306号端口:MySQL 数据库系统
3389号端口:远程桌面协议(RDP)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值