[Web安全]SSRF介绍以及利用

SSRF

  • SSRF,Server-Side Request Forgery,服务端请求伪造,是一种
    由攻击者构造形成由服务器端发起请求的一个漏洞。一般情况下,
    SSRF攻击的目标是从外网无法访问的内部系统
  • 漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取
    数据的功能且没有对目标地址作过滤和限制。.

目的

  • 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
  • 攻击运行在内网或本地的应用程序(比如溢出)
  • 对内网WEB应用进行指纹识别,通过访问默认文件实现
  • 攻击内外网的web应用,主要是使用GET参数就可以实现的攻击(比如Struts2,sqli等)
  • 利用file协议读取本地文件等

何处可能存在SSRF漏洞

  • 能够对外发起网络请求的地方,就可能存在SSRF漏洞
  • 从远程服务器请求资源(Upload from URL,Import & Export RSS Feed)
  • 数据库内置功能(Oracle、 MongoDB、MSSQL、 Postgres、 CouchDB)
  • Webmail收取其他邮箱邮件(POP3、 IMAP、SMTP)
  • 文件处理、编码处理、属性信息处理(ffmpeg、 ImageMagic、 DOCX、 PDF、 XML)

后端代码详解

file_get_contents()

拿到POSTURL的参数以后输出给用户
< ?php
if (isset($_ POST['ur1'])) {
$content = file_ get_ contents($_ POST['ur1']);
echo $content;
}
?>
假如:
`url=http://ww.google.com/images/brandingoooglelog./2xgooglelog. color_ 272x92dp.png
它就会拿到这个url访问图片并返回到用户
`

fsockopen()

效果与上面那个异曲同工

< ?php
if(isset($_ POST[ host'])){
$host = $_ POST[ 'host' ];
$port = $_ POST[' port ' ];
$link = $_ POST[ 'link'];
GetFile($host, $port, $link);
}
function GetFile( shost, $port,$link) {
$fp = fsockopen( $host, intval($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";
fwrite($fp, $out);
$contents='' ;
while (!feof($fp)) {
$contents.= fgets($fp, 1024);
}
fclose($fp);
echo $contents;
}
?>
host=内网地址&port=端口&link=/phpMyAdmin/等等都可以构造


curl_exec()

<?php
if (isset($_ POST['cur1'])) {
	$link = $_ POST[' curl'];
	$curlobj = curl_ init();
	cur1_ setopt($curlobj, CURLOPT POST, 0);
	cu1_ setopt ($curlobjCURLOPT URL , $1ink);
	curl_ setopt ($curlobj, CURLOPT_ RETURNTRANSFER, 1); 
	$result =curl_ exec( $cur1obj);
	curl_ close($curlobj);
	echo $result;
?>

如何食用

协议利用

  • Dict协议: dict://url/helo:dict
  • Gopher协议: gopher://url:80/gopher
  • File协议: file:///你要得到东西的绝对路径

绕过姿势

  1. 更改IP地址写法
    比如:192.168.0.1可以写为
    ●8进制格式: 0300. 0250.0.1
    ●16进制格式: 0xCO. 0xA8.0.1
    ●10进制整数格式: 3232235521
    ●16进制整数格式: 0xC0A80001
    ●还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1

2.利用URL解析问题在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。例如:

  • 利用URL解析问题http://www.baidu.com@192. 168.0.1/与http://192.168.0.1请求的都是192.168.0.1的内容

  • 可以指向任意ip的域名xip.io: http://127 .0.0.1.xip.io/==>http://127.0.0.1/

  • 短地址http://dwz.cn/11SMa==>ttp://127.0.0.1

  • 利用句号。: 127。0。0。1==>127.0.0.1

  • 利用Enclosed alphanumerics

ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ  >>>  example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ 
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ 
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ 
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ 
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ 
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ 
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ 
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/106958903