无字母数字命令执行

目录

源码

PHP7版本

PHP5版本

发现的现象和思考


源码

<?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__);
}

限制条件:

  1. webshell长度不超过35位
  2. 除了不包含字母数字,还不能包含$_

PHP7版本

PHP修改了表达式的执行顺序,所以可以使用($a)()这样的方式来执行函数,例('phpinfo')()。但是这样的执行顺序在7版本前是不允许的

解决办法:($a)()

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

PHP5版本

**思路:**利用文件上传生成一个临时文件,然后利用点'.'执行生成的临时文件

/???/????????[@-[],该正则匹配的是/tmp/目录下的临时文件,临时文件一般是9位,最后以为字母为大写(不一定)

该部分上传的是文件中的内容,以id命令为例

发现的现象和思考

执行的命令需要紧跟文件内容的下线,当命令与下线有空行时,会不执行命令。并且有多条命令时,也只有紧靠着下线的命令会执行

当命令不紧跟着下线时,查看临时文件中的内容

创建一个a文件,并编写内容

使用diff命令进行临时文件与自己的文件对比

查看十六进制格式

可以发现自己编写的文件中只有0a,而临时文件中是0d0a

在hex编码中,0a代表换行符,0d代表回车符

通过查略知道,在Linux系统中,文件内容的换行符通常只使用换行符,其十六进制表示为0A,而不包含回车符,其十六进制表示为0D。这是因为Linux系统遵循的是Unix的传统,即使用LF(0A)作为行的结束符.

相比之下,Windows系统中的文本文件通常使用CR+LF(0D0A)作为行的结束符。如果你在Windows系统上编辑了一个文本文件,并将其传输到Linux系统上,然后使用`xxd`命令查看,你可能会在原本应该是LF(0A)的位置看到CR+LF(0D0A),除非你在传输或保存文件时进行了转换,以符合Linux的标准。

处理跨平台的文本文件时遇到了换行符不一致的问题,你可以使用各种工具来转换文件的换行符格式,比如`dos2unix`(将Windows风格的换行符转换为Unix/Linux风格的换行符)和`unix2dos`(将Unix/Linux风格的换行符转换为Windows风格的换行符)等。这些工具可以帮助你确保文件在不同操作系统之间正确地显示和处理。

通过执行文件,可以发现id这个命令收到了后面0d的影响

查略了一下网上,解释为:

Linux系统通常使用LF(0A)作为行的结束符。因此,如果文件原本是为Windows系统编写的(即使用CR+LF作为行的结束符),那么在Linux中直接查看或处理该文件时可能会遇到问题。

如果文件是二进制文件,并且包含`0D`作为数据的一部分(而不是作为行的结束符),那么这些`0D`字符将按原样保留,并在执行文件时作为数据的一部分进行处理

如果你尝试在Linux中执行一个包含`0D`字符的文本文件(而不是二进制文件),并且该文件没有被正确转换为Unix/Linux风格的换行符,那么执行操作可能会失败,因为Linux通常不会将文本文件作为可执行文件来处理。

相关推荐
带电的小王1 小时前
WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
android·智能手机·whisper·qualcomm
梦想平凡1 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
元争栈道2 小时前
webview和H5来实现的android短视频(短剧)音视频播放依赖控件
android·音视频
阿甘知识库3 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
元争栈道3 小时前
webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
android·音视频
MuYe3 小时前
Android Hook - 动态加载so库
android
居居飒4 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
Henry_He7 小时前
桌面列表小部件不能点击的问题分析
android
工程师老罗7 小时前
Android笔试面试题AI答之Android基础(1)
android
qq_397562319 小时前
android studio更改应用图片,和应用名字。
android·ide·android studio