CTF web题总结--SSRF

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内网。(正因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网)
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。即SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有发现这个请求是非法的,然后服务器以他的身份来访问其他服务器的资源。

利用php中file_get_contents()漏洞:

<?php
if (isset($_POST['url'])) {
    $url = $_POST['url'];
    if (preg_match('/^http[s]?:\/\/([(\w|\d)+\.]+[\/]?)*/', $url, $matches)) {
        $content = file_get_contents($_POST['url']);
        $filename = str_replace('/', '', $matches[1]);
        $filename = './chuoybinu/' . md5($filename) . $matches[1];
        file_put_contents($filename, $content);
        $image = getimagesize($filename);
        $image_type = $image[2];
        if(in_array($image_type, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP))) { 
            echo '<img src="' . $url . '">';
        } else {
            echo '<a href="' . $url . '">' . $url . '</a>';
        }
    } else if (preg_match('/^file:\/\/([\/\w\d\.]+)/', $url)) {
        $content = file_get_contents($url);
        readfile($file);
        $filename = './chuoybinu/' . md5(time());
        file_put_contents($filename, $content);
        if (strpos($url, '_')) {
            echo '<p>Flag is not such easy to get!(:◎)≡</p>';
        } else {
            echo '<a href="' . $filename . '">' . $filename . '</a>';
        }
    } else {
        echo '<p>Protocol Not Supported!(:◎)≡</p>';
    }
} else {
?>

审计代码发现开头必须是 http[s]😕/ 或者是 file:// ,可以进行SSRF攻击:

  1. 首先读取index.php:
file:///var/www/index.php
  1. 观察到flag在 flag_chunibyou.php 中,但是index限制读取的文文件不不能包含 _ ,所以只能找其他方法。
  2. 根据提示,数据库文件是可以访问的,从index文件中可以看到数据库结构,因此可以下载ibd文文件:
file://.../ctf/user.ibd
  1. 通过 strings user.idb 可以拿到password,进而拿到flag。
关于CTFSSRF的正则匹配,SSRF(Server-Side Request Forgery,服务器端请求伪造)是指攻击者通过构造恶意请求,使端发起对内部资源的请求。在CTF中,判断是否存在SSRF的点可以通过正则匹配来实现。 一般来说,判断是否存在SSRF的点可以通过检查代码中是否使用了可能触发SSRF的函数,如file_get_contents()、curl()、fsockopen()、fopen()等。通过正则表达式匹配代码中的这些函数调用,可以初步判断是否存在SSRF。 例如,可以使用正则表达式来匹配以下代码: file_get_contents\(|curl\(|fsockopen\(|fopen\( 这个正则表达式可以匹配代码中是否存在file_get_contents()、curl()、fsockopen()、fopen()等函数的调用。 另外,也可以通过正则表达式来匹配URL参数或输入框中的内容,判断是否使用了可能触发SSRF的协议,如http://、file://、dict://等。例如,可以使用以下正则表达式来匹配可能存在SSRF的URL: (http|https|ftp|file|dict):// 需要注意的是,正则表达式只能作为初步判断的手段之一,对于复杂的情况,还需要综合考虑代码逻辑和具体的应用场景来判断是否存在SSRF漏洞。同时,在进行正则匹配时,也要注意避免误判和漏判的情况。 综上所述,通过正则表达式匹配代码中的函数调用和URL参数,可以初步判断CTF目是否涉及SSRF漏洞。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [浅谈ssrf与ctf那些事](https://blog.csdn.net/qq_38154820/article/details/109252839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值