CTF web题总结--SSRF

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内网。(正因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网)
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。即SSRF漏洞就是通过篡改
获取资源的请求发送给服务器,但是服务器并没有发现这个请求是非法的,然后服务器以他的身份来访问其他服务器的资源。
ctf题:
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攻击。首先读取index.php
file:///var/www/index.php
然后观察到flag在 flag_chunibyou.php 中,但是index限制读取的文文件不不能包含 _ ,所以只能从
另外一个⻆角度去看。根据提示,数据库文件是可以访问的。然后从index文件中可以看到数据库结构,因此可以下载ibd文文件。
file://…/ctf/user.ibd
通过 strings user.idb 可以拿到password,进而而拿到flag。

猜你喜欢

转载自blog.csdn.net/qq_20817327/article/details/77686308