热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

【干货】web安全基础学习之SSRF漏洞

知了堂姐
2024-07-09 11:12:24
0
一、SSRF简介

SSRF(Server-Side Request Forgery),服务器端请求伪造,利用漏洞伪造服务器端发起请求,从而突破客户端获取不到数据限制。

二、SSRF的危害

ssrf漏洞的危害可以通过ssrf漏洞可以对内网或本地机器进行主机发现,服务版本探测或者针对内网或本地一些薄弱的应用进行攻击,同时利用ssrf漏洞还可以时服务器主动发起请求,从而做为一个攻击跳板或者绕过CDN找到其服务器的真实ip。

三、SSRF的成因

由于有的web应用需要实现从其它服务器上获取资源的功能,但是没有对url进行限制,导致可以构造非本意的url对内网或者其它服务器发起恶意请求。
大部分的web服务器架构中,web服务器自身都可以访问互联网和服务器所在的内网。



四、SSRF的作用

1.内外网的端口和服务扫描
2.主机本地敏感数据的读取
3.内外网主机应用程序漏洞的利用
4.内外网Web站点漏洞的利用
5.攻击内外网的web应用。sql注入、struct2、redis等 

五、SSRF 易出现位置

1.社交分享功能:
获取超链接的标题等内容进行显示
2.转码服务:
通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
3.在线翻译:
给网址翻译对应网页的内容
4.图片加载/下载:
例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
5.图片/文章收藏功能:
主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
6.云服务厂商:
它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以
进行ssrf测试
7.网站采集,网站抓取的地方:
一些网站会针对你输入的url进行一些信息采集工作
8.数据库内置功能:
数据库的比如mongodb的copyDatabase函数
9.邮件系统:
比如接收邮件服务器地址
10.编码处理, 属性信息处理,文件处理:
比如ffpmg,ImageMagick,docx,pdf,xml处理器等
11.未公开的api实现以及其他扩展调用URL的功能:
可以利用google 语法加上这些关键字去寻找SSRF漏

一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、
sourceURl、imageURL、domain……
12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使
用了xml引擎对象的地方 如wordpress xmlrpc.php)

六、SSRF的PHP相关函数

1、file_get_content()

(1)简介
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。
参数 描述
path 必需。规定要读取的文件,或者url。
include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。
提示:该函数是二进制安全的。(意思是二进制数据(如图像)和字符数据都可以使用此函数写入。)
(2)实例
echo file_get_contents("test.txt");
?>
上面的代码将输出:
This is a test file with test text.


实例2:
获取某个网址页面的源代码也可以使用file_get_contents() 函数
if(isset($_POST['url']))
{
    $content=file_get_contents($_POST['url']);
    $filename='./ssrfimages/'.rand().'.img';\    //ssrfimages需要事先创建
    file_put_contents($filename,$content);
    echo $_POST['url'];
    $img="";
}
echo $img;
?>
上面的代码将输出:
url地址所对应的内容。

注意:
如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。
  1. fsockopen()
