您的位置 首页 php

CTF自学笔记(四)服务端请求伪造攻击「一」

私信回复001。获取更多干货。

前言

许多web应用都提供从其他服务器获取数据的功能,可以根据用户指定的URL下载或读取文件,服务端请求伪造攻击(SSRF)就是利用这一功能实现的。

比如,正常的web应用应该从指定的URL获取网页内容,而攻击者利用漏洞伪造服务端发起请求,可以突破客户端获取数据的限制,如获取内网资源,服务器本地资源等。

示例

pika CH u靶场中的SSRF通关演示。

SSRF第一关 ,先点击蓝色字体,可以看到URL发生变化。

将URL修改即可,如下图。

主要PHP源码如下,curl 模拟浏览器请求,比如获取远程浏览器内容,虽然可以用file_get-contents来代替,但curl还支持浏览器类型,cookie和ip等,功能相比强大。

curl_init() 初始化curl会话

curl_setopt() 设置curl传输选项

curl_exec 执行curl会话

 
if(isset($_GET['url']) && $_GET['url'] != null){

    //接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
    $URL = $_GET['url'];
    $CH = curl_init($URL);
    curl_setopt($CH, CURLOPT_HEADER, FALSE);
    curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
    $RES = curl_exec($CH);
    curl_close($CH) ;
//ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
//除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet
//curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT,  file 以及LDAP
    echo $RES;  

SSRF第二关 ,先在如下路径新建一个hello.txt文件内容如下。

同样点击蓝色字体,然后修改URL读取刚才创建的hello.txt文件。

可以看到hello.txt文件内容输出到浏览器页面。如下图。

主要PHP源码

 //读取PHP文件的源码:php://filter/read= convert .base64-encode/resource=ssrf.php
//内网请求:
if(isset($_GET['file']) && $_GET['file'] !=null){
    $filename = $_GET['file'];
    $str = file_get_contents($filename);
    echo $str;  

防护与绕过

常见防护是通过正则表达式的方式对请求地址过滤,如限制请求特定域名,禁止请求内网IP。

绕过方式

(1)使用格式绕过。

(2)转换IP地址的进制及IP地址省略写法。

如:IP为127.0.0.1,具体绕过0177.00.00.01(八进制),2130706433(十进制),0x7f.0x0.0x0.0x1(十六进制),127.1(IP地址省略写法)

(3)配置域名。若我们有可控域名,可将域名A记录指向要请求的IP进行绕过。如:evil.example.com=>10.11.11.3

(4)网址后加 xip.io,例如 127.0.0.1.xip.io 会被解析成 127.0.0.1

文章来源:智云一二三科技

文章标题:CTF自学笔记(四)服务端请求伪造攻击「一」

文章地址:https://www.zhihuclub.com/79674.shtml

关于作者: 智云科技

热门文章

网站地图