利用PHP_SESSION_UPLOAD_PROGRESS上传webshell

0x01 环境配置&利用条件

image-20210922091243957

image-20210924100930479

环境分析

  • session.use_strict_mode默认值为0,此时用户是可以自己定义Session ID

    我们在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:/tmp/sess_flag
    
  • session.upload_progress.prefix由我们构造的session.upload_progress.name值组成,最后被写入sess_文件里。

所以:

  • 这个文件名是PHPSESSID=flag,文件名可控
  • 内容也是可以通过PHP_SESSION_UPLOAD_PROGRESS写入的
  • 如果有文件包含,就可以 getshell

一般情况还需要条件竞争

在默认情况下,session.upload_progress.cleanup是开启的
所以要是处理了所有POST数据,它就会清除进度信息,这个文件就没了

所以需要使用条件竞争:
要在没有处理完post数据的时候就要去触发

0x02 题目

这个题是第五空间CTF的一道WEB题

<?php

if(!isset($_GET['mode'])){
    highlight_file(__file__);
}else if($_GET['mode'] == "eval"){
    $shell = $_GET['shell'] ?? 'phpinfo();';
    if(strlen($shell) > 15 | filter($shell) | checkNums($shell)) exit("hacker");
    eval($shell);
}


if(isset($_GET['file'])){
    if(strlen($_GET['file']) > 15 | filter($_GET['file'])) exit("hacker");
    include $_GET['file'];
}


function filter($var): bool{
    $banned = ["while", "for", "\$_", "include", "env", "require", "?", ":", "^", "+", "-", "%", "*", "`"];

    foreach($banned as $ban){
        if(strstr($var, $ban)) return True;
    }

    return False;
}

function checkNums($var): bool{
    $alphanum = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $cnt = 0;
    for($i = 0; $i < strlen($alphanum); $i++){
        for($j = 0; $j < strlen($var); $j++){
            if($var[$j] == $alphanum[$i]){
                $cnt += 1;
                if($cnt > 8) return True;
            }
        }
    }
    return False;
}

?>

0x03 利用

上传HTML:

name 要对应session.upload_progress.name中的 PHP_SESSION_UPLOAD_PROGRESS

image-20210924103445313

HTML代码:

<form action="http://xxxxxxxx.com:8088/" method="POST" enctype="multipart/form-data">
        <input type="text" name="PHP_SESSION_UPLOAD_PROGRESS" value="zzzz" />
        <input type="file" name="file" id="file">
        <input type="submit" name="submit" value="submit">

然后抓包,在里面插入我们的一句话木马

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwKWo8Vo-1632451391682)(…/Library/Application Support/typora-user-images/image-20210924104028736.png)]

所以文件地址就是 /tmp/sess_zz5
最终利用文件包含获取webshell

image-20210924103851551

image-20210924103915529

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于利用webshell流量检测实验演示各种php webshell变形方法绕WAF的问题,根据引用\[1\]和引用\[2\]的内容,可以提供以下回答: Webshell是一种用于获取对服务器某种程度上的操作权限的工具,而php webshell是一种通过网站端口对网站服务器进行操作的权限。在绕过Web应用程序防火墙(WAF)的过程中,可以采用多种php webshell变形方法。 其中,管理权限拿webshell(进后台)的方法包括正常上传webshell、数据库备份拿webshell、突破本地验证拿webshell上传其他脚本类型拿webshell、00截断拿webshell利用解析漏洞拿webshell利用编辑器拿webshell、网站配置插马拿webshell、通过编辑模板拿webshell、修改脚本直接拿webshell、数据库命令执行拿webshell、添加静态页面拿webshell、文件包含拿webshell等方法。\[2\] 而普通权限拿webshell(不进后台)的方法包括0day拿webshell、修改网站上传类型配置来拿webshell、IIS写入权限拿webshell、远程命令执行拿webshell上传漏洞拿webshell、SQL注入拿webshell等方法。\[2\] 综上所述,利用webshell流量检测实验演示各种php webshell变形方法绕WAF的过程中,可以根据具体情况选择适合的方法来绕过WAF的检测。 #### 引用[.reference_title] - *1* [PHP常见过waf webshell以及最简单的检测方法](https://blog.csdn.net/weixin_31900373/article/details/115193111)[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^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [拿webshell基础方法总结](https://blog.csdn.net/m0_46230316/article/details/105644775)[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^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值