(1)简介
fsockopen —打开Internet或Unix域套接字连接
(2)参量
hostname
如果安装了OpenSSL支持,则可以在ssl://或tls://前面hostname加上前缀,以通过TCP / IP使用SSL或TLS客户端连接来连接到远程主机。
port
端口号。对于不使用端口的传输,例如unix://,可以将其省略并用-1跳过。
errno
如果提供,则保存在系统级connect()调用中发生的系统级错误号。
如果返回的errno值为0且函数返回FALSE,则表明在connect()调用之前发生了错误。这很可能是由于初始化套接字时出现问题。
errstr
错误消息为字符串。
timeout
连接超时,以秒为单位。
注意事项:
如果您需要设置超时以通过套接字读取/写入数据,请使用stream_set_timeout(),因为fsockopen()的timeout参数仅在连接套接字时适用。
(3)实例:
$fp = fsockopen("172.16.12.14", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)
\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: 172.16.12.14\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>
$host=$_GET['url'];
$fp = fsockopen("$host", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

3、curl_exec()
(1)简介
执行一个cURL会话
执行给定的cURL会话。
这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。
(2)实例:
获取一个网页
// 创建一个cURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "172.16.12.14/ssrf1.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
// 抓取URL并把它传递给浏览器
curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>
if(isset($_GET['url']))
{ $link=$_GET['url'];
//$filename='./'.rand().'.txt';
$curlobj=curl_init($link);     //创建一个curl资源
curl_setopt($curlobj,CURLOPT_FILE,$link); //这个文件将是你放置传送的输出文件
curl_setopt($curlobj,CURLOPT_HEADER,0);    //不返回头部信息
$result=curl_exec($curlobj);
curl_exec($curlobj); //抓取url资源并将它传递给游览器
curl_close($curlobj); //关闭cURL资源,并且释放系统资源
//fclose($link);
//file_put_contents($filename, $result);
echo $result;
}
?>

七、SSRF防御方式

1、过滤返回的信息,如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。重定向指定的页面。
3、限制请求的端口,比如80,443,8080,8090。
4、禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。
5、使用DNS缓存或者Host白名单的方式。

八、pokachu SSRF实战

1、第一关ssrf(curl)

()首页存在一个链接,可以发现点击说首页链接后,诗的页面的url为:
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
由此可得,我们可以直接在url后尝试以服务器的身份去进行一些攻击,比如访问服务器上的文件,比如利用服务器做为内网探测等。



(2)内网探测
?url=http://127.0.0.1:3306  //探测数据库是否开启
探测出数据库版本为5.7.26


2、第二关ssrf(file_get_content)

(1)第二关可以发现首页同样有一个链接,点击链接后,发现正是链接:
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
这关与第一关相似知识函数不同,我们也可以直接在file后尝试以服务器的身份去进行一些攻击,比如访问服务器上的文件,比如利用服务器做为内网探测等。


(2)内网探测
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///D:/phpstudy_pro/WWW/test.txt
直接访问服务器上的test.txt文件。 
大家都在看

java三大集合框架有哪些?细数这些框架的区别

2024-07-09 浏览次数:0

javaweb开发要学什么?学java可以从事什...

2024-07-09 浏览次数:0

2019就业成果,是时候向大家汇报了

2024-07-09 浏览次数:0

HTTP请求包--Request

2024-07-09 浏览次数:0

软件测试培训费用大概多少?0元试听不满意不收钱

2024-07-09 浏览次数:0

同分享,共进步|知了堂內师学员于校内举办线下学习...

2024-07-09 浏览次数:0
最新资讯
知了堂CISP-PTE班学员顺...   网络安全领域中有两个常见的术语,红队与蓝队,它们既代表安全行业里的专业岗位,同时也用来描述攻击者...
成都IT培训学校哪一个好点?成...   成都,这座科技日新月异、发展迅速的城市,吸引了大批有志于投身IT行业的青年才俊。他们渴望学习最前...
没有基础可以学JAVA吗?成都...   随着数字化时代的快速发展,Java作为一种流行的编程语言,已经成为了IT行业的必备技能。许多初学...
数字驱动,营销赋能丨工商职院电...   纸上得来终觉浅,绝知此事要躬行。为了让学生更好的了解自己与所应聘岗位的匹配度,同时也希望在实际业...
网络安全工程师培训靠谱吗?助您...   在当今数字化时代,网络安全问题日益凸显,网络安全工程师的需求也随之水涨船高。然而,面对市场上众多...
选择成都汇智知了堂,选靠谱的网...   在这个数字化飞速发展的时代,网络安全已经成为个人和企业不可忽视的重要议题。面对日益复杂的网络威胁...
寻找较好的网络安全培训机构?成...   在这个互联网高速发展的时代,网络安全已经成为我们每个人都需要关注的问题。无论是个人还是企业,都需...
安全运维学费多少?选择成都汇智...   在数字化时代,网络安全问题日益凸显,安全运维作为保障企业信息安全的重要一环,其重要性不言而喻。然